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

2024-05-23 15:19:13 发布

您现在位置: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"

我需要知道的是使用正确的语法来代替fillercontains。因此,例如,如果用户键入“two tutlefish”,那么程序应该通过打印“Response One”来响应

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


Tags: inputrawifresponsetyperesponesomething
3条回答

Python是一种非常简单的语言,只要想想英语,你可能会理解正确的;)

if 'cuttlefish' in resp:
if "cuttlefish" in resp:
    # found

或者

^{pr2}$

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

中的是您要查找的操作员:

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

in基本上是一个运算符,它在strtuplelist等序列上工作。x in y检查x是否是序列{}的一部分。另请参见Python标准库文档中的5.6. Sequence Types。在

编辑

关于您的第二个问题,现在,我如何更改它,使“墨鱼”是墨鱼列表中的一个条目,以及其他几个也应该触发print“Response One”的条目?“。在

这实际上是一个更复杂的问题,因为你不能用in检查多个元素是否在一个序列中。当然,这是有可能的。最简单的方法是将所有支票链在一起:

^{pr2}$

如果你有太多不同的词会导致这种反应,那么你也可以像这样自动处理:

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的一部分。如果是这样的话,至少有一条鱼在响应中被发现,你可以打印结果。在

另一种方法是使用正则表达式。使用它们进行少量不同的选择可能会有些过火,但另一方面,你可以用它来做一些非常有趣的事情。在

相关问题 更多 >