作业 —— day15

作业要求:下述所有代码画图以及分析代码执行流程

1.以定义阶段为准,先画出名称空间的嵌套关系图

2.然后找到调用函数的位置,写出函数调用时代码的执行过程,涉及到名字的查找时,参照1中画好的嵌套图,标明查找顺序,一层一层直到找到位置

=题目1=

input=333       # 定义全局变量input,赋值333
def func():     # 定义全局函数func(),无形参
    input=444   # 定义局部变量input,赋值444
func()          # 调用全局函数func()
print(input)    # 输出全局变量input的值

# 输出:
# 333

# 过程:定义全局变量input,赋值333;定义全局函数func(),调用全局函数func(),执行函数func()
	   定义全局函数func()内的局部变量input,赋值444,无返回值,func()调用结束后,销毁
	   函数func()销毁后,只剩全局变量input=333,print输出333

01

=题目2=

def func():     # 定义全局函数func(),无形参
    print(x)    # 输出x
x=111           # 定义全局变量x,赋值111
func()          # 调用全局函数func()

# 输出:
# 111

# 过程:定义全局函数func(),定义全局变量x,,赋值111
	   在全局函数func()内print(x),但是函数func()内无x,就去全局名称空间找,找到x=111
	   调用函数func(),找到全局变量x=111,print输出111

02

=题目3=

x=1             # 定义全局变量x,赋值1
def func():     # 定义全局函数func(),无形参
   print(x)     # 输出x
def foo():      # 定义全局函数foo(),无形参
    x=222       # 定义局部变量x,赋值222
    func()      # 调用全局函数func()
foo()           # 调用全局函数foo()

# 输出:
# 1

# 过程:定义全局变量x,赋值11,定义全局函数func(),无形参,定义全局函数foo()
	   在全局函数func()内print(x),但是函数func()内无x,就去全局名称空间找,找到x=1
	   在全局函数fooc()内定义局部变量x,赋值222,调用全局函数func(),输出全局名称空间的x=1
	   调用全局函数foo(),跳过x=222,因为x没被调用,调用函数func(),找到全局变量x=1,print输出1

03

=题目4=

input=111               # 定义全局变量input,赋值111
def f1():               # 定义全局函数f1(),无形参
    def f2():           # 定义f1内的局部函数f2(),无形参
        print(input)    # 输出input
    input=222           # 定义局部函数f2()内的局部变量input,赋值222
    f2()                # 调用局部函数f2()
f1()                    # 调用全局函数f1()

# 输出:
# 222

# 过程:定义全局变量input,赋值111,定义全局函数f1(),无形参
	   在全局函数f1()内定义局部函数f2(),无形参
	   在局部函数f2()内输出input,但是f2()内本身无input变量,就去和f2()同级的局部找,找到input=222
	   在全局函数f1()内调用f2(),print局部变量input=222
	   调用全局函数f1(),f1()内调用f2(),找到全局变量局部变量input=222,print输出222

04

=题目5=

x=111           # 定义全局变量x,赋值111
def func():     # 定义全局函数func(),无形参
    print(x)    # 输出x
    x=222       # 定义局部变量x,赋值222
func()          # 调用函数func()

# 报错:
# UnboundLocalError: local variable 'x' referenced before assignment

# 过程:定义全局变量x,赋值111;定义全局函数func(),无形参
	   在全局函数func()输出x,但是此时尚未定义变量x,去上一层找,找不到,去全局和内置也找不到,就会报错
	   在全局函数func()定义局部变量x,赋值222
	   调用全局函数func(),在输出x的时候找不到x,程序报错

05

=题目6=

x=111           # 定义全局变量x,赋值111
def foo():      # 定义全局函数foo(),无形参
    print(x,)   # 输出x
def bar():      # 定义全局函数bar(),无形参
    print(x)    # 输出x
foo()           # 调用全局函数foo()
bar()           # 调用全局函数bar()

# 输出:
# 111

# 过程:定义全局变量x,赋值111;定义全局函数foo(),无形参;定义全局函数bar(),无形参
	   在全局函数foo()输出x,但是此时尚未定义变量x,去全局找,找到x=111
	   在全局函数bar()输出x,但是此时尚未定义变量x,去全局找,找到x=111
	   调用全局函数foo(),找到全局变量x=111,输出111
	   调用全局函数bar(),找到全局变量x=111,输出111

06

=题目7=

x=1             # 定义全局变量x,赋值1
def func2():    # 定义全局函数func2(),无形参
    func1()     # 调用全局函数func1()
x=2             # 定义全局变量x,赋值2
def func1():    # 定义全局函数func1(),无形参
    print(x)    # 输出x
x=3             # 定义全局变量x,赋值3
func2()         # 调用全局函数func2()

# 输出:
# 3

# 过程:定义全局变量x,赋值1;定义全局函数f2(),无形参
       定义全局变量x,赋值2;定义全局函数f1(),无形参,定义全局变量x,赋值3
       全局变量x的值一直被覆盖,最后为3
	   全局函数f2()调用全局函数f1(),全局函数f1()输出x,f1()内找不到x,在全局找到x=3,输出3

07

=题目8=

1.如下全局变量记录了当前登录用户,编写登录功能,一旦用户登录成功,则将全局变量赋值为当前登录的用户名login_user=None

login_user = None
def login():
    inp_usr = input('请输入用户名:').strip()
    inp_pwd = input('请输入密码:').strip()
    if inp_usr == 'xxq' and inp_pwd == '123':
        print("登录成功!")
        global login_user
        login_user = inp_usr
    else:
        print("帐号或密码错误!")
login()
print('当前登录的用户是:',login_user)

2.针对之前编写的查询余额的功能,添加额外的逻辑:如果用户没有登录,则先执行登录功能

posted @ 2020-03-19 23:25  轻描丨淡写  阅读(175)  评论(0编辑  收藏  举报