这是一个游戏。游戏询问用户是否愿意再次玩。如果没有,程序应该退出。如果是,则重复整个游戏并要求再次玩,依此类推。
while True:
print "*game being played*"
# prompt to play again:
while True:
replay = raw_input("Play again? ")
print replay
if replay.lower == "yes" or "y":
break
elif replay.lower == "no" or "n":
sys.exit()
else:
print "Sorry, I didn't understand that."
然而,当我实际执行这段代码时,它的行为就好像每个答案输入都是yes(甚至是“aksj;fakdsf”),所以它会再次重播游戏。
是的。
当我将代码更改为“首先考虑否”而不是“是”时:
if replay.lower == "no" or "n":
sys.exit()
我明白错误
Traceback (most recent call last):
File "C:/Python27/Programs/replay game.py", line 18, in <module>
sys.exit()
NameError: name 'sys' is not defined
这可能与我实际上不知道sys.exit()做什么有关,但只是在搜索“如何退出程序python”时找到它。
首先,sys是一个需要导入以引用它的标准lib包。我建议阅读一下python中的导入。 将此置于代码顶部:
它应该处理sys名称空间错误
其次,您需要了解python如何计算if语句
可分为两种陈述:
左侧将计算为False,右侧将计算为True。这是因为“n”(或任何非0/非False对象)的计算结果为True。
lower
是python中的一个函数。确保包含省略符号
()
。它应该看起来像string.lower()
另外,试着把它放在输入的末尾,这样就不必每次都输入
正如Jon Clements指出的,我在您的代码中查看了一些遗漏的内容,请考虑以下语句:
在人眼看来,这是正确的,但在计算机看来,这是正确的:
你的游戏将一直重播,因为“y”是一个字符串,并且总是正确的。您必须将代码替换为以下内容(包括我的上述建议):
最后,
import sys
在程序的顶部。这是发生错误的地方,因为sys
是必须导入程序的模块。这里有一个article on operators,您可以从中受益
首先需要导入
sys
。放置此:在代码顶部导入
sys
模块。但是,退出脚本的一个更简单的方法是这样做:
上面的代码与
sys.exit
做的完全相同。另外,要使代码正常工作,您还需要做两件事:
in
关键字。()
来调用.lower
方法。以下是脚本的固定版本:
现在让我解释一下为什么你需要重新制作if语句。目前,Python正在如下读取您的代码:
此外,由于
"y"
是一个非空字符串(在Python中,该字符串的计算结果总是True
),因此这个if语句将始终作为True
传递。使用in
然而就像我在上面做的那样,测试是否可以在元组("yes", "y")
中找到replay
。相关问题 更多 >
编程相关推荐