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

def outer(x):
	def func():
		print(x)
	return func
outer(4)()

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


# ===================题目一===================
input=333
def func():
    input=444
    print(input)

func()
print(input)

input=333为全局变量,函数调用时,打印input为局部变量,同级查找存在input =444,故调用函数打印值444,最后打印input为全局变量,全局变量往上找,打印333

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

func()

定义函数,print的打印的x是局部变量,同级未找到,调用函数前,定义全局变量x=111,故打印111

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


def foo():
    x=222
    func()

foo()

并列定义2个函数,func和foo,调用foo,转而调用foo(),print的x为局部变量,局部无x变量,向上寻找,全局变量x=1,故打印1

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

    f2()

f1()

嵌套定义的函数f1,f2,全局变量input=111,调用f1,结果为调用f2,打印input时,同级有333,若无333,则外函数有222,若无222,全局有111,若无111,内置有input功能
# ===================题目五===================
x=111
def func():
    print(x) #
    x=222

func()

x=111为全局变量,定义函数func,调用函数,打印x,同级寻找在print下一行有给x赋值,但是要求先赋值再调用,报错
# ===================题目六===================
x=111

def foo():
    print(x,)

def bar():
    print(x)

foo()
bar()

全局变量x,两个并列的函数,调用函数时,局部变量都无x,都调用的全局变量,打印的都是111
# ===================题目七===================
x=1
def func2():
    func1()

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

x=3

func2()
x 为全局变量,func1和func2并列,调用函数func2,转而取值func1(),打印3
# ===================题目八===================
1、如下全局变量记录了当前登录用户,编写登录功能,一旦用户登录成功,则将全局变量赋值为当前登录的用户名
login_user=None
while not login_user:
	name = input('请输入用户名:').strip()
	password = input('请输入密码:').strip()
	def login(user,psw):
		if user =='aa' and psw =='123':
			global login_user
			login_user = user
			print('登录成功')
		else:
			print('登录失败')
	login(name,password)
2、针对之前编写的查询余额的功能,添加额外的逻辑:如果用户没有登录,则先执行登录功能
login_user=None
while not login_user:
	name = input('请输入用户名:').strip()
	password = input('请输入密码:').strip()
	def login(user,psw):
		if user =='aa' and psw =='123':
			global login_user
			login_user = user
			print('登录成功')
		else:
			print('登录失败')
	login(name,password)
def check(user):
	with open('db.txt','r+',encoding='utf-8') as f:
		for i in f:
			if user in i:
				user_info = i.strip().split(':')
				money = user_info[2]
				print('{}账户余额为{}'.format(user,money))

check(login_user)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值