Ошибка при работе с извлечением инфо из списка- выдает при несуществующем документе три строки "Документ не найден в базе"
documents = [
{'type': 'passport', 'number': '2207 876234', 'name': 'Василий Гупкин'},
{'type': 'invoice', 'number': '11-2', 'name': 'Геннадий Покемонов'},
{'type': 'insurance', 'number': '10006', 'name': 'Аристарх Павлов'}
]
directories = {
'1': ['2207 876234', '11-2'],
'2': ['10006'],
'3': []
}
def get_owner():
number = input('Введите номер документа: ')
for dic in documents:
if "number" in dic.keys() and dic["number"] == number:
print('Владелец документа: ', dic['name'])
else:
print('Документ не найден в базе')
get_owner()
Ответы (2 шт):
Если проблема в том, что выводятся лишние строки “Документ не найден в базе”, то можно вынести else из цикла и добавить break если паспорт найден.
def get_owner():
number = input('Введите номер документа: ')
for dic in documents:
if "number" in dic.keys() and dic["number"] == number:
print('Владелец документа: ', dic['name'])
break
else: print('Документ не найден в базе')
Хотя я сам не понимаю, почему else продолжает при этом работать... Может кто подскажет?
Нашел.
Также в циклах while и for можно указать else-блок после основного блока цикла. else-блок в циклах выполняется один раз после завершения работы цикла, но только в случае, если цикл не был прерван инструкцией break. Поясним это на программе, которая по введенному целому числу n>1 определяет, является ли оно простым или составным.
n=input("Введите целое число, больше 1 ") # 1 Считали число n
for d in range(2, n): # 2 d меняется от 2 до n-1
if n % d == 0: # 3 Проверка: n делится на d?
print (n, "имеет делитель", d) # 4
break # 5 Завершаем цикл for
else: # 6 Это else-блок цикла
print (n, "простое число") # 7
Одно из решений - счётчик успешных поисков, в этом случае меняем алгоритм проверки:
def get_owner():
success_num = 0
number = input('Введите номер документа: ')
for dic in documents:
if 'number' in dic.keys() and dic['number'] == number:
print('Владелец документа: ', dic['name'])
success_num += 1
if success_num == 0:
print('Документ не найден в базе')
get_owner()
Кроме того, break - приводит к прекращению выполнения цикла, если требуется лишь ограничить выполнение следующих команд цикла по условию - рекомендую использовать continue:
for i in range(10):
if 7 > i > 4:
continue
print( i)