作业:
# 作业要求:下述所有代码画出名称空间嵌套图以及分析代码执行流程
# 1、以定义阶段为准,先画出名称空间的嵌套关系图
# 2、然后找到调用函数的位置,写出函数调用时代码的执行过程,涉及到名字的查找时,参照1中画好的嵌套图,标明查找顺序,一层一层直到找到位置
# ===================题目一===================
input=333
def func():
input=444
print(input)
func()
print(input)
ANSR:
444 # 在全局运行自定义函数,函数内部有input,直接输出变量值
333 # 打印全局的input变量值
题目一图片:
# ===================题目二===================
def func():
print(x)
x=111
func()
ANSR:
111 # 调用函数func,局部空间无变量x,去全局寻找。
题目二图片:
# ===================题目三===================
x=1
def func():
print(x)
def foo():
x=222
func()
foo()
ANSR:
1 # 调用函数foo,foo执行时,在局部空间内调用全局自定义函数func,func内需要参数x,在全局空间找到x。
题目三图片:
# ===================题目四===================
input=111
def f1():
def f2():
# input=333
print(input)
input=222
f2()
f1()
ANSR:
222 # 调用函数f1,需要执行f1的局部函数f2,f2在f1内找到变量input
题目四图片:
# ===================题目五===================
x=111
def func():
print(x) #
x=222
func()
ANSR:
报错: # 调用函数func,func局部空间执行print(x),func在定义的时候,确定了内部的x是局部变量,但执行到print的时候,x还没在局部空间定义,所以报错。
题目五图片:
# ===================题目六===================
x=111
def foo():
print(x,)
def bar():
print(x)
foo()
bar()
ANSR:
111 # 调用函数,局部空间找不到变量,去全局寻找
111 # 调用函数,局部空间找不到变量,去全局寻找
题目六图片:
# ===================题目七===================
x=1
def func2():
func1()
x=2
def func1():
print(x)
x=3
func2()
ANSR:
3 # 调用func2,func2内部调用func1,func1需要变量x,全局空间找到变量x=3(1,2已经与变量名x解除绑定)
题目七图片:
# ===================题目八===================
1、如下全局变量记录了当前登录用户,编写登录功能,一旦用户登录成功,则将全局变量赋值为当前登录的用户名
login_user=None
2、针对之前编写的查询余额的功能,添加额外的逻辑:如果用户没有登录,则先执行登录功能
ANSR:
# 1
def login():
inp_name = input("Please input your user name: ").strip()
inp_pwd = input("Please input your user password: ").strip()
with open("db.txt", mode="rt", encoding="utf-8") as read_f:
for line in read_f:
name, pwd, *_ = line.strip("
").split(":")
if name == inp_name and inp_pwd == pwd:
print("login successful")
global login_user
login_user == inp_name
break
else:
print("Username or password error")
# 2
def balance():
"""查询余额功能:输入账号查询余额"""
if login_user:
with open("db.txt", mode="rt", encoding="utf-8") as read_f:
for line in read_f:
if login_user in line:
name, pwd, *_,balance = line.strip().split(":")
print(name,pwd,balance)
break
else:
print("用户没登录,请先登录")
login()