Проверка ввода пользователя с данными в файле .txt

Я искал, искал и пробовал все. Я создаю игру, в которой пользователь вводит предварительно назначенный пин-код, и я хочу проверить этот пин-код на соответствие файлу .txt в Python. Я перепробовал так много разных строк кода, и мой результат: либо все верно, либо ничего не верно. Что я делаю не так? Пины отформатированы в каждой строке и имеют буквенно-цифровое обозначение, подобное этому...

1DJv3Awv5
1DGw2Eql8
3JGl1Hyt7
2FHs4Etz4
3GDn9Buf8
1CEa9Aty0
2AIt9Dxz9
5DFu0Ati4
3AJu9Byi4
1EAm0Cfn1
3BEr0Gwk0
7JAf8Csf8
4HFu0Dlf4

Вот что у меня есть:

user_input = input('Please enter your PIN: ')
if user_input in open("PINs.txt").read():
    print('Congratulations!  Click the button below to get your Bingo Number.')
else:
    print('The PIN you entered does not match our records.  Please check your PIN and try again.')

Что внутри PINs.txt? Это список контактов, разделенных в каждой строке, или через пробел, или ...?

AliBaharni97 06.05.2022 23:37

Чтобы быть уверенным, нужно увидеть примеры контактов и «PINs.txt», но ваше совпадение для простого текста, поэтому будет соответствовать контакту «1» с содержимым файла «1234», например, что, вероятно, не то, что вы хотите. Я предлагаю вам провести некоторое время с учебными пособиями по Python, прежде чем идти слишком далеко. Вы можете использовать простые базы данных или читать/записывать файлы yaml или json для своих данных.

Paul Whipp 06.05.2022 23:39

да... Думаю, это поможет.... лол Вот пример: 1DJv3Awv5 1DGw2Eql8 3JGl1Hyt7 2FHs4Etz4 3GDn9Buf8 1CEa9Aty0 2AIt9Dxz9 5DFu0Ati4 3AJu9Byi4 1EAm0Cfn1 3BEr0Gwk0 7JAf4HFusf8 каждая своя линия.

Nat 07.05.2022 00:13

Вы должны редактировать свой вопрос и поместить эту информацию там, где она может быть правильно отформатирована, а не здесь.

martineau 07.05.2022 00:50

Спасибо. первый раз задаю вопрос на этом сайте.

Nat 07.05.2022 00:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
5
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте использовать .readlines(), таким образом вы должны сопоставить всю строку:

user_input = input('Please enter your PIN: ') + "\n" # Adding \n to conform to readlines
if user_input in open("PINs.txt").readlines():
    print('Congratulations!  Click the button below to get your Bingo Number.')
else:
    print('The PIN you entered does not match our records.  Please check your PIN and try again.')

Небольшой рефакторинг:

with open("PINs.txt") as pinfile:  # Make sure file is closed
  user_input = input('Please enter your PIN: ')
  for pin in pinfile:  # Iterate line by line, avoid loading the whole file into memory.
    if pin.rstrip() == user_input:  # Remove newline using .rstrip()
      print('Congratulations!  Click the button below to get your Bingo Number.')
      break
  else:  # Note the indentation, the 'else' is on the 'for' loop.
    print('The PIN you entered does not match our records.  Please check your PIN and try again.')

На самом деле, вы можете вообще не использовать .readlines(), это использует объекты файла фактов, перебирающие строки, и также лучше для памяти:

user_input = input('Please enter your PIN: ') + "\n" # Adding \n to conform to readlines
if user_input in open("PINs.txt"):
    print('Congratulations!  Click the button below to get your Bingo Number.')
else:
    print('The PIN you entered does not match our records.  Please check your PIN and try again.')

У меня было ``` .readlines():``` там так много раз, но проблема была решена с помощью +'\n' Спасибо, спасибо, спасибо!

Nat 07.05.2022 01:08

Другие вопросы по теме