如果我没有遵循某些格式要求,我会道歉。这是我第一次在这里问一个问题和我的第一个编程语言。正如主题所说,我想检查某个字符串的变量。我已经尝试了一些选项并对其进行了一些研究,但仍未找到可行的选项。
为了给你一些背景知识,我正在尝试创建一个类似于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()
答案 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语句的关键字,因此它只会执行它首先遇到的任何一个。