关于while循环的用法

上Python课的时候留了一个课后练习:请实现一个用户登录系统(用户名不做要求,密码:(系统无法显示这三个字母)),如果密码错误则反复提示让用户重新输入,直到输入正确才停止。
我写的代码(如图1),存在的问题如下:
❶第四行加了print 导致错误的密码会被打印出来
❷密码正确以后依旧显示重新输入密码

img


然后我改了一下代码,把第四行的print去掉了(如图2)存在的问题只剩下第二点

img


希望知道问题出在哪里的同学可以给我解答一下,谢谢。

图二,第四行需要重新给key赋值才行,否则key的值一直都是你首次输入的uuyyy,在循环里出不来了
key=input('密码错误,请重新输入')

循环里改成key = input(....)

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
您的第一个代码存在的问题是在密码错误时会将错误密码打印出来,可能会带来安全隐患。另外,即使密码正确,也会继续提示重新输入密码,因为没有在密码正确时跳出循环。

您的第二个代码已经解决了第一个问题,但是仍然存在第二个问题,即密码正确时会继续提示重新输入密码。这是因为您在 while 循环外定义了一个变量 flag,而在循环内修改了 flag 的值,但是没有跳出循环。因此,即使密码正确,flag 的值也会被修改为 False,导致循环继续执行。

要解决这个问题,您可以将 flag 的定义和修改放在循环内部,并在密码正确时使用 break 语句跳出循环。例如:

password = ''
while True:
    password = input('请输入密码:')
    if password == '***':
        print('密码正确')
        break
    else:
        print('密码错误,请重新输入')
print('登录成功')

在这个代码中,我们将 flag 改为了一个无限循环 while True,并在循环内部定义了 flag 变量。当密码正确时,使用 break 语句跳出循环,否则继续循环。在循环结束后,输出登录成功的提示信息。

另外,为了防止密码被打印出来,您可以使用 getpass 模块来隐藏输入的密码,例如:

import getpass

password = ''
while True:
    password = getpass.getpass('请输入密码:')
    if password == '***':
        print('密码正确')
        break
    else:
        print('密码错误,请重新输入')
print('登录成功')

这样,用户输入的密码就不会被显示在屏幕上了。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢


id=input('请输入你的用户名:')
key=input('请输入你的密码:')
while key!='uuu':
    key = input('密码错误,请重新输入:')        #这个位置你没有给输入的数据赋值,所以导致一直输入,没有退出循环
print('登录成功')