尝试在循环中创建 "dynamic" 函数
Trying to Create a "dynamic" Function inside a Loop
我是 Python 的新手,正在尝试使用具有我所知道的东西的通用代码来测试自己,或者让我去寻找答案和解决方案,以了解为什么我正在尝试做的事情没有成功'不工作。不幸的是,我在目前的尝试中遇到了死胡同。
我对在单个脚本中创建小型授权程序的概念产生了兴趣,在尝试限制分配给用户的失败登录尝试次数时,我 运行 遇到了一个问题使用以下代码:
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.
我将不胜感激任何和所有解决方案,或人们可以提供的建议。
这是您可以采用的一种方法。一些注意事项:
不是从计数器中减去,而是遍历一个可迭代对象来计数。 for
循环通常比 while
循环更容易思考。每当你想做某事一定次数时,使用 for
循环。如果需要,您随时可以 break
从中抽取。
将代码分解为函数的最佳方法是尝试将程序的所有 "actions" 分解为它们自己的函数。
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
我是 Python 的新手,正在尝试使用具有我所知道的东西的通用代码来测试自己,或者让我去寻找答案和解决方案,以了解为什么我正在尝试做的事情没有成功'不工作。不幸的是,我在目前的尝试中遇到了死胡同。
我对在单个脚本中创建小型授权程序的概念产生了兴趣,在尝试限制分配给用户的失败登录尝试次数时,我 运行 遇到了一个问题使用以下代码:
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.
我将不胜感激任何和所有解决方案,或人们可以提供的建议。
这是您可以采用的一种方法。一些注意事项:
不是从计数器中减去,而是遍历一个可迭代对象来计数。
for
循环通常比while
循环更容易思考。每当你想做某事一定次数时,使用for
循环。如果需要,您随时可以break
从中抽取。将代码分解为函数的最佳方法是尝试将程序的所有 "actions" 分解为它们自己的函数。
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