这是一个游戏。游戏询问用户他/她是否想再次玩。如果没有,程序应该退出。如果是,则重复整个游戏并要求再次玩,依此类推。
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”时才发现的。
lower
是python中的函数。
请确保包含椭圆()
。它看起来应该像string.lower()
另外,请尝试将其放在输入的末尾,这样就不必每次都键入它了
replay = raw_input('Play again? ').lower()
正如乔恩·克莱门茨(Jon Clements)所指出的那样,我在您的代码中忽略了某些内容,请考虑以下语句:
if replay.lower() == "yes" or "y":
#execute
在人眼看来,这是正确的,但在计算机上看到的是:
如果replay.lower()等于“ yes”或'y'为True ...执行
您的游戏将始终重放,因为“ y”是一个字符串,并且始终为true。您必须用这样的代码替换代码(包括我上面的建议):
if replay == 'yes' or replay == 'y':
#execute
最后,在程序顶部的import sys
。这是发生错误的地方,因为sys
是必须导入程序的模块。
这里是article on operators,您可能会从中受益
您首先需要导入sys
。放置这个:
import sys
在代码顶部以导入sys
模块。
但是,退出脚本的一种简单得多的方法就是这样做:
raise SystemExit
上面的代码与sys.exit
完全相同。
此外,为了使代码正常工作,您还需要做两件事:
in
关键字。.lower
来调用()
方法。下面是脚本的固定版本:
while True:
print "*game being played*"
# prompt to play again:
while True:
# I put .lower() up here so I didn't have to call it multiple times
replay = raw_input("Play again? ").lower()
print replay
if replay in ("yes", "y"):
break
elif replay in ("no", "n"):
raise SystemExit
else:
print "Sorry, I didn't understand that."
现在让我解释一下为什么您需要重新制作if语句。就目前而言,Python正在读取您的代码,如下所示:
if (replay.lower == "yes") or "y":
此外,由于"y"
是一个非空字符串(在Python中始终计算为True
),因此此if语句按原样将始终作为True
传递。但是,像我上面所做的那样使用in
来测试是否可以在元组replay
中找到("yes", "y")
。
在代码的开头,您必须添加:
import sys
然后可以跟随其他代码
首先,sys是一个标准的lib软件包,需要导入它才能引用它。我建议阅读一些有关python导入的内容。把它放在代码的顶部:
import sys
应该注意sys名称空间错误
第二,您需要了解python如何评估if语句
if replay.lower == "no" or "n":
可以分为两个语句:
if ( (replay.lower == "no") or ("n") ):
左侧将评估为False,而右侧将评估为True。这是因为“ n”(或任何非0 /非False对象)的计算结果为True。