字典映射以及While true,新用户注册的程序
请教各位一个新用户注册的程序的问题:下面这个函数:
while True:
chosen = False
while not chosen:
choose = input(prompt)
if choose not in "NnEeQq":
print("\n\nwrong command, re-enter: ")
else:
chosen = True
1. 第一行我能看懂,外层的循环while True就是让这个循环永远循环下去。但当电脑读到chosen = False这行时,电脑会做什么?为什么当chosen = True时,就可以跳出内层的while not chosen循环呢?
2. 内层的while循环条件是choice不能等于chosen,而chosen已经等于False了,也就是说内层while not chosen的条件是等于True了(因为chosen已经等于False,not chosen就是not False,也就是True),但为什么当chosen等于True时,就跳出来了呢?while not chosen条件就是True,因为chosen等于False,not chosen就是True,就是说在True的条件下,它会永远循环,那chosen等于True时,while not chosen就会判while not True,所以才跳出来吗?
3. (接上一个问题),如果while True(除非有特殊条件)是表示让一个循环永远循环下去,那while not True可以实现吗?while True 和 while not True有什么区别?
i = 1
while not True:
print("Tesing.")
i += 1
if i == 100:
break
print("Finish")
4. 上面这个程序错在哪里?我试了一下,执行后,屏幕上只打了Finish。只有while True才能形成循环吗?
def showmenu():
prompt = '''
|----新建用户:N/n----|
|----登录账号:E/e----|
|----退出程序: Q/q----|
|----请输入指令代码: '''
while True:
chosen = False
while not chosen:
choose = input(prompt)
if choose not in "NnEeQq":
print("\n\nwrong command, re-enter: ")
else:
chosen = True
if choose == "Q" or choose == "q":
break
if choose == "E" or choose == "e":
old_user()
if choose == "N" or choose == "n":
new_user()
完整程序:
user_data = {}
def old_user():
prompt = "Please enter your user name: "
while True:
old_name = input(prompt)
if old_name not in user_data:
print("user name doesn't exist, please re-enter: ")
continue
else:
break
password_old = user_data.get(old_name)
enter_old_password = input("Please enter password:")
while True:
if enter_old_password == password_old:
break
else:
while enter_old_password != password_old:
enter_old_password = input("Password wrong, re-enter password: ")
if enter_old_password == password_old:
break
print("Welcome to FishC, please click X to quit!")
def new_user():
prompt = 'Plase setup a user name: '
while True:
new_name = input(prompt)
if new_name in user_data:
prompt = "The user already exisits, please enter a new one: "
continue
else:
break
new_password = input("Please set a password: ")
user_data = new_password
def showmenu():
prompt = '''
|----新建用户:N/n----|
|----登录账号:E/e----|
|----退出程序: Q/q----|
|----请输入指令代码: '''
while True:
chosen = False
while not chosen:
choose = input(prompt)
if choose not in "NnEeQq":
print("\n\nwrong command, re-enter: ")
else:
chosen = True
if choose == "Q" or choose == "q":
break
if choose == "E" or choose == "e":
old_user()
if choose == "N" or choose == "n":
new_user()
showmenu()
1. 第一行我能看懂,外层的循环while True就是让这个循环永远循环下去。但当电脑读到chosen = False这行时,电脑会做什么?为什么当chosen = True时,就可以跳出内层的while not chosen循环呢?
当读到 chosen=False 时,会将 False 赋值给 chosen,至于为什么会跳出内层循环,是因为
while 在进行每次循环之前都会检查条件,当 chosen 赋值为 True 就不满足 not chosen 这个条件了(结果是 False),所以会跳出循环
2. 内层的while循环条件是choice不能等于chosen,而chosen已经等于False了,也就是说内层while not chosen的条件是等于True了(因为chosen已经等于False,not chosen就是not False,也就是True),但为什么当chosen等于True时,就跳出来了呢?while not chosen条件就是True,因为chosen等于False,not chosen就是True,就是说在True的条件下,它会永远循环,那chosen等于True时,while not chosen就会判while not True,所以才跳出来吗?
是的,没有问题(要看最后的结果T或F)
3. (接上一个问题),如果while True(除非有特殊条件)是表示让一个循环永远循环下去,那while not True可以实现吗?while True 和 while not True有什么区别?
不可以,因为 not True 永远不等于 True, 也就无法进入循环,你可以像上面的代码一样,定义一个变量,传递一个状态
i = 1
while not True:
print("Tesing.")
i += 1
if i == 100:
break
print("Finish")
4. 上面这个程序错在哪里?我试了一下,执行后,屏幕上只打了Finish。只有while True才能形成循环吗?
是的 {:10_257:} 多谢,学长辛苦了!! mhou022 发表于 2020-6-27 07:53
多谢,学长辛苦了!!
不客气~
以后回复别人请使用【回复】功能
页:
[1]