Попытка создать «динамическую» функцию внутри цикла - PullRequest
0 голосов
/ 17 октября 2018

Я новичок в 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 Ответ

0 голосов
/ 17 октября 2018

Вот один из подходов, который вы можете использовать.Несколько замечаний:

  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...