Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从用户处获取输入,并检查其中是否有一部分是字典中的键?_Python_Dictionary_Input - Fatal编程技术网

Python 如何从用户处获取输入,并检查其中是否有一部分是字典中的键?

Python 如何从用户处获取输入,并检查其中是否有一部分是字典中的键?,python,dictionary,input,Python,Dictionary,Input,我需要从用户那里获得输入,并检查“city”后面的单词是否在我的字典(键)中 这是我的dic: mydic = {'Paris':132, 'Rome':42, 'San Remo':23} 我需要用户写‘城市’(根据我给他们的指示,他们会这样做),但之后他们必须写一个城市名称。所以他们会写一些类似的东西,比如:“巴黎城”,这必须返回:“巴黎有132座教堂”,或者如果他们写“圣雷莫城”,则必须返回:“圣雷莫有23座教堂” 代码有一个条件,因为如果用户输入'city gba',那么它将返回一个特

我需要从用户那里获得输入,并检查“city”后面的单词是否在我的字典(键)中

这是我的dic:

mydic = {'Paris':132, 'Rome':42, 'San Remo':23}
我需要用户写‘城市’(根据我给他们的指示,他们会这样做),但之后他们必须写一个城市名称。所以他们会写一些类似的东西,比如:“巴黎城”,这必须返回:“巴黎有132座教堂”,或者如果他们写“圣雷莫城”,则必须返回:“圣雷莫有23座教堂”

代码有一个条件,因为如果用户输入'city gba',那么它将返回一个特定的东西。因此,问题在于elif部分,其中有更多的城市选择

这是我认为可行的方法,但由于明显的原因,它行不通:

user_input = input().lower()

if user_input == 'city gba':
    print('City gba has', city_data.get('gba'), 'churches')
elif user_input.split() == 'city' + '':
        for x in user_input:
            if x in mydic.keys():
                print(x, 'has', city_data.get(x), ' churches.')
我还能怎么做?
谢谢。

您的代码即将运行

user_input = input().lower() # Assume user input is "city Rome"

tag, city = user_input.split(" ", 1) # This will set tag = 'city' and city = 'rome'
if tag == 'city':
    if city.capitalize() in mydic: # You could also do mydic.keys() it doesn't matter
        print(f"{city} has {county_data.get(city)} churches.")

编辑:
.split()
不起作用,因为像
美国
梵蒂冈城
这样的城市是用空格分隔的。我们应该使用
.split(“,1)
,它只会在第一次出现空格时进行拆分。

您的代码非常接近工作状态

user_input = input().lower() # Assume user input is "city Rome"

tag, city = user_input.split(" ", 1) # This will set tag = 'city' and city = 'rome'
if tag == 'city':
    if city.capitalize() in mydic: # You could also do mydic.keys() it doesn't matter
        print(f"{city} has {county_data.get(city)} churches.")

编辑:
.split()
不起作用,因为像
美国
梵蒂冈城
这样的城市是用空格分隔的。我们应该使用
.split(“,1)
,它只会在第一次出现空格时进行拆分。

像这样简单的方法应该可以工作

代码

#prompt user for city name
city = input('Enter a city. Format \'city name\': ')
#split user input at spaces. #['city','cityName']
#take the second element in this list
city = city.split()[1]
#check if that city is in the given dictionary. If so we print the cities church count.
if city in mydic.keys():print(f'{city} has {mydic[city]} churches')
#if it is not visible in the dictionary we show that city is not located in the given dictionary
else:print('City not in dictionary')
输入

Enter a city. Format 'city name': city Paris
Paris has 132 churches
输出

Enter a city. Format 'city name': city Paris
Paris has 132 churches

像这样简单的事情应该行得通

代码

#prompt user for city name
city = input('Enter a city. Format \'city name\': ')
#split user input at spaces. #['city','cityName']
#take the second element in this list
city = city.split()[1]
#check if that city is in the given dictionary. If so we print the cities church count.
if city in mydic.keys():print(f'{city} has {mydic[city]} churches')
#if it is not visible in the dictionary we show that city is not located in the given dictionary
else:print('City not in dictionary')
输入

Enter a city. Format 'city name': city Paris
Paris has 132 churches
输出

Enter a city. Format 'city name': city Paris
Paris has 132 churches
请注意,
名称
和键必须完全匹配。我建议您将两者都降到小写进行比较。将dict编码为全小写


请注意,
名称
和键必须完全匹配。我建议您将两者都降到小写进行比较。将dict编码为全小写。

您的用例正是Python 3.10新功能的关键所在。因此,您的代码可以重写为:

user\u input=input().lower()
匹配用户输入。拆分()
案例['city','gba']:
打印('City gba has',City_data.get('gba'),'churches'))
案例['city',city]:
如果城市位于mydict:
打印(城市,'has',城市数据[city],'churches')

您的用例正是Python 3.10新功能的关键所在。因此,您的代码可以重写为:

user\u input=input().lower()
匹配用户输入。拆分()
案例['city','gba']:
打印('City gba has',City_data.get('gba'),'churches'))
案例['city',city]:
如果城市位于mydict:
打印(城市,'has',城市数据[city],'churches')

您是否知道
.split()
返回一个列表?它永远不会等于一个字符串。在您的情况下,
user\u input.split()
将是
['city','paris']
。也许这可以帮助您提高您是否知道
.split()
返回一个列表?它永远不会等于一个字符串。在您的情况下,
user\u input.split()
将是
['city','paris']
。也许这可以帮助你提高Cepthyton有一个
大写的方法。我已经更新了我的答案来使用它谢谢你的答案。我把这个代码放在一个条件中,所以它给了我一个语法错误,因为“tag,city”中的逗号,你知道有没有办法把它放在一个条件中吗?@satoru如果你指的是
if user\u input.split()=='city'+'':
从你的问题来看,它不应该是有条件的…@Tomerikoo我的代码比这个大,而且输入还有更多的可能性,所以其中一个是如果他们键入city和城市名称,那么这实际上是:elif tag,city(因为这是选项之一)@satoru根据你的编辑,新的Python3.10功能的目标用例Python似乎有一个
capitalize
方法。我已经更新了我的答案来使用它谢谢你的答案。我把这个代码放在一个条件中,所以它给了我一个语法错误,因为“tag,city”中的逗号,你知道有没有办法把它放在一个条件中吗?@satoru如果你指的是
if user\u input.split()=='city'+'':
从你的问题来看,它不应该是有条件的…@Tomerikoo我的代码比这个大,而且输入还有更多的可能性,所以其中一个是如果他们键入city和城市名称,那么这实际上是:elif tag,city(因为这是选项之一)@satoru根据你的编辑,它似乎是新的Python 3.10特性的目标用例