鱼C论坛

 找回密码
 立即注册
查看: 1124|回复: 6

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

[复制链接]
发表于 2023-6-24 20:19:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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()

谢谢各位拉
另外我发现一个有趣的事情就是 可以用过电脑风扇判断是否进入了死循环 哈哈
最佳答案
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[user_name] = 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[user_name] = u_passw # 修改这里,用正确的方式添加密码到字典中
            print(user_list,user_pw)
        sign_up(user_name, u_passw) # 修改这里,调用函数并传入参数

最后,你可以考虑在 while order != 3: 这个循环的最后加上 order = int(input('Enter your order:')) 这行代码,这样就可以实现重复输入指令了。
用户登录死循环.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[user_name] = 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[user_name] = u_passw # 修改这里,用正确的方式添加密码到字典中
            print(user_list,user_pw)
        sign_up(user_name, u_passw) # 修改这里,调用函数并传入参数

最后,你可以考虑在 while order != 3: 这个循环的最后加上 order = int(input('Enter your order:')) 这行代码,这样就可以实现重复输入指令了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-24 20:22:05 | 显示全部楼层
order一直不是3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-24 20:24:49 | 显示全部楼层
去掉while语句 就直接在那断了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[user_name] = 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.')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

原来是忘了int的问题  谢谢啦   基本功不好 怎么找都找不到答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-26 04:04:59 | 显示全部楼层

nice 好像基本没啥问题了 我也做出了来 但是好多bug
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 20:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表