如何检查某些字符串的变量?

时间:2015-07-22 12:07:50

标签: python

如果我没有遵循某些格式要求,我会道歉。这是我第一次在这里问一个问题和我的第一个编程语言。正如主题所说,我想检查某个字符串的变量。我已经尝试了一些选项并对其进行了一些研究,但仍未找到可行的选项。

为了给你一些背景知识,我正在尝试创建一个类似于Zorg的文字游戏(我认为这就是所谓的)。我这样做是学习Python艰难之路[练习35额外练习]的一部分。无论如何,这是我的代码。非常感谢您的时间和帮助!

#First room, allows 3 options    
def firstroom():
    print "You have now begun the test."
    print "For your sake %s, I hope you pass." % name
    print "------------------------------------"
    print "You enter a new room and see three paths."
    print "The middle path is illuminated by an eery blue light."
    print "The left path is illuminated by a dangerous red light."
    print "The right path is illuminated by a soft green glow."
    next = raw_input("What path do you take?" )

    if next in ("left", "red"):
        print "You cautiously approach the left path."
        print "Before you can react, an axe swings down and kills you."
        exit("Thank you %s for playing, unfortunately you died." % name)
    elif next in ("middle", "straight", "blue"):
        print "A smart choice. You slowly head down the middle path."
        print "As you approach the end of the middle path, you see a blue light."
        blueroom()
    elif next in rightpath:
        print "You are lured to the green light."
    else:
        print "Command not recognized."
        firstroom()

2 个答案:

答案 0 :(得分:0)

函数中没有声明变量rightpath。否则,您的代码看起来就像它按照您的意图行事。

我唯一的建议是改变:

elif next in rightpath

elif next == rightpath

假设rightpath包含一个string值。

修改

要实现您在评论中描述的内容,您应该将用户输入(可能是一个句子)拆分为单词列表:

next = raw_input("What path do you take?" ).split()

然后必须更改每个比较以合并any函数:

if any(item in next for item in ("left", "red")):
    ...
elif any(item in next for item in ("middle", "straight", "blue")):
    ...
else:
    ...

any将返回True用户输入中的任何字词都存在于特定案例的预期答案列表中。

答案 1 :(得分:-1)

这条线并不像你想象的那样工作:

next in ("middle", "straight", "blue")

如你所说,如果next = "middle"它可以正常工作,但如果是the middle path则不行。那是因为如果这个语句完全匹配,它只会是True,如果字符串的一部分在列表中,它就不会匹配。即。你需要包括:

next in ("middle", "straight", "blue", "the middle path")

有一种方法可以在一行中做你想做的事,虽然它会涉及多个功能。

首先,您可以使用find方法检查特定参数是否在字符串中。

next.find("middle")

将返回一个数字,无论是找到'middle'的位置的索引还是-1,如果它在字符串中找不到中间位置。使用此功能,您可以使用以下语句检查玩家是否在字符串中的任何位置输入“中间”:

next.find("middle") != -1

如果中间位于next,则返回True,否则返回false。但是,既然你想检查多个参数,我们会更进一步。我们使用名为any()的东西,它基本上会检查一组条件,如果其中任何条件为真,则返回True。我们还需要包含一个叫做生成器的东西,它类似于一行中包含的for循环。这就是它的样子:

any(next.find(keyword) != -1 for keyword in ("middle", "straight", "blue"))

为了更清楚地说明这一点,这与for循环类似:

for keyword in ("middle", "straight", "blue"):
    if next.find(keyword) != -1:
       found = True

它会遍历您的列表,如果它找到next字符串中的任何关键字,那么它将是True。您现在可以为每个if使用此功能。

提醒一句,像"the left blue path"这样的字符串会出现问题。由于它包含来自两个if语句的关键字,因此它只会执行它首先遇到的任何一个。