Search code examples
pythonexit

Exit a program conditional on input (Python 2)


This is for a game. The game asks the user if s/he would like to play again. If not, the program should just exit. If yes, the entire game is repeated and asks to play again, and so on.

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." 

However, when I actually execute this code it acts as if every answer input is a yes (even "aksj;fakdsf"), so it replays the game again.

.

When I changed the code to first consider no instead of yes:

if replay.lower == "no" or "n":
    sys.exit()

I get the error

Traceback (most recent call last):
  File "C:/Python27/Programs/replay game.py", line 18, in <module>
    sys.exit()
NameError: name 'sys' is not defined

This might have something to do with the fact I don't actually know what sys.exit() does but just found it while googling "how to exit program python".


Solution

  • lower is a function in python.

    Be sure to include the elipses (). It should look like string.lower()

    Also, try putting it at the end of your input so you don't have to type it every time

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

    As Jon Clements pointed out, something that I looked over and missed in your code, consider the following statement:

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

    To the human eye, this looks correct, but to the computer it sees:

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

    Your game will always replay because "y" is a string and always true. You must replace the code with something like this (my above advice included):

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

    finally, import sys at the top of your program. This is where the error is occurring, because sys is a module that must be imported to the program.

    Here is an article on operators that you might benefit reading from