Что касается операторов печати go, вы можете проверить f-строки:
somedict = {'a': 1, 'b': 2}
print(f"My dictionary is {somedict}")
My dictionary is {'a': 1, 'b': 2}
или str.format
:
print("My dictionary is {}".format(somedict))
Вызов list(state_dictionary.keys())
является избыточным, list
будет просто потреблять ключи, поэтому должно быть list(state_dictionary)
Вам не нужно bool
, чтобы обернуть state_dictionary
, так как dict имеет встроенную реализацию __bool__
который вызывается, когда вы звоните if state_dictionary
.
dict.pop
на отсутствующий ключ, вы получите KeyError
, поэтому поймайте его, если кто-то даст вам ввод, который вы не ожидаете:
try:
state_dictionary.pop(getcapital)
except KeyError as e:
print("Sorry, I don't have that state! Try again")
continue
Вам также не нужно if i <= len(dict)
для вашего времени l oop. Вы могли бы сделать оператор while state_dictionary
, но вы проверили это условие в l oop, поэтому я просто сделал бы while True
и позволил бы вашей содержащейся условной логике c обработать все остальное.
Я бы изменил elif more == 'no'
на else
, если пользователь не предоставит вам правильный ввод, тогда вы можете просто закончить выполнение. Поскольку вы запрашиваете у пользователя Yes
и No
, а не yes
и no
, я бы санировал ввод, например:
more = more.lower().strip()
Это уменьшит все буквы и избавит от лишних новые строки / пробелы, которые могут быть случайно введены