Система аутентификации входа - PullRequest
1 голос
/ 28 января 2020

Я делаю python систему входа в систему для школьного проекта, который я предлагаю, у меня ошибка логики c, которую я не могу найти. Программа должна разрешить три попытки входа в систему и должна отображать «правильно», когда вы вошли в систему, но вместо этого программа запускается, и когда вы вводите правильное имя пользователя и пароль, она печатает «вы ввели неверный пароль» и зацикливает программу, затем, когда вы вводите любое значение, программа останавливается и ничего не появляется. Не могли бы вы помочь мне определить ошибку logi c. Я буду рад объяснить роль любой функции:)

def logging():
    atmptcount = 0
    usr = input('Please enter your username: ')
    pas = input('Please enter your password: ')
    while atmptcount != 3:
        for line in login:
            log = line.split(',')
            if usr == log[0] and pas == log[1]:
                print('correct')
            elif usr != log[0] and pas != log[1]:
                atmptcount = atmptcount + 1
                print('Sorry you have entered your details incorrectly, please try again')
                logging()
logging()

1 Ответ

1 голос
/ 28 января 2020

Логика 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()
...