作业要求:下述所有代码画图以及分析代码执行流程
1、以定义阶段为准,先画出名称空间的嵌套关系图
2、然后找到调用函数的位置,写出函数调用时代码的执行过程,涉及到名字的查找时,参照1中画好
的嵌套图,标明查找顺序,一层一层直到找到位置
=题目一=
input = 333
def func():
input = 444
func() # 调用函数func,找到局部变量input=444
print(input) # 顶级代码中的input仍然是333
=题目二=
def func():
print(x) #
x = 111
func() # 调用函数,局部变量中没有x,向外找到全局名称空间中有,所以打印111
=题目三=
x = 1
def func():
print(x) # 函数func定义的时候就确定了x=1
def foo():
x = 222
func() # x=1,与foo内的局部变量没有半毛钱关系
foo() # 1
=题目四=
input = 111
def f1():
def f2():
# input=333
print(input) # 外层局部名称空间找到input=222
input = 222
f2()
f1() # 嵌套调用函数f2,打印222
=题目五=
x = 111
def func():
print(x) # 在func函数局部空间内有变量x,调用时会报逻辑错误(先引用,后定义)
x = 222
func() # 报错
=题目六=
x = 111
def foo():
print(x) # foo局部没有x,到全局找到x=111
def bar():
print(x) # bar局部没有x,到全局找到x=111
foo() # 111
bar() # 111
=题目七=
x = 1
def func2():
func1() # 间接调用func1,func1局部变量没有x,去全局找到x=3
x = 2
def func1():
print(x)
x = 3 # 在func2函数调用之前,全局变量中x被最终赋值成了3
func2() # 3
=题目八=
1、如下全局变量记录了当前登录用户,编写登录功能,一旦用户登录成功,则将全局变量赋值为当前登录的用户名
login_user = None
login_user = None
def login():
i = 0
while i < 3:
inp_name = input('请输入您的用户名:').strip()
inp_pwd = input('请输入您的密码:').strip()
with open('db.txt', mode='r', encoding='utf-8') as f:
for line in f:
name, pwd, *_ = line.strip('\n').split(':')
if name == inp_name and pwd == inp_pwd:
print('登录成功!')
global login_user
login_user = inp_name
return
else:
print('登录失败!请重新登录')
i += 1
2、针对之前编写的查询余额的功能,添加额外的逻辑:如果用户没有登录,则先执行登录功能
user_dic = {}
def check(user):
while True:
if login_user == user:
with open('db.txt', mode='r', encoding='utf-8') as c_f:
for line in c_f:
name, pwd, money, *_ = line.strip('\n').split(':')
user_dic[name] = [pwd, money]
print(f'用户{login_user}的账户余额为{user_dic[login_user][1]}元')
else:
print('当前用户尚未登录,请先登录')
login()