Пользовательский ввод не совпадает с данными в файле - PullRequest
2 голосов
/ 08 ноября 2019

Я в настоящее время новый студент, плохо знакомый с python. У меня возникли некоторые проблемы с моим кодом. Вы можете увидеть исходный код ниже здесь, эта программа запускается с приглашением ввести свой идентификатор пользователя. Затем программа сопоставит идентификатор пользователя с тем, что введенные пользователем данные с идентификатором пользователя существуют в StudentIDs.txt, но кажется, что он работает не очень хорошо.

def login_menu():  
    while True:
        user_input_id = (input('Please enter your student ID: '))
        with open('StudentIDs.txt', 'r+') as student_ids:
            if user_input_id in student_ids.read():
                print('You have access to the system')
            else:
                print('Invalid ID, the ID is not in the database, please try again')

Вот данные в StudentIDs.txt

1904983
1904984
1904985

Когда я введу 1904983, я получу доступ к системе, но когда я введу 190 или 1 или 9, я тожеиметь доступ к системе, это сделало программу вовсе не логикой. Может кто-нибудь объяснить мне, что не так с моей программой, или, может быть, помочь мне?

Ответы [ 3 ]

0 голосов
/ 08 ноября 2019
if user_input_id in student_ids.read():

Здесь, когда вы используете "user_input_id in", он проверяет, соответствует ли содержимое в user_input_id какой-либо части в student_ids. Это не сравнение со всей строкой, в вашем случае весь идентификатор пользователя. Таким образом, это будет работать, если вы сначала прочитаете файл и поместите все идентификаторы в список, пройдитесь по списку и сравните, используя «==», или пройдитесь по каждой строке в файле и сравните, используя «==».

user_input_id = (input('Please enter your student ID: '))
with open('StudentIDs.txt') as fp:
    while True:
        line = fp.readline()
        if line:
            if user_input_id == line.strip():
                print('You have access to the system')
            else:
                print('Invalid ID, the ID is not in the database, please try again')
        else:
            break
0 голосов
/ 08 ноября 2019

Вот, пожалуйста:

def login_menu():  
    user_input_id = (input('Please enter your student ID: '))
    with open('file.txt') as student_ids:
        ids = [line.strip("\n") for line in student_ids]
        if str(user_input_id) in ids:
            print('You have access to the system')
        else:
            print('Invalid ID, the ID is not in the database, please try again')

login_menu()

Трюк [line.strip("\n") for line in student_ids], где он разбивает все строки на "\ n" (новая строка) и объединяет их в массив с именем ids.

Тогда:

if str(user_input_id) in ids:

он просто проверяет, получили ли вы входные данные в массив.

Примечание: не забудьте преобразовать в строку!

0 голосов
/ 08 ноября 2019

Попробуйте использовать == вместо in, т. Е. Ваш код должен выглядеть следующим образом:

if user_input_id == student_ids.read():

Разница между двумя операторами заключается в том, что при использовании оператора in он проверяетесли user_input присутствует в student_id или нет (даже если одно из присутствующих значений выведет True). С другой стороны, == ищет точное соответствие между значениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...