Я новичок в python (3.7) и пытаюсь собрать до 3 строк в одном вводе, разделенном запятыми, и проверить, существуют ли они в словаре.Если какой-либо из строк не существует, мне нужно распечатать, какая это строка, и снова запросить ввод пользователя.Входные данные должны принимать строки без учета регистра, в то время как словарь содержит ключи с первой буквой в верхнем регистре, названия стран, в то время как в некоторых названиях стран есть два слова.
Сначала я попытался поместить ввод в список с некоторым форматированием, например, разделить, и заменить, чтобы убрать пробел после запятой.Я пытался, но я не знаю, как обернуть это в то время как истинный цикл с try catch, чтобы иметь проверку пользовательского ввода, если ключ не существует в словаре.
У меня есть функция, которая преобразует пользовательский ввод в формат моего словарного ключа.например, Австралия
Функция
def case_insensitive(user_list):
new_list = []
for item in user_list:
new_item = item.title()
new_list.append(new_item)
return new_list
Как уже упоминалось, я новичок в python, так что, вероятно, это можно сделать лучше.
В любом случае, после многих попыток яМне удалось найти какое-то решение, которое работает для меня, но, возможно, не идеально.
Проверка ввода пользователя
while True:
try:
user_countries = input('Write up to three comma-separated countries for which you want to'
'\nextract data: ').replace(", ", ",").split(',')
countries = case_insensitive(user_countries)
except:
pass
if len(countries) > 3:
print('ERR: Sorry, at most 3 countries can be entered.\n')
elif not set(countries).issubset(emissions_data):
for country in set(countries):
if country not in set(emissions_data):
print('ERR: Sorry \"{}\" is not a valid country.\n'.format(country))
else:
break
Здесь оператор except
не делает ничего или лучшеничего не говорят.Любые предложения и комментарии приветствуются.