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

时间:2013-10-24 00:52:21

标签: python exit

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

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

4 个答案:

答案 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完全相同。

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

  1. 重建if语句以使用in关键字。
  2. 通过在.lower之后放置()方法来调用此方法。
  3. 以下是您脚本的固定版本:

    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。