如何计算输入中列表中的单独项目

时间:2018-08-28 14:02:14

标签: python

制作一个响应用户输入的简单程序。

在示例中,输入“我喜欢数学”将返回响应“那很酷”。 如果用户从列表中输入两个项目,例如“我喜欢数学和生物学”,我希望响应发生变化。

我决定使用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中。

3 个答案:

答案 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(或strint等),因为它会掩盖内置名称。

答案 1 :(得分:2)

您可以改为设置list和favsub集,并采用相交的长度。

注意:仅当list和favsub中的所有短语都是单个单词且没有空格时,此方法才有效。

答案 2 :(得分:1)

您的方法过于幼稚。首先,您必须标记用户输入(如果用户输入math,physics而不是math and physics呢?.split不会将mathphysics分开)。

然后,您需要使用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的答案基本相同,但有一个明确的计数器。