使用if / elif / else和resp = raw_input - 如何响应用户输入的一部分?

时间:2010-07-16 22:51:06

标签: python

print "Please Type Something"
resp = raw_input()

if resp *contains* "cuttlefish"
    print  "Response One"
elif resp *contains* "nautilus"
    print "Response Two"
else:
    print "Response Three"

我需要知道的是使用正确的语法而不是填充包含。因此,例如,如果用户键入“两个墨鱼”,那么程序应该通过打印“Response One”来响应

我确实试过在一些教程中查找这些信息,所以如果你知道一个很好的解决这个问题,我不会介意那个方向的指针:/

4 个答案:

答案 0 :(得分:5)

Python是一种非常简单的语言,只需要思考英语,你就可以把它弄清楚;)

if 'cuttlefish' in resp:

答案 1 :(得分:3)

中的

是您要查找的运算符:

if "cuttlefish" in resp:
    print "Response One"
elif "nautilus" in resp:
    print "Response Two"
else:
    print "Response Three"

in基本上是一个运算符,适用于strtuplelist等序列。 x in y检查x是否是序列y的一部分。另请参阅Python标准库文档中的5.6. Sequence Types

修改

关于你的第二个问题“现在,我如何更改它以便”乌贼“是cuttlefishList上的一个条目,以及其他几个也应该触发打印”Response One“的条目?”

这实际上是一个更复杂的问题,因为你无法检查多个元素中是否存在任何多个元素。但当然有可能做到这一点。简单的是简单地将所有支票链接在一起:

if "cuttlefish" in resp or "someotherfish" in resp or "yetanotherfish" in resp:
    print "Response One"

如果您有太多不同的单词会导致该响应,那么您也可以自动化,如下所示:

if any( x in resp for x in ( "cuttlefish", "someotherfish", "yetanotherfish" ) ):
    print "Response One"

这基本上是一种简短的写作方式(当然不是字面意思,但想法是一样的):

checkList = []
for x in ( "cuttlefish", "someotherfish", "yetanotherfish" ):
    checkList.append( x in resp )

if True in checkList:
    print "Response One"

它的作用是它遍历元组的所有元素,并检查每个元素x是否是响应的一部分。它保留了这些检查结果的检查清单(简短形式,生成器执行此操作)。最后,检查True是否是序列checkList的一部分。如果是,则在响应中找到至少一条鱼,您可以打印结果。

另一种方法是使用正则表达式。将它们用于少数不同的选择可能有点过头了,但另一方面,你可以用它做很棒的事情。

答案 2 :(得分:1)

if "cuttlefish" in resp:
    # found

if resp.find("cuttlefish") > 0:
    # found

http://docs.python.org/library/stdtypes.html#str.find

答案 3 :(得分:1)

您可以使用以下语法:

if 'string' in word:
   #Code

这会检查它是否在单词中,无论它是列表还是其他字符串。因此,如果单词是'foostringbar'或['foo','string','bar',它将匹配True 另外,不要打印告诉用户输入内容,请尝试以下操作:

resp = raw_input("Please Type Something\n")

这将产生相同的东西,但更加pythonic。