2013-08-29 2 views
0

моя программа отлично работает, проверив файл с периодическим номером таблицы и элементов с помощью этой программы:Python файлов необходима помощь

userline=input('Enter element number or element name: ') 
userline=userline.capitalize() 
f=open('periodic_table.txt') 
while userline: 
for line in f: 
    number,element=line.split() 

, но если добавить к программе, как это:

else: 
    print('Thats not an element!') 
    userline=input('Enter element number or element name: ') 
    userline=userline.capitalize() 

это держать печать, которая не является элементом, даже если мы поместим правильное количество элементов или правильное имя,

+0

попробуйте использовать отладчик - вставить 'import pdb; pdb.set_trace() 'после входных данных и пройдите через код, чтобы увидеть, что происходит –

ответ

0

Причина, по которой ваш текущий подход не работает, заключается в том, что вы повторяете список. Если вы делаете 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!") 

(Оговорка: я не попробовать запустить это, так что вы, возможно, придется настроить его немного, чтобы убедиться, что он работает правильно)

+0

, но затем я хочу закончить цикл, когда пользователь вводит пробел, поэтому, когда я делаю ввод выше, снова повторяю ту же ошибку, ничего не печатаю но снова вводя снова n снова –

+0

@MystIcAce - попробуйте изменить оператор if, чтобы вы проверяли, является ли 'userline ==" "' (если он равен пустой строке). Если это так, используйте ключевое слово 'break' для завершения цикла while. – Michael0x2a

+0

Сортировка, благодарность alott SIR –

Смежные вопросы