这是一场比赛。游戏询问用户他/她是否想再玩一次。如果没有,该程序应该退出。如果是,则重复整个游戏并要求再次播放,依此类推。
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."
但是,当我实际执行此代码时,它就好像每个答案输入都是肯定的(甚至是“aksj; fakdsf”),因此它会再次重放游戏。
当我更改代码时,首先考虑no而不是yes:
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()的作用有什么关系,但是在google搜索“如何退出程序python”时才发现它。
答案 0 :(得分:3)
lower
是python中的一个函数。
请务必加入elipses ()
。它应该看起来像string.lower()
另外,请尝试将其放在输入的末尾,这样您就不必每次都输入
replay = raw_input('Play again? ').lower()
正如Jon Clements指出的那样,我在你的代码中查看和遗漏的内容,请考虑以下声明:
if replay.lower() == "yes" or "y":
#execute
对于人眼来说,这看起来是正确的,但它看到的是计算机:
如果replay.lower()等于“是”或者如果'y'为True ......执行
您的游戏将始终重播,因为“y”是一个字符串并且始终为真。你必须用这样的代码替换代码(包括我的上述建议):
if replay == 'yes' or replay == 'y':
#execute
最后,import sys
位于程序的顶部。这是发生错误的地方,因为sys
是必须导入程序的模块。
以下是您可能会从
中获益的article on operators答案 1 :(得分:1)
首先需要导入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-statement保持不变,将始终作为True
传递。使用in
,但就像我上面所做的那样,测试是否可以在元组replay
中找到("yes", "y")
。
答案 2 :(得分:1)
您必须在代码的开头添加:
import sys
那么其他代码可以遵循
答案 3 :(得分:0)
首先,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。