python_task_10

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

input = 333


def func():
    input = 444  # 在函数调用时产生局部作用域的名字input


func()
print(input)  # 在全局找input,结果为444

在这里插入图片描述
程序代码执行过程:
起始位置是全局作用域,所以先查找全局名称空间,找到input=333,故打印333

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

func()

def func():
    print(x) #在局部找x


x = 111

func() # 111

在这里插入图片描述
程序代码执行过程:
起始位置是局部作用域,先查找局部名称空间,没有找到,再去全局作用域查找:先查找全局名称空间,找到x = 111,故打印111

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

def foo():
x=222
func()

foo()

x = 1


def func():
    print(x)


def foo():
    x = 222
    func()


foo()  # 1

在这里插入图片描述

程序代码执行过程:
调用全局函数foo,运行到全局函数func,调用全局函数func,查找局部名称空间,没有找到x,就去全局空间找,找到全局变量x=1,输出1

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

f2()

f1()

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

    input = 222

    f2()


f1() # 222

在这里插入图片描述
程序代码执行过程:
调用全局函数f1,在函数f1中调用局部函数f2,调用print(input)功能,局部函数f2
内无input,到局部函数的外部去寻找,找到函数f1内部的局部变量input=222,输出222

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

func()

x = 111


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


func()  # 报错

在这里插入图片描述
程序代码执行过程:
调用全局函数func,调用print(x)功能,在局部找不到x,往下运行x = 222,报错,犯逻辑错误,x = 222应在print上方。
全局和内置都找到,所以报错

#=题目六=
x=111

def foo():
print(x,)

def bar():
print(x)

foo()
bar()

x = 111


def foo():
    print(x, )


def bar():
    print(x)


foo() # 111
bar() # 111

在这里插入图片描述
程序代码执行过程:
调用全局函数foo,调用print(x)功能,函数foo中尚未定义x,去全局找,找到x=111,
输出111,调用全局函数bar,函数bar中尚未定义x,去全局找,找到x=111,输出111

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

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

x=3

func2()

x = 1


def func2():
    func1()


x = 2


def func1():
    print(x)


x = 3

func2() # 3

在这里插入图片描述
程序代码执行过程:
调用函数func2,运行到func1,调用func1,运行到print(x),函数func1中局部找不到x,就去全局找,程序是自上往下运行,所以x=1,x=2被覆盖掉了,只剩x=3,最终在全局找到x=3,输出3

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

login_user = None
def login():
    while True:
        name = input('请输入您的账号:').strip()
        pwd = input('请输入您的密码:').strip()
        if name == 'alingna' and pwd == '111':
            print('登入成功')
            global login_user
            login_user = name
            break
        else:
            print('账号或密码错误')
login()
print('欢迎%s用户登入!'% login_user)

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

'''user.txt=
alingna:111:111111
egon:222:222222
tank:333:333333
login_user = None
'''

def login():
	global login_user
	dic = {}
	while True:
		user = input('请输入用户名: ').strip()
		pwd = input('请输入密码: ').strip()
		with open('user.txt', 'r', encoding='utf-8') as f:
			for line in f:
				name, password, money = line.strip().split(':')
				dic[name] = [password, money]
			if user in dic and pwd == dic[user][0]:
				print('登录成功')
				login_user = user
				return True
			else:
				print('用户名或密码错误')
				return False


def get_user_info(login_user):
	dic = {}
	with open('user.txt', 'r', encoding='utf-8')as f:
		for line in f:
			name, password, money = line.strip().split(':')
			dic[name] = [password, money]
		print(f'用户{login_user}的余额为{dic[login_user][1]}元')


def check_money():
	global login_user
	if login_user == None:
		flag = login()
		if flag == True:
			get_user_info(login_user)
		else:
			login()
	else:
		get_user_info(login_user)


check_money()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值