求助老师们关于 python 第41课函数作业的问题
本帖最后由 caeser 于 2022-6-13 21:16 编辑我在做第41课函数作业是,出现一个问题,运行程序时,如果直接选择3退出,程序运行正常,但选择1注册用户成功后,再选择3退出,却变成了要求注册用户,这是怎么一回事啊?求助各位老师!!!
我的程序代码:
register_dict={'adm':'123'}
print("欢迎来到鱼C论坛")
def get_int(): # 获取用户指令函数
print("""
==============
1.注册
2.登录
3.退出
""")
num = int(input("请输入指令: "))
while num > 0 :
if num == 1:
register()
elif num == 2:
login()
elif num == 3:
break
def login():#登录函数
pass
def register():# 注册函数
name = input("请输入用户名:")
password = input("请输入密码:")
encrypt(name,password)
def encrypt(x,y):# 存放用户名和密码函数
#keys = register_dict.keys()
for each in list(register_dict.keys()):
if each == x:
print("用户名已经存在:请重新注册")
register()
register_dict = y
print("恭喜,注册成功")
get_int()
get_int()
本帖最后由 临时号 于 2022-6-13 21:44 编辑
首先,你输入了1,调用了register()函数
然后在register()函数中,你调用了encrypt函数
在encrypt函数中,你调用了get_int()函数
在get_int()函数中,你输入了3,跳出了循环,get_int()函数结束,你又回到了调用get_int()函数的地方,也就是encrypt函数中
在encrypt函数中,函数结束,你又回到了调用encrypt函数的地方,也就是register()函数
在register()函数中,函数结束,你又回到了第一次调用register()函数的地方,也就是get_int()函数
在get_int()函数中,由于num变量是局部变量,而你第一次调用get_int()函数时,你输入的是1,所以num=1
又因为程序目前在while循环中,num>0,所以程序又进了while循环,因为num=1,所以又调用了register()函数,又开始了注册
解决的方法有两种:
1.声明num变量为全局变量
register_dict={'adm':'123'}
print("欢迎来到鱼C论坛")
def get_int(): # 获取用户指令函数
print("""
==============
1.注册
2.登录
3.退出
""")
global num
num = int(input("请输入指令: "))
while num > 0 :
if num == 1:
register()
elif num == 2:
login()
elif num == 3:
break
def login():#登录函数
pass
def register():# 注册函数
name = input("请输入用户名:")
password = input("请输入密码:")
encrypt(name,password)
def encrypt(x,y):# 存放用户名和密码函数
#keys = register_dict.keys()
for each in list(register_dict.keys()):
if each == x:
print("用户名已经存在:请重新注册")
register()
register_dict = y
print("恭喜,注册成功")
get_int()
get_int()
2.在输入3后不使用break跳出循环,而是使用exit()函数退出程序
register_dict={'adm':'123'}
print("欢迎来到鱼C论坛")
def get_int(): # 获取用户指令函数
print("""
==============
1.注册
2.登录
3.退出
""")
num = int(input("请输入指令: "))
while num > 0 :
if num == 1:
register()
elif num == 2:
login()
elif num == 3:
exit()
def login():#登录函数
pass
def register():# 注册函数
name = input("请输入用户名:")
password = input("请输入密码:")
encrypt(name,password)
def encrypt(x,y):# 存放用户名和密码函数
#keys = register_dict.keys()
for each in list(register_dict.keys()):
if each == x:
print("用户名已经存在:请重新注册")
register()
register_dict = y
print("恭喜,注册成功")
get_int()
get_int() 临时号 发表于 2022-6-13 21:38
首先,你输入了1,调用了register()函数
然后在register()函数中,你调用了encrypt函数
在encrypt函数中,你 ...
请问是如果调用了多个函数,当函数都运行完以后要依次原路返回,可以这么理解吗? 森亦简 发表于 2022-6-13 21:45
请问是如果调用了多个函数,当函数都运行完以后要依次原路返回,可以这么理解吗?
对,要回到调用函数的地方 好的,谢谢大佬{:10_254:} 老师,再请问下,为什么设置为全局变量后,就退出了呢?按照您说的不是应该又回到了调用get_int()函数的地方了吗 caeser 发表于 2022-6-13 21:56
老师,再请问下,为什么设置为全局变量后,就退出了呢?按照您说的不是应该又回到了调用get_int()函数的地 ...
在get_int()函数中,由于num变量是局部变量,而你第一次调用get_int()函数时,你输入的是1,所以num=1
当你将num变量设置为全局变量后,num就不是1了,而是你第二次输入的3,所以num=3,跳出了循环 临时号 发表于 2022-6-13 22:02
当你将num变量设置为全局变量后,num就不是1了,而是你第二次输入的3,所以num=3,跳出了循环
哦,明白了,谢谢老师
页:
[1]