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

问题描述 投票:1回答:4

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

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”时才发现的。

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

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

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

这里是article on operators,您可能会从中受益


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"是一个非空字符串(在Python中始终计算为True),因此此if语句按原样将始终作为True传递。但是,像我上面所做的那样使用in来测试是否可以在元组replay中找到("yes", "y")


1
投票

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

import sys

然后可以跟随其他代码


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。

© www.soinside.com 2019 - 2024. All rights reserved.