以输入为条件退出程序(Python 2)

2024-05-23 23:16:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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”时找到它。


Tags: orno程序gametrue游戏replayif
3条回答

首先,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。

lower是python中的一个函数。

确保包含省略符号()。它应该看起来像string.lower()

另外,试着把它放在输入的末尾,这样就不必每次都输入

replay = raw_input('Play again? ').lower()

正如Jon Clements指出的,我在您的代码中查看了一些遗漏的内容,请考虑以下语句:

if replay.lower() == "yes" or "y":
    #execute

在人眼看来,这是正确的,但在计算机看来,这是正确的:

if replay.lower() is equal to "yes" or if 'y' is True...execute

你的游戏将一直重播,因为“y”是一个字符串,并且总是正确的。您必须将代码替换为以下内容(包括我的上述建议):

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

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

这里有一个article on operators,您可以从中受益

首先需要导入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"是一个非空字符串(在Python中,该字符串的计算结果总是True),因此这个if语句将始终作为True传递。使用in然而就像我在上面做的那样,测试是否可以在元组("yes", "y")中找到replay

相关问题 更多 >