Логика c здесь немного ошибочна, я немного исправил ее - вы были на правильных линиях!
Во-первых, вы запрашиваете ввод данных за пределами вашего while
l oop. Это означает, что каждый раз, когда вы вернетесь назад, у пользователя не будет другого шанса ввести новые данные.
Во-вторых, с вашим оператором elif
это выполняется каждый раз, когда пользователь / пароль не соответствует строке в вашем списке login
. Мы исправим это, запустив этот код только после того, как пройдем весь файл и не найдем совпадения.
В-третьих, вместо того, чтобы возвращаться к началу, пока l oop, если есть нет совпадения, вы вызываете функцию снова, используя logging()
. Это запускает новую итерацию функции, и, поскольку она никогда ничего не вернет, вы застрянете в бесконечной рекурсии. Вместо этого мы oop возвращаемся к началу функции while.
После того, как мы достигли попытки 3, я добавил сообщение и возвращаемое значение. logging()
теперь возвращает True
, если пользователь вводит правильную комбинацию пользователь / пароль в течение 3 попыток, и False
в противном случае.
Пример кода приведен ниже.
def logging():
# Set attempt number to 0
atmptcount = 0
# Keep asking until max number of attempts is reached
while atmptcount <= 3:
# Prompt user for input
usr = input('Please enter your username: ')
pas = input('Please enter your password: ')
# Check through login file
for line in login:
log = line.split(',')
# If details are correct, tell the user and return True
if usr == log[0] and pas == log[1]:
print('correct')
return True
# If we reached the end of the login file and nothing matched, increase
# attempts by 1 and inform the user.
atmptcount = atmptcount + 1
print('Sorry you have entered your details incorrectly, please try again')
# If the user has reached the max attempts, inform them and return False
print('Reached max number of attempts')
return False
logging()