制作一个响应用户输入的简单程序。
在示例中,输入“我喜欢数学”将返回响应“那很酷”。 如果用户从列表中输入两个项目,例如“我喜欢数学和生物学”,我希望响应发生变化。
我决定使用count函数来完成此操作,但它始终返回值0。 我要怎么做才能得到 if 响应?
list = ["math", "physics", "biology", "computer science"]
favsub = input("What are your favorite subjects? \n")
favsub = favsub.lower()
favsub = favsub.split()
num = favsub.count(list)
if num == 2:
print("Both?")
else
print("That's cool")
上面的代码是一个简化的示例,如果您想查看实际的代码,我将其保留在Google文档here中。
答案 0 :(得分:3)
list.count(x)
仅计入单个元素x
。当然,您的列表不是favsub
的元素,并且不会神奇地求和其元素的计数。但是,在您的方法的基础上,可以使用sum
执行以下操作:
favsub = input("...").lower()
# do not split, otherwise you can't count "computer science"
num = sum(x in favsub for x in list)
通常,您不应命名变量list
(或str
,int
等),因为它会掩盖内置名称。
答案 1 :(得分:2)
您可以改为设置list和favsub集,并采用相交的长度。
注意:仅当list和favsub中的所有短语都是单个单词且没有空格时,此方法才有效。
答案 2 :(得分:1)
您的方法过于幼稚。首先,您必须标记用户输入(如果用户输入math,physics
而不是math and physics
呢?.split
不会将math
与physics
分开)。
然后,您需要使用favsub.count
的每个成员来调用list
(顺便说一下,这是一个不好的变量名,因为它掩盖了内置的list
)。
我将建议另一种幼稚(但更简单)的方法。无需拆分和标记化用户输入。只需搜索每个公认的主题并总结结果即可:
subjects_list = ["math", "physics", "biology", "computer science"]
favsub = input("What are your favorite subjects? \n")
favsub = favsub.lower()
count = 0
for subject in subjects_list:
if subject in favsub:
count += 1
print(count)
这与@schwobaseggl的答案基本相同,但有一个明确的计数器。