day15---作业

1、下述所有代码画图以及分析代码执行流程

# 1、以定义阶段为准,先画出名称空间的嵌套关系图
# 2、然后找到调用函数的位置,写出函数调用时代码的执行过程,涉及到名字的查找时,参照1中画好
# 的嵌套图,标明查找顺序,一层一层直到找到位置
# ===================题目一===================
input=333
def func():
    input=444
func()
print(input)

因为有全局变量input=333,所以print(input)的结果为333

2

# ===================题目二===================
def func():
    print(x)
x=111

func()

局部命名空间没有x-->到全局命名空间x=111,所以print(x)--->111

3

# ===================题目三===================
x=1
def func():
   print(x)


def foo():
    x=222
    func()

foo()

foo()函数调用-->将x=222放进foo()的局部命名空间,func()函数调用--> func()局部命名空间没有x-->全局命名空间x=1,所以打印结果为1

4

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

    f2()

f1()

f1()函数调用-->x=222放入f1()局部命名空间-->f2()函数调用,f2()局部命名空间没有找到input,到f1()局部命名空间找,input=222-->打印结果为222

5

# ===================题目五===================
x=111
def func():
    print(x) #
    x=222

func()

在func()调用阶段,执行到print(x),因为在func()内有x=222,所以解释器会认为print(x)打印的是局部名称空间中的x,但是因为x在print之后,所以会报错未定义,就引用

6

# ===================题目六===================
x=111

def foo():
    print(x,)

def bar():
    print(x)

foo()
bar()

首先调用foo(),foo()函数里没有x的定义-->全局命名空间x=111,打印结果为111;

然后调用bar(),bar()函数里没有x 的定义-->全局命名空间x=111,打印结果为111。

7

# ===================题目七===================
x=1
def func2():
    func1()

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

x=3

func2()

调用 func2()-->调用func1()-->func1()局部命名空间找不到x-->全局命名空间,到调用func1()处上层的全局命名空间找,打印结果为x=3

8

# ===================题目八===================
1、如下全局变量记录了当前登录用户,编写登录功能,一旦用户登录成功,则将全局变量赋值为当前登录的用户名
login_user=None
user_name="egon"
user_pwd="123"
login_user=None
def use_auth(inp_name,inp_pwd):

    if inp_name == user_name and inp_pwd == user_pwd:
        print("登录成功")
        global  login_user
        login_user=inp_name

use_auth("egon","123")
print(login_user)

9

针对之前编写的查询余额的功能,添加额外的逻辑:如果用户没有登录,则先执行登录功能
login_user=None
def show_money():
    """显示余额"""
    global login_user
    if not login_user:
        login()

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

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

show_money()
原文地址:https://www.cnblogs.com/surpass123/p/12529388.html