当你发现自己的才华撑不起野心时,就请安静下来学习吧。

Personal site

↑点击传送

3.19作业

作业要求:下述所有代码画图以及分析代码执行流程
1、以定义阶段为准,先画出名称空间的嵌套关系图
2、然后找到调用函数的位置,写出函数调用时代码的执行过程,涉及到名字的查找时,参照1中画好
的嵌套图,标明查找顺序,一层一层直到找到位置

=题目一=

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

print是在全局名称中的则会找到input=333

=题目二=

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

func()

调用func()运行函数体遇到print(x),当前位置没有则找到全局名称空间的x=111

=题目三=

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


def foo():
    x=222
    func()

foo()

调用foo(),运行函数体func(),则运行func()函数体代码,找到print(x)当前位置没有则找到全局名称空间的x=1

=题目四=

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

    f2()

f1()

调用f1()遇到调用f2(),遇到print(input),则找到input=222

=题目五=

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

func()

调用func(),函数体代码内x先调用后定义,报错

=题目六=

x=111

def foo():
    print(x,)

def bar():
    print(x)

foo()
bar()

调用foo(),bar(),遇到print(x),局部名称空间没有,找到全局名称空间的x=111,然后打印

=题目七=

x=1
def func2():
    func1()

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

x=3

func2()

调用func2(),在调func1(),遇到print(x),则找到全局名称空间的x=3,然后打印

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

login_user=None
login_user=None
def login():
    inp_name=input("your name:").strip()
    inp_pwd=input('your pwd:').strip()
    with open(r'users.txt','r',encoding='utf-8') as f:
        for line in f:
            name,password=line.strip().split(':')
            if inp_name == name and inp_pwd == password:
                login_user=inp_name
                return login_user
        else:
            print('用户名或密码错误')
print(login())

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

login_user=None
def show_money():
    """显示余额"""
    global login_user
    if not login_user:
        user_login()

    with open("db.txt", "r", encoding="utf-8") as f:
        for line in f:
            name, pwd, mon = line.strip("\n").split(":")
            if login_user in line:
                print("{}用户账户余额为{}".format(login_user, mon))
                # return mon

def user_login():
    """用户登录验证"""
    user_name=input("请输入用户名>>").strip()
    passwd=input("请输入密码>>").strip()
    with open("db.txt", "r", encoding="utf-8") as f:
        for line in f:
            name, pwd, money = line.strip("\n").split(":")
            if user_name == name and passwd == pwd:
                print("用户{}登录成功。".format(user_name))
                global login_user
                login_user=user_name
                break
        else:
            print("用户名或密码错误。")

show_money()
posted @ 2020-03-19 16:38  Joab-0429  阅读(126)  评论(0编辑  收藏  举报