day13作业

一:复习巩固题
1、以下格式自行推导至少10遍

def index(x,y):
print(x,y)

def wrapper(*args,kwargs): # args=(1,2) kwargs={“a”:1,“b”:2}
index(args,**kwargs) # index(1,2,a=1,b=2)
# index(
(1,2),
{“a”:1,“b”:2}) # index(1,2,a=1,b=2)

wrapper(1,2,a=1,b=2)

2、练习把参数包给函数10遍

步骤一:准备好一个函数,该函数体代码需要一个参数
def func():
    print(x)

步骤二:包值
x = 2
def func():
    print(x)

步骤三:闭到outter函数内
def outter():
    x = 2
    def func():
        print(x)
步骤四:基于return将内部func返回到全局
def outter():
    x = 2
    def func():
        print(x)
    return func  # 一定不要加括号

f=outer()

步骤五:最终格式,把outter写活
def outter(x):
    # x = 2 # 注释掉
    def func():
        print(x)
    return func

f1=outer(1)  # 把x=1包给函数func
f2=outer(2)  # 把x=2包给函数func
f3=outer(3)  # 把x=3包给函数func

二:作业要求:下述所有代码画出名称空间嵌套图以及分析代码执行流程

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

题目一

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

func()
print(input)

在这里插入图片描述

过程
调用全局函数func(),输出函数func内的局部变量input,func调用结束后销毁
输出全局变量input的值333

题目二

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

func() 

在这里插入图片描述

过程
调用全局函数func,调用print(x),函数func内无变量x,就去全局空间找,找到x=111,
输出111

题目三

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


def foo():
    x=222
    func()

foo()

在这里插入图片描述

过程
调用全局函数foo,运行到全局函数func,调用全局函数func,调用print(x)功能,
函数func中无x,就去全局空间找,找到全局变量x=1,输出1

题目四

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

    f2()

f1()

在这里插入图片描述

过程
调用全局函数f1,在函数f1中调用局部函数f2,调用print(input)功能,局部函数f2
内无input,到局部函数的外部去寻找,找到函数f1内部的局部变量input=222,输出222

题目五

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

func()

在这里插入图片描述

过程
调用全局函数func,调用print(x)功能,此时x还未定义,找不到x,就去上一层找,
全局和内置都找到,所以报错

题目六

x=111

def foo():
    print(x,)

def bar():
    print(x)

foo()
bar()

在这里插入图片描述

过程
调用全局函数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()

在这里插入图片描述

过程
调用函数func2,运行到func1,调用func1,运行到print(x),函数f1中找不到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 == 'juanfu'and pwd == '666':
			print('登录成功')
			global login_user
			login_user = name
			break
		else:
			print('账号或密码错误')
login()
print('欢迎%s用户登录!'% login_user)

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

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


def check_money(user):
	name = input('请输入账号: ').strip()
	if name != user:
		print('请先登录哦')
		login()
	else:
		with open('user.txt', 'rt', encoding='utf-8')as f:
			for line in f:
				if user in line:
					user, pwd, money = line.strip().split(':')
					print('用户%s您的余额为%s' % (login_user,money))
check_money(login_user)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值