试图在循环内创建“动态”功能

时间:2018-10-17 06:10:29

标签: function loops python-3.7

我是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.

我非常感谢所有解决方案,或者人们可以提供的建议。

1 个答案:

答案 0 :(得分:0)

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

  1. 而不是从计数器中减去,而是遍历可迭代的计数。与for循环相比,while循环通常更容易考虑。每当您想执行某些操作时,请使用for循环。如果需要,您随时可以break退出其中。

  2. 将代码分解为函数的最佳方法是尝试使程序的所有“动作”都变为各自的函数。


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