mumei2018 发表于 2023-6-24 20:19:25

大佬们 为啥我这代码到了第六行就会进入死循环呢

while 语句是为了可以在推出前重复输入指令 我觉得问题就发生在这 我设想是指令不等于3就应该进入if语句才对呀 但每次到这就死循环了 感觉删了这句就可以跑起来的 但是如果没有这句 怎样实现重复输入呢?



user_list = []#建立用户列表
user_pw = {}#用于匹配用户名和密码
print('weilcom to FishC)\n====================\n1.sign up\n2.sign in\n3.exit')
order = input('Enter your order:')
print('====================')
while order !=3:
    if order == 1:#指令为1进入用户注册
      user_name = input('Enter your username:')
      count = 0 #限制犯错次数
      while user_name in user_list:
            if count > 2:
                print('死ね!')#限制犯错次数
                break
            else:
                print('Username occupied, try anther.')#没超次数可以再次尝试
                count += 1
            u_passw = input('Enter your password:')
            print('Congratulations.')
      def sign_up(user_name, u_passw):#建立用户名和匹配密码的函数 但是前面老是死循环还没走到过这一步
            user_list.append(user_name)
            user_pw.fromkeys(user_name,password)
            return user_pw
            print(user_list,user_pw)
      sign_up()

谢谢各位拉
另外我发现一个有趣的事情就是 可以用过电脑风扇判断是否进入了死循环 哈哈

isdkz 发表于 2023-6-24 20:21:31

首先,你的代码在 while order !=3: 这个循环的开始就出现了问题。在Python中,输入函数 input() 默认接收的是字符串类型的数据,你在进行比较时是将字符串与整数比较,这在Python中是不会相等的,所以无法跳出这个循环。你应该将 order = input('Enter your order:') 更改为 order = int(input('Enter your order:')) ,这样输入的指令就是整数类型了。

然后在你的 if order == 1: 代码块中, u_passw = input('Enter your password:') 这行代码的位置应该要在while循环的外部,也就是在用户输入用户名后。另外,你还应该在成功输入用户名后调用 sign_up 函数,并传入 user_name 和 u_passw 作为参数。

还有一个问题是在 sign_up 函数中, user_pw.fromkeys(user_name,password) 这一行。 fromkeys 方法的调用方式是错的,它的作用是创建一个新的字典,你这里应该用 user_pw = u_passw 这样的方式将密码添加到字典中。

你应该修复代码如下:

user_list = [] # 建立用户列表
user_pw = {} # 用于匹配用户名和密码
print('weilcom to FishC)\n====================\n1.sign up\n2.sign in\n3.exit')
order = int(input('Enter your order:')) # 修改这里,将输入的字符串转为整数
print('====================')
while order != 3: # 修改这里,将输入的字符串转为整数
    if order == 1: # 指令为1进入用户注册
      user_name = input('Enter your username:')
      count = 0 # 限制犯错次数
      while user_name in user_list:
            if count > 2:
                print('死ね!') # 限制犯错次数
                break
            else:
                print('Username occupied, try anther.') # 没超次数可以再次尝试
                count += 1
                user_name = input('Enter your username:') # 修改这里,将输入用户名的代码放在这里
      u_passw = input('Enter your password:') # 修改这里,将输入密码的代码放在这里
      print('Congratulations.')
      def sign_up(user_name, u_passw): # 建立用户名和匹配密码的函数
            user_list.append(user_name)
            user_pw = u_passw # 修改这里,用正确的方式添加密码到字典中
            print(user_list,user_pw)
      sign_up(user_name, u_passw) # 修改这里,调用函数并传入参数


最后,你可以考虑在 while order != 3: 这个循环的最后加上 order = int(input('Enter your order:')) 这行代码,这样就可以实现重复输入指令了。

歌者文明清理员 发表于 2023-6-24 20:22:05

order一直不是3

mumei2018 发表于 2023-6-24 20:24:49

去掉while语句 就直接在那断了{:10_282:}

sfqxx 发表于 2023-6-24 20:26:12

user_list = [] # 建立用户列表
user_pw = {} # 用于匹配用户名和密码

print('welcom to FishC')
print('====================')
print('1.sign up')
print('2.sign in')
print('3.exit')

while True:   # 进入循环
    order = input('Enter your order:')
   
    if order == '1':   # 如果用户选择注册
      user_name = input('Enter your username:')
      count = 0   # 限制犯错次数

      while user_name in user_list:
            if count > 2:
                print('死ね!')
                break
            else:
                print('Username occupied, try another.')
                count += 1
                user_name = input('Enter another username:')

      u_passw = input('Enter your password:')
      user_list.append(user_name)
      user_pw = u_passw# 使用 [] 来添加字典项,而非 fromkeys() 方法
      print('Congratulations.')

    elif order == '2':   # 如果用户选择登录
      user_name = input('Enter your username:')
      u_passw = input('Enter your password:')

      if user_pw.get(user_name) == u_passw:
            print('Login success.')
      else:
            print('Wrong password or username!')

    elif order == '3':
      break         # 终止循环

    else:   # 若输入的既不是 1,也不是 2 或者 3,则提示错误
      print('Invalid command, please try again.')

mumei2018 发表于 2023-6-24 20:28:29

isdkz 发表于 2023-6-24 20:21
首先,你的代码在 while order !=3: 这个循环的开始就出现了问题。在Python中,输入函数 input() 默认接收 ...

原来是忘了int的问题谢谢啦   基本功不好 怎么找都找不到答案

mumei2018 发表于 2023-6-26 04:04:59

sfqxx 发表于 2023-6-24 20:26


nice 好像基本没啥问题了 我也做出了来 但是好多bug
页: [1]
查看完整版本: 大佬们 为啥我这代码到了第六行就会进入死循环呢