2015-06-09 7 views
1

Итак, я работаю над этой простой программой Python, чтобы ознакомиться со словарями. В принципе, он работает как база данных, в которую вы можете искать. Если ваша запись находится в ключе словаря, она выводит информацию о записи.Python: проблемы при итерации по словарю

Family = {'Jim' : ['cool guy', 'has facial hair'], 
      'Ned' : ['hot stuff', ' wears Tees']} 

query = input("Look up database on whom? > ") 
for (name, info) in Family.items(): 
    if name in query or name.lower() in query: 
     print("{} is {}".format(name, info)) 

Это^работает. Однако, когда я попытался добавить предложение ELSE, чтобы иметь дело с несуществующими записями, я получаю это.

else: 
    print ('Value not found!') 

Он печатает значение не найдено! много раз, прежде чем поднимать значение. Если я попытаюсь добавить функцию «вернуться к началу», она даже не приведет к регистрации зарегистрированного значения. Я знаю, что это потому, что это цикл и итерации по тиксу один за другим; так что 1) jim истинно, тогда 2) ned ложно.

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

+2

- ваш другой отступ, чтобы быть на уровне с 'for' или' if'? Похож на 'for'. –

+0

Нет, это с отступом с 'if' – AstralWolf

ответ

0

Это один из способов сделать это:

Family = {'Jim' : ['cool guy', 'has facial hair'], 
      'Ned' : ['hot stuff', ' wears Tees']} 

query = input("Look up database on whom? > ") 
if query in Family.keys(): 
    for (name, info) in Family.items(): 
     if name in query or name.lower() in query: 
      print("{} is {}".format(name, info)) 
else: 
    print "Print Something - Not in Family" 
+0

Спасибо, я нашел этот ответ самым легким для понимания. Я просто изменил 'if query в Family.keys():' to 'if query.capitalize() в Family.keys():', чтобы разрешить записи в нижнем регистре – AstralWolf

+0

Отлично, я рад помочь! –

1

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

Family = {'Jim' : ['cool guy', 'has facial hair'], 
      'Ned' : ['hot stuff', ' wears Tees']} 

names = [name.lower() for name in Family] 
def find(query): 
    if query.lower() in names: 
     info = [Family[n] for n in Family if n.lower() == query.lower()] 
     print('{} is {}'.format(
      query, info 
     )) 
    else: 
     print('{} not found'.format(query)) 

Если вы попытаетесь его в следующем примере:

find('Ned') 
find('ned') 
find('no ned') 

вы получите следующие результаты:

Ned is [['hot stuff', ' wears Tees']] 
ned is [['hot stuff', ' wears Tees']] 
no ned not found 
Смежные вопросы