Запрос проходит через каждую строку в словаре: как исправить - PullRequest
1 голос
/ 18 февраля 2020
geomap = {
    "UK": ["London", "Manchester", "Liverpool"],
    "Czech Republic": ["Prague", "Brno", "Ostrava"],
    "Slovak Republic": ["Bratislava", "Košice"],
    "USA": ["Washington", "New York", "Detroit"],
    "Germany": ["Berlin", "Hamburg", "Munich"]
} 

search = input("Tell me city and I'll tell you country: ")

for country, cities in geomap.items():
  if search in cities:
    print(search, "found in", country)
  else: 
    print(search, "not found")

исход:

London found in UK
London not found
London not found
London not found
London not found

Похоже, он проходит через каждую строку в словаре геомарта. У вас есть идеи, как это исправить? Спасибо!

желаемый результат:

London -> London found in UK (when IN dictionary)
Paris -> Paris not found (when not)

и без лишних предложений

Ответы [ 3 ]

1 голос
/ 18 февраля 2020

Я добавляю разрыв в найденный оператор if, чтобы решить проблему.

for country, cities in geomap.items():
    if search in cities:
        print(search, "found in", country)
        break
    else: 
        print(search, "not found")
0 голосов
/ 18 февраля 2020

Похоже, вы неправильно используете словарь. Если вы хотите прочитать город и вернуть страну, попробуйте этот фрагмент:

geomap = {"London": "UK",
          "Manchester": "UK",
          "Prague": "Czech Republic"
          # all the other cities you need...
         }

search = input("Tell me city and I'll tell you country: ")

if search in geomap.keys():
    print(f"{search} found in {geomap[search]}")
else:
    print(f"{search} not found")

0 голосов
/ 18 февраля 2020

Вы хотите выделить l oop, как только найдете совпадение (после печати), или напечатать одно сообщение в конце, если город не был найден:

geomap = {
    "UK": ["London", "Manchester", "Liverpool"],
    "Czech Republic": ["Prague", "Brno", "Ostrava"],
    "Slovak Republic": ["Bratislava", "Košice"],
    "USA": ["Washington", "New York", "Detroit"],
    "Germany": ["Berlin", "Hamburg", "Munich"]
} 

search = input("Tell me city and I'll tell you country: ")

for country, cities in geomap.items():
  if search in cities:
    print(search, "found in", country)
    break
else:
    print(search, "not found")

Уведомление что else не совпадает с if. Это конструкция for/else: ветвь else выполняется только в том случае, если l oop завершается без запуска каких-либо break.

. В код можно внести несколько других улучшений (например, именование переменных, печать аргументов и т. д. c. но это больше для CodeReview SE).

...