3.19作业
作业要求:下述所有代码画图以及分析代码执行流程
1、以定义阶段为准,先画出名称空间的嵌套关系图
2、然后找到调用函数的位置,写出函数调用时代码的执行过程,涉及到名字的查找时,参照1中画好
的嵌套图,标明查找顺序,一层一层直到找到位置
=题目一=
input=333
def func():
input=444
func()
print(input)
print是在全局名称中的则会找到input=333
=题目二=
def func():
print(x)
x=111
func()
调用func()运行函数体遇到print(x),当前位置没有则找到全局名称空间的x=111
=题目三=
x=1
def func():
print(x)
def foo():
x=222
func()
foo()
调用foo(),运行函数体func(),则运行func()函数体代码,找到print(x)当前位置没有则找到全局名称空间的x=1
=题目四=
input=111
def f1():
def f2():
# input=333
print(input)
input=222
f2()
f1()
调用f1()遇到调用f2(),遇到print(input),则找到input=222
=题目五=
x=111
def func():
print(x) #
x=222
func()
调用func(),函数体代码内x先调用后定义,报错
=题目六=
x=111
def foo():
print(x,)
def bar():
print(x)
foo()
bar()
调用foo(),bar(),遇到print(x),局部名称空间没有,找到全局名称空间的x=111,然后打印
=题目七=
x=1
def func2():
func1()
x=2
def func1():
print(x)
x=3
func2()
调用func2(),在调func1(),遇到print(x),则找到全局名称空间的x=3,然后打印
=题目八=
1、如下全局变量记录了当前登录用户,编写登录功能,一旦用户登录成功,则将全局变量赋值为当前登录的用户名
login_user=None
login_user=None
def login():
inp_name=input("your name:").strip()
inp_pwd=input('your pwd:').strip()
with open(r'users.txt','r',encoding='utf-8') as f:
for line in f:
name,password=line.strip().split(':')
if inp_name == name and inp_pwd == password:
login_user=inp_name
return login_user
else:
print('用户名或密码错误')
print(login())
2、针对之前编写的查询余额的功能,添加额外的逻辑:如果用户没有登录,则先执行登录功能
login_user=None
def show_money():
"""显示余额"""
global login_user
if not login_user:
user_login()
with open("db.txt", "r", encoding="utf-8") as f:
for line in f:
name, pwd, mon = line.strip("\n").split(":")
if login_user in line:
print("{}用户账户余额为{}".format(login_user, mon))
# return mon
def user_login():
"""用户登录验证"""
user_name=input("请输入用户名>>").strip()
passwd=input("请输入密码>>").strip()
with open("db.txt", "r", encoding="utf-8") as f:
for line in f:
name, pwd, money = line.strip("\n").split(":")
if user_name == name and passwd == pwd:
print("用户{}登录成功。".format(user_name))
global login_user
login_user=user_name
break
else:
print("用户名或密码错误。")
show_money()