mhou022 发表于 2020-6-27 06:37:43

字典映射以及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()

_2_ 发表于 2020-6-27 07:35:06

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才能形成循环吗?
是的

小甲鱼的铁粉 发表于 2020-6-27 07:38:03

{:10_257:}

mhou022 发表于 2020-6-27 07:53:22

多谢,学长辛苦了!!

_2_ 发表于 2020-6-27 07:57:17

mhou022 发表于 2020-6-27 07:53
多谢,学长辛苦了!!

不客气~
以后回复别人请使用【回复】功能
页: [1]
查看完整版本: 字典映射以及While true,新用户注册的程序