尝试在循环中创建 "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.

我将不胜感激任何和所有解决方案,或人们可以提供的建议。

这是您可以采用的一种方法。一些注意事项:

  1. 不是从计数器中减去,而是遍历一个可迭代对象来计数。 for 循环通常比 while 循环更容易思考。每当你想做某事一定次数时,使用 for 循环。如果需要,您随时可以 break 从中抽取。

  2. 将代码分解为函数的最佳方法是尝试将程序的所有 "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