2

这是为了游戏。游戏询问用户是否想再次玩。如果没有,程序应该退出。如果是,则重复整个游戏并要求再次玩,依此类推。

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() 做了什么但只是在谷歌搜索“如何退出程序 python”时发现它有关。

4

4 回答 4

3

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”是一个字符串并且始终为真。你必须用这样的东西替换代码(包括我上面的建议):

if replay == 'yes' or replay == 'y':
    #execute

最后,import sys在程序的顶部。这是发生错误的地方,因为sys是必须导入程序的模块。

这是一篇关于运算符的文章,您可能会从中受益

于 2013-10-24T00:57:11.603 回答
1

您首先需要导入sys. 放置这个:

import sys

在代码顶部导入sys模块。

但是,退出脚本的一种更简单的方法是这样做:

raise SystemExit

上面的代码与sys.exit.

此外,为了让您的代码正常工作,您还需要做两件事:

  1. 重构您的 if 语句以使用in关键字。
  2. .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"是一个非空字符串(True在 Python 中总是计算为),所以这个 if 语句,保持原样,总是传递为True. in然而,像我上面所做的那样使用测试是否replay可以在 tuple 中找到("yes", "y")

于 2013-10-24T00:56:48.047 回答
1

在代码的开头,您必须添加:

import sys

然后可以遵循其他代码

于 2020-05-17T06:44:49.387 回答
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。

于 2013-10-24T01:01:01.513 回答