Причина, по которой ваш текущий подход не работает, заключается в том, что вы повторяете список. Если вы делаете userline != element
, в первый раз, когда вы сталкиваетесь с элементом или номером, который не равен пользовательскому вводу, программа распечатает сообщение об ошибке. Поскольку вы перебираете каждый элемент периодической таблицы, вы получите кучу сообщений об ошибках!
Вместо этого попробуйте сначала добавить каждый элемент и число периодических таблиц в словарь или список. Таким образом, вы можете проверить, находится ли то, что пользователь вводит, внутри словаря, и вернуть сообщение об ошибке, не пропуская все это.
Вот краткий пример того, что вы могли бы хотеть попробовать вместо:
# The "with" statement automatically closes the file for you!
with open('periodic_table.txt') as f:
numbers = {}
elements = {}
for line in f:
num, element = line.split()
numbers[num] = element
elements[element] = num
while True:
userline = input('Enter element number or element name: ')
userline = userline.capitalize()
if userline in numbers:
print('Element number ' + userline + ' is ' + numbers[userline])
elif userline in elements:
print('Element number for ' + userline + ' is ' + elements[userline])
else:
print("That's not real!")
(Оговорка: я не попробовать запустить это, так что вы, возможно, придется настроить его немного, чтобы убедиться, что он работает правильно)
попробуйте использовать отладчик - вставить 'import pdb; pdb.set_trace() 'после входных данных и пройдите через код, чтобы увидеть, что происходит –