如何使用while循环来帮助索引/查找匹配字符串语句的元素



我正在尝试创建一个函数,该函数接受一个参数,该参数是一个国家,并定位该国家相邻的首都。例:

countries_and_capitals = (['Afghanistan', 'Kabul'], ['Albania', 'Tirana (Tirane)'], ['Algeria', 'Algiers'], ['Andorra', 'Andorra la Vella'],
['Angola', 'Luanda'], ['Antigua and Barbuda', "Saint John's"], ['Argentina', 'Buenos Aires'],
['Armenia', 'Yerevan'],
['Australia', 'Canberra']
def get_capital_from_the_country(cntry)

并在输入国家后显示大写字母。

一种方法是使用for循环并遍历元组,同时解包两个值(国家和大写),然后如果找到与参数匹配的国家,则返回大写,如果没有找到国家,则返回消息(此方法更快):

countries_and_capitals = (['Afghanistan', 'Kabul'], ['Albania', 'Tirana (Tirane)'], ['Algeria', 'Algiers'], ['Andorra', 'Andorra la Vella'],
['Angola', 'Luanda'], ['Antigua and Barbuda', "Saint John's"], ['Argentina', 'Buenos Aires'],
['Armenia', 'Yerevan'],
['Australia', 'Canberra'])

def get_capital_from_the_country(cntry):
cntry = cntry.lower()
for country, capital in countries_and_capitals:
if country.lower() == cntry:
return capital
return 'Can't find that country'

print(get_capital_from_the_country('Afghanistan'))
# Kabul
print(get_capital_from_the_country('Afghanista'))
# Can't find that country
print(get_capital_from_the_country('afghanistan'))
# Kabul
print(get_capital_from_the_country('aFgHaniStan'))
# Kabul

另一种方法是将该元组转换为字典,然后通过使用.get(返回特定消息而不是引发KeyError)轻松访问键(国家)的值(大写):

def get_capital_from_the_country(cntry):
dct = {k.lower(): w for k, w in countries_and_capitals}
# alternatively can use:
# dct = dict(map(lambda x: (x[0].lower(), x[1]), countries_and_capitals))
return dct.get(cntry.lower(), 'Can't find that country')