Счетчик входа в Python

#python

#python

Вопрос:

Я новичок в Python и пытаюсь создать простой логин с поддельной системой OTP и ограничителем входа. OTP работает, но счетчик для ограничителя входа в систему — нет. Это дает мне желаемый результат только после одной неудачной попытки (я хочу 3). Результат после неудачной попытки является:

ДОСТУП ЗАБЛОКИРОВАН. ВЫ НЕ ЗАСЛУЖИВАЕТЕ ТОГО, ЧТОБЫ ВИДЕТЬ, ЧТО ЗДЕСЬ. ДО СВИДАНИЯ.

Неверное имя пользователя или пароль. Попробуйте еще раз.

Неверное имя пользователя или пароль. Попробуйте еще раз.

Неверное имя пользователя или пароль. Попробуйте еще раз.

Процесс завершен с кодом выхода 1

Вот код:

 def old_acc():
count = 0  # count created to limit number of failed logins
login = input("Username:    ")  # prompts user to login in with their username
pw = input("Password:   ")  # prompts user to login in with their password
while count <= 3:
    for line in open("db.txt", "r").readlines():
        acc_info = line.split()

        # if username and pw do not match, prompt user to try again
        if login != acc_info[0] and pw != acc_info[1]:
            print("nIncorrect Username or Password. Please try again.n")
            count  = 1
        # if username and pw match, login is successful; generate otp
        else:
            gen_otp()
            print("ACCESS GRANTED")
            access_info()

        # if failure count is = 3, deny access and lock out.
        if count == 3:
            # stops code and doesn't allow any further input.
            sys.exit("ACCESS LOCKED. YOU DON'T DESERVE TO SEE WHAT'S HERE. GOODBYE.")
  

Вот код для генерации OTP, для справки.

 def gen_otp():
    digits = "0123456789"  # digits for OTP generation
    otp = ""

    for i in range(4):
        otp  = digits[math.floor(random.random() * 10)]
    mbox("Enter OTP", otp, 1)  # gives user message with OTP
    otp_input = input("Enter OTP:   ")

    if otp == otp_input:
        print("ACCESS GRANTED")
        access_info()

    return otp
  

Спасибо.

Комментарии:

1. исправлен отступ в gen_otp

Ответ №1:

Ваш цикл for проверяет каждую строку в db.txt файле и увеличивает счетчик, если он не соответствует паролю. Учитывая, что db.txt вероятно, содержит более 1 пароля, счетчик уже достигнет 4 при первой попытке. Вы хотите увеличить счетчик, только если НЕТ строки db.txt соответствует паролю.

 def old_acc():
   count = 0  # count created to limit number of failed logins
   success = False # keeps track of succesful login
   while count <= 3 and not success:
      login = input("Username:    ")  # prompts user to login in with their username
      pw = input("Password:   ")  # prompts user to login in with their password

       for line in open("db.txt", "r").readlines():
          acc_info = line.split()

           # if username and pw match, login is successful; generate otp
           if login == acc_info[0] and pw == acc_info[1]:
               gen_otp()
               print("ACCESS GRANTED")
               access_info()
               success = True
               break

        # if username and pw do not match, prompt user to try again
    if not success:
        print("nIncorrect Username or Password. Please try again.n")
        count  = 1

    # if failure count is = 3, deny access and lock out.
    if count == 3:
        # stops code and doesn't allow any further input
        sys.exit("ACCESS LOCKED. YOU DON'T DESERVE TO SEE WHAT'S HERE. GOODBYE.")