list = ["apples", "oranges", "jerky", "tofu"]
if "chew" in action and list[:] in action:
print "Yum!"
else:
print "Ew!"
我如何进行逻辑检查以检查“chew”的运行情况以及列表中的任何值?例如,我想打印“百胜!”行动是“咀嚼橙子”还是“咀嚼生涩”。
答案 0 :(得分:6)
为什么不使用内置any()
功能?以下对我来说似乎很恐怖:
foods = ["apples", "oranges", "jerky", "tofu"]
if "chew" in action and any(f in action for f in foods):
print "Yum!"
else:
print "Ew!"
当然,只搜索简单的子串可能会产生一些奇怪的结果。例如,"jerkeyblahchew"
仍会与"Yum!"
类别匹配。您可能希望将action
分成单词,并查找紧跟"chew"
的食物名称(正如@Peter Lyons在他的答案中建议的那样,前两个单词将是{{ 1}})。
忽略顺序,您可以通过使用以下内容来专注于空格分隔的单词(并进一步忽略大写/小写):
"chew X"
答案 1 :(得分:4)
if "chew" in action and action.split()[1] in list:
print "Yum!"
else:
print "Ew!"
答案 2 :(得分:0)
首先,请不要使用list作为变量名。它是python中的关键字
_list = ["apples", "oranges", "jerky", "tofu"]
bools = [True for a in action.split() if a in (_list + ["chew"])]
if True in bools:
print "Yum!"
else:
print "Ew!"
答案 3 :(得分:0)
x in y
表示"依次查看y
的每个元素;是否等于x
?"所以逻辑显然不对:list
(对于变量名称一个坏主意,BTW,因为那个类型的名称)是一个字符串列表,action
是一个string - 字符串的元素是字母,没有字母可以等于字符串列表。
答案 4 :(得分:0)
好像你想在这里进行一些集合操作(交集)。
假设action
是包含单词的基本字符串:
foods = set(["apples", "oranges", "jerky", "tofu"])
actionWords = set(action.split())
if "chew" in action and foods & actionWords:
print "Yum!"
else:
print "Ew!"
集合上的&
运算符代表交集,请参阅python doc。