作业0319

作业要求:下述所有代码画图以及分析代码执行流程

1、以定义阶段为准,先画出名称空间的嵌套关系图

2、然后找到调用函数的位置,写出函数调用时代码的执行过程,涉及到名字的查找时,参照1中画好

的嵌套图,标明查找顺序,一层一层直到找到位置

=题目一=

input=333
def func():
    input=444
func()
print(input)

图:作业0319

=题目二=

def func():
    print(x)
x=111

func()

图:作业0319

=题目三=

x=1
def func():
   print(x)


def foo():
    x=222
    func()

foo()

图:作业0319

=题目四=

input=111
def f1():
    def f2():
        ## input=333
        print(input)
    input=222

    f2()

f1()

图:作业0319

=题目五=

x=111
def func():
    print(x) ##
    x=222

func()

图:作业0319

=题目六=

x=111

def foo():
    print(x,)

def bar():
    print(x)

foo()
bar()

图:作业0319

=题目七=

x=1
def func2():
    func1()

x=2
def func1():
    print(x)

x=3

func2()

图:作业0319

=题目八=

1、如下全局变量记录了当前登录用户,编写登录功能,一旦用户登录成功,则将全局变量赋值为当前登录的用户名
login_user=None

def log_in():
    '''登录功能'''
    user_info = {}
    with open(r'C:UsersccfPycharmProjectsS14day15文件user_info.txt', mode='r', encoding='utf-8') as f:
        for line in f:
            user, pwd = line.strip().split(':')
            user_info[user] = pwd
            # print(user_info)
    for x in range(0, 3):
        inp_name = input('请输入账号:').strip()
        if inp_name in user_info:
            inp_pwd = input('账户名正确,请输入密码:').strip()
            if inp_pwd == user_info[inp_name]:
                print("登录成功")
                login_user = inp_name
                break
            else:
                print("密码错误,请重新输入:")
        else:
            print("账号错误,请重新输入:")

log_in()

2、针对之前编写的查询余额的功能,添加额外的逻辑:如果用户没有登录,则先执行登录功能

def check_money(username):
    dic = {}
    with open(r'C:UsersccfPycharmProjectsS14day15文件db3.txt', 'r', encoding='utf-8') as f:
        for line in f:
            user, money = line.strip().split(':')
            dic[user] = int(money)

    
    if not user_info.get('user'):
        
        log_in()

    
    if username not in dic:
        return

    
    return dic.get(username)

check_money()