作业 11
作业要求:下述所有代码画图以及分析代码执行流程
1、以定义阶段为准,先画出名称空间的嵌套关系图
2、然后找到调用函数的位置,写出函数调用时代码的执行过程,涉及到名字的查找时,参照1中画好的嵌套图,标明查找顺序,一层一层直到找到位置
# ===================题目一===================
input=333 # 将333的内存地址给全局变量input
def func(): # 定义func()函数,需确定其中变量名关系
input=444 # 定义局部变量
func() # 执行func()
print(input) # 找input--当前在全局,从全局开始找,有全局变量input333,输出
# 333
# ===================题目二===================
def func(): # 定义func(),需确定其中变量名关系:
print(x) # 需要变量x,x按func()->全局->内置的顺序找
# func内不存在,全局内有,使用全局的x
x=111 # 定义全局x的值:111
func() # 调用func,print(x),使用全局x,全局x已定义,输出111
# 111
# ===================题目三===================
x=1 # 定义全局x的值
def func(): # 定义func(),需确定其中变量名关系: x
print(x) # 需要变量x,x按func()->全局->内置的顺序找
# func内不存在,全局内有,使用全局的x
def foo(): # 定义foo(),需确定其中变量名关系: 无
x=222 # 定义局部x的值
func() # 调用func()
foo()
# 1,定义局部x=222
# 2,调用func()
# 3,print(x),使用全局的x,全局x已定义,输出1
# 1
# ===================题目四===================
input=111 # 定义全局input的值
def f1(): # 定义f1(),需确定其中变量名关系: 无
def f2(): # 定义f2(),需确定其中变量名关系: input
# input=333
print(input) # 需要变量input,input按f2()->f1()->全局->内置的顺序找
# f2内不存在,f1内有,使用局部f1的input
input=222
f2()
f1()
# 1,执行f1() 2,定义f2() 3,定义局部input的值222
# 4,执行f2() 5,print(input),使用局部f1的input,input已定义,输出222
# 222
# ===================题目五===================
x=111 # 定义全局x的值
def func(): # 定义func(),需确定其中变量名关系: x
print(x) # 需要变量x,x按func()->全局->内置的顺序找
# func内存在,使用func的x
x=222
func()
# 1,执行func() 2,print(x),使用func的x,x未定义,报错
# 报错
# ===================题目六===================
x=111 # 定义全局x的值
def foo(): # 定义foo(),需确定其中变量名关系: x
print(x,) # 需要变量x,x按foo()->全局->内置的顺序找
# foo内不存在,全局存在,使用全局的x
def bar(): # 定义bar(),需确定其中变量名关系: x
print(x) # 需要变量x,x按bar()->全局->内置的顺序找
# bar内不存在,全局存在,使用全局的x
foo()
# 1,执行foo() 2,print(x),使用全局的x,x已定义,输出111
bar()
# 1,执行bar() 2,print(x),使用全局的x,x已定义,输出111
# 111 111
# ===================题目七===================
x=1 # 定义全局x的值
def func2(): # 定义func2(),需确定其中变量名关系: 无
func1()
x=2 # 定义全局x的值
def func1(): # 定义func1(),需确定其中变量名关系: x
print(x) # 需要变量x,x按func1()->全局->内置的顺序找
# func1内不存在,全局内有,使用全局的x
x=3 # 定义全局x的值
func2()
# 1,执行func2() 2,执行func1()
# 3,执行print(x),需要变量x,使用全局的x,全局已定义,x=3,输出3
# 3
# ===================题目八===================
# 1、如下全局变量记录了当前登录用户,编写登录功能,
# 一旦用户登录成功,则将全局变量赋值为当前登录的用户名
# login_user=None
# 2、针对之前编写的查询余额的功能,添加额外的逻辑:
# 如果用户没有登录,则先执行登录功能
# ----------1----------------------
login_user=None
def login():
inp_user = input("请输入用户名:")
inp_password = input("请输入密码:")
with open("user_list.txt","r",encoding="utf-8") as f:
for line in f:
user, password = line.strip().split(":")
if user == inp_user and password == inp_password:
print("登陆成功")
global login_user
login_user = inp_user
break
else:
print("账号或密码错误")
# login()
# print(login_user)
# ----------2----------------------
def inquire():
while login_user is None:
login()
inquire_user = input("请输入要查询余额的账号:")
with open("db.txt","r",encoding="utf-8") as f:
for line in f:
user,money = line.strip().split(":")
if user == inquire_user:
print(money)
break
else:
print("账号不存在")
inquire()