如何从inpu计算列表中的独立项

2024-04-23 09:56:45 发布

您现在位置:Python中文网/ 问答频道 /正文

制作一个简单的程序来响应用户的输入。你知道吗

在本例中,输入“I like math”将返回“That's cool”的响应。 如果用户从列表中输入两项,例如“我喜欢数学和生物”,我希望响应发生变化。你知道吗

我决定使用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中。你知道吗


Tags: 代码用户程序列表ifthatcountmath
3条回答

你的方法太幼稚了。首先,您必须对用户输入进行标记化(如果用户输入math,physics而不是math and physics,该怎么办?.split在这种情况下不会将mathphysics分开)。你知道吗

然后需要用list的每个成员调用favsub.count(顺便说一句,这是一个坏的变量名,因为它隐藏了内置的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)

这与@schwobasegll的答案基本相同,但有一个显式计数器。你知道吗

您可以改为创建list和favsub集,并获取交叉点的长度。你知道吗

注意:只有当list和favsub中的所有短语都是单字,没有空格时,这才有效。你知道吗

^{}只计算单个元素x。当然,您的列表不是favsub的元素,也不会神奇地对其元素的计数求和。但是,基于您的方法,您可以使用^{}执行以下操作:

favsub = input("...").lower()
# do not split, otherwise you can't count "computer science" 
num = sum(x in favsub for x in list)

通常,您不应该命名变量list(或strint,等等),因为它隐藏了内置名称。你知道吗

相关问题 更多 >