作业11

作业 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()
原文地址:https://www.cnblogs.com/achai222/p/12525038.html