如果用户输入"搜索" " for"在userinput中我希望它返回"搜索和两者都已输入"
然而,如果用户输入"搜索"和"信息"在userinput中我希望它返回"搜索和信息都已输入"
问题是,如果用户输入"搜索信息",则python识别" for"在"信息"并返回"搜索和输入" //。这不是我想要的!
怎么办?
查看此图片以了解所描述的问题:
答案 0 :(得分:0)
将您更改为以下内容:
order=raw_input("you: ")
if ("search" in order) and ("information" in order):
print("Search and Information both in order")
elif ("search" in order) and ("for" in order):
print("Search and For both in order")
这样,它会检查"信息"之前"为"。因此"对于"只检查订单是否包含"信息"。
如果你签入python控制台,"search" and "information"
相当于python中的"information"
。所以你必须分别检查每个单词。
答案 1 :(得分:0)
这里重要的是operator precedence。由于in
比and
更具约束力,因此您的情况实际发生的是
if( "search" and ("for" in order )):
...
这意味着第二次匹配足以进入特定分支,因为在Python中,当且仅当它们为空时,字符串才被视为False。所以你的代码基本上等于
if "for" in order:
print "For"
elif "information" in order:
print "information"
此外,分支按照他们在源代码中的顺序进行评估(这是有道理的,请参阅"否则,如果")。由于for
是information
的子字符串,因此第二个分支不可能发生。一个简单的解决方法是交换两个if-else
分支(在解决上一个问题之后)。但是,请记住,在匹配具有相同优先级的情况下,您需要另一种方法。例如字符串format
中的inform
和information
。