2013-08-29 4 views
0

Итак, у меня есть словарь, который состоит из числа и его определение является соответствующим элементом в периодической таблице.Как вызвать элемент из словаря в python?

Я создал словарь, как это:

for line in open("periodic_table.txt"): 
    temp.append(line.rstrip()) 

for t in temp: 
    if t[1] != " ": 
     elements[x] = t[3:] 
    else: 
     elements[x] = t[2:] 
    x += 1 

Я знаю, что каждый элемент в таблице, потому что я задаю программу для печати словаря. Смысл этого в том, что пользователь вводит номер или имя элемента и номер и имя и распечатаны следующим образом:

while count == 0: 
    check = 0 
    line = input("Enter element number or element name: ") 
    if line == "": 
     count = count + 1 
     break 
    for key,value in elements.items(): 
     if line == value: 
      print ("Element number for",line,"is",key) 
      check = 1 
      break 
     if line.isdigit(): 
      if int(line) <= 118 and int(line) > 0: 
       print ("Element number",line, "is",elements[int(line)]) 
       check = 1 
       break 
    if check == 0: 
     print ("That's not an element!") 

Это работает для каждого элемента, кроме последнего, унуноктий, в словаре. Когда пользователь вводит 118, этот элемент печатается, но если они вводят «ununoctium», тогда программа говорит «Это не элемент!». Почему это и как я могу это исправить?

Заранее спасибо

+2

Что произойдет, если они входят в унуноктии вместо этого? – doctorlove

+0

есть проблема с капитализацией? Попробуйте 'line.lower()', чтобы пользовательский ввод был в нижнем регистре. (и 'value.lower()' для другой стороны теста) – Bonlenfum

+0

вы можете использовать pprint.pprint (the_dictionary), чтобы вручную проверить, что у вас есть в вашем dict –

ответ

2

Это намного проще, чтобы иметь питона сделать поиск для вас. Не обращая внимания на пустые строки на данный момент:

elements = [] 
for line in open("periodic_table.txt"): 
    elements.append(line[3:]) 

Вы можете сделать поиск, как это:

if answer.isdigit(): 
    print elements[int(answer)] 
else: 
    print elements.index(answer) 
2

Я подозреваю, что это тот случай, чувствительный вопрос.
Изменение

if line == value: 

в

if line.lower() == value.lower(): 

бы решить эту проблему.
В то время как вы там, почему у if внутри цикла for? Вы можете проверить, что первые, а затем не нужно break

if line.isdigit(): 
    if int(line) <= 118 and int(line) > 0: 
     print ("Element number",line, "is",elements[int(line)]) 
     check = 1 
     #<-------- break no longer required 
else: 
    #for loop as above 
+0

Я внесла некоторые изменения, и я уверен, что это не вопрос, чувствительный к регистру. –

+0

«Некоторые изменения» == эти изменения? – doctorlove

+0

Да, изменения, которые вы предложили выше, но это не проблема, и с тех пор я решил это! Проблема заключалась в том, что когда программа создавала словарь, она добавляла пробел перед элементами, имеющими 3-значное число, и поскольку пользователь не вводит пробел при вводе имени элемента, программа будет рассматривать это как неверно, поэтому объявляя это «не элементом». –

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