#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.")