Python 我再也回不来了
因此,我的任务是使用pickle文件的引用创建一个登录函数,到目前为止,我唯一的问题(我注意到)是我永远无法脱离循环Python 我再也回不来了,python,for-loop,Python,For Loop,因此,我的任务是使用pickle文件的引用创建一个登录函数,到目前为止,我唯一的问题(我注意到)是我永远无法脱离循环 for counter in range(len(Users)): UserN = input("Username: ") if UserN in Users[counter]: PassW = input("Password: ") if PassW
for counter in range(len(Users)):
UserN = input("Username: ")
if UserN in Users[counter]:
PassW = input("Password: ")
if PassW in Users[counter]:
print("User Authenticated")
break
else:
attempt = 1
while attempt != 4:
print("Password Incorrect | Attempt", attempt)
PassW = input("Password: ")
if PassW in Users[1]:
print("User Authenticated")
MainMenu()
else:
attempt = attempt + 1
if attempt == 4:
print("\nToo many attempts, you are locked out")
exit()
else:
print("\nUser not found!\n")
如果用户已通过身份验证,则尝试次数将停止增加,但while循环的条件是stop
trunt==4
,因此它将被卡住,直到用户输入了4次错误的密码
要修复此问题,请在while循环之前添加一个变量authenticated
,并将其初始化为False
,然后在用户成功通过身份验证后将其设置为True
attempt = 1
authenticated = False
while attempt != 4 and !authenticated:
...
if PassW in Users[1]:
...
authenticated = True
或者如果你不想要一个新的变量,就直接打断它
if PassW in Users[1]:
...
break
要中断循环如果找到密码,则调用另一个函数,但从未退出循环。您应该添加中断语句。您可以在下添加中断语句
MainMenu()
break;
代码中的逻辑似乎很不可靠 此代码假定用户名是第一个出现在
Users
中的用户名;如果第二个用户登录,他们需要输入两次自己的名字,第三个用户需要输入三次,依此类推。如果你在“回合”中输入错误,你将无法登录
我建议采用以下结构:
- 将变量“Users”转换为字典,将用户名映射为密码
- 询问用户名
- 如果用户名未出现,则停止或循环(您可能希望提示询问他们是否要重试,或者只让他们按
停止(并捕捉随后出现的ctrl-D
或EOFError
(如果他们按键盘中断
),则会发生这种情况)ctrl-C
- 使用正确的样式约定。变量名称不应以大写字符开头。函数也应以大写字符开头。它应该是
,用户
,密码
主菜单()
- 您确实不应该将密码存储在pickle文件中;这是一种模糊处理,而不是安全性
- 当你说用户被锁定时,实际上什么也没有发生。他们并没有真正被锁定;他们可以再试一次。这意味着你可以创建一个简单的密码猜测
- 让他们输入密码,猜测次数最多
- 一个好的规则是测试
而不是trunt>3
。这在这里并没有什么区别,但在更大的函数中,通常最好将测试稍微“宽一点”trunt==4
用户的结构是什么吗?我假设它是一个列表,但是元素是字符串还是其他数据类型?你能详细说明程序卡在哪个循环中吗?你有两个循环,L1上的for
和L10上的while
,它们都有潜在的条件可以永远运行请提供预期结果。显示中间结果与预期结果的不同之处。我们应该能够复制和粘贴连续的代码块,执行该文件,并再现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和所需的数据测试我们的建议输出。