我是Python的新手,它试图使用具有我所知道的事情的通用代码进行测试,或者让我去寻找答案和解决方案,以了解我为何尝试执行的操作不起作用。不幸的是,我在目前的尝试中走到了尽头。
我迷上了在单个脚本中创建小型授权程序的概念,并且在尝试限制分配给用户的失败登录尝试次数时,我遇到了以下代码问题:< / p>
def attempts(n):
a = n - 1
while a > 0:
result = a
return result
Username = input('Please enter a New Username: ')
Password = input('Please enter a New Password: ')
logu = Username
logp = Password
LoginU = input('Please enter your Username: ')
if LoginU != logu:
while LoginU != logu:
LoginRetry = input('Please try again')
att = attempts(3)
att
print(att)
else:
print('Welcome to the Environment!')
pass
print('Exiting Environment. Have a good day.')
除了好的做法和丑陋的代码,我的主要问题在于每次迭代尝试都使(n)减少循环内。截至目前,当我执行脚本并故意输入错误的用户名时,它会循环
Please try again: 2 Please try again: 2
直到输入正确的用户名。在适当的操作下,我想吐口水
Please try again: 2 Please try again: 1 Please try again: Exiting Environment. Have a good day.
我非常感谢所有解决方案,或者人们可以提供的建议。
答案 0 :(得分:0)
这是您可以采用的一种方法。一些注意事项:
而不是从计数器中减去,而是遍历可迭代的计数。与for
循环相比,while
循环通常更容易考虑。每当您想执行某些操作时,请使用for
循环。如果需要,您随时可以break
退出其中。
将代码分解为函数的最佳方法是尝试使程序的所有“动作”都变为各自的函数。
import sys
def login(username, password):
username_input = input('Please enter your Username: ')
password_input = input('Please enter your Password: ')
return username == username_input and password == password_input
def login_n_tries(n, username, password):
for i in reversed(range(n)):
if login(username, password):
return True
print(f"You have {i} attempts remaining")
return False
username = input('Please enter a New Username: ')
password = input('Please enter a New Password: ')
if not login_n_tries(3, username, password):
print("Login failed")
sys.exit(1) # End program
... # Rest of program