Practice questions:
一、下述所有代码画图以及分析代码执行流程
# 以定义阶段为准,先画出名称空间的嵌套关系图
# 然后找到调用函数的位置,写出函数调用时代码的执行过程,涉及到名字的查找时,参照1中画好的嵌套图,标明查找顺序,一层一层直到找到位置
# ===================题目一===================
input=333
def func():
input=444
func()
print(input)
# 答案:333 先全局找到input=333
# ===================题目二===================
def func():
print(x)
x=111
func()
# 答案:111 先局部没有,后全局找到x=111
# ===================题目三===================
x=1
def func():
print(x)
def foo():
x=222
func()
foo()
# 答案:1 先func局部没有,再全局找到x=1
# ===================题目四===================
input=111
def f1():
def f2():
input=333
print(input)
input=222
f2()
f1()
# 答案:333 先局部找到f2,f2中有input=333
# ===================题目五===================
x=111
def func():
print(x) #
x=222
func()
# 答案:报错 先在局部找到x=222,后运行先定义在调用,print在赋值前报错
# ===================题目六===================
x = 111
def foo():
print(x, )
def bar():
print(x)
foo()
bar()
# 答案:111 111 先局部没有,再全局x=111
# ===================题目七===================
x=1
def func2():
func1()
x=2
def func1():
print(x)
x=3
func2()
# 答案:3 先在局部找不到,再全局找,x=3覆盖了x=1和x=2
# ===================题目八===================
# 1、如下全局变量记录了当前登录用户,编写登录功能,一旦用户登录成功,则将全局变量赋值为当前登录的用户名
login_user=None
# 2、针对之前编写的查询余额的功能,添加额外的逻辑:如果用户没有登录,则先执行登录功能
# 1:
login_user = None
print('User:%s'%(login_user))
is_user = 'egon'
is_pwd = '123'
def login():
inp_name = input('Username:').strip()
inp_pwd = input('Password:').strip()
if inp_name == is_user and inp_pwd == is_pwd:
global login_user
login_user = inp_name
print('User:%s'%(login_user))
else:
print('No User')
login()
# 2:
login_user = None
def login():
inp_name = input('Username:').strip()
inp_pwd = input('Password:').strip()
with open('user', 'rt', encoding='utf-8') as f:
for item in f:
users, pwds, balances = item.strip('\n').split('|')
if inp_name == users and inp_pwd == pwds:
print('Login Successful')
global login_user
login_user = inp_name
break
else:
print('Login Error')
def check():
if login_user == None:
print('Plese log in to your account first !')
login()
else:
with open('user', 'rt', encoding='utf-8') as f:
for item in f:
users, pwds, balances = item.strip().split('|')
if login_user == users:
print('User:%s Balance:%s' % (users, balances))
def quit():
global login_user
login_user = None
dict = {
'1': [login, '登录'],
'2': [check, '查询'],
'3': [quit, '退出']
}
while True:
print('Account:%s' % (login_user))
for k in dict:
print('%s %s' % (k, dict[k][1]))
choice = input('Cmd:').strip()
if choice in dict:
dict[choice][0]()
else:
print('指令不存在')