Exit a program conditional on input (Python 2)

16,173

Solution 1

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

Solution 2

At the beginning of the code you have to add:

import sys

then other code can follow

Share:
16,173
hobgoblin
Author by

hobgoblin

Updated on June 04, 2022

Comments

  • hobgoblin
    hobgoblin almost 2 years

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

  • Jon Clements
    Jon Clements over 10 years
    Might also want to address that blah == 'yes' or 'y' isn't going to work as expected either...
  • hobgoblin
    hobgoblin over 10 years
    Okay so it keeps spitting back the input I just gave it. For example, after I input 'n', the terminal writes 'n' again before exiting. How do I get that to stop? EDIT: nvm, my own stupidity :P
  • samrap
    samrap over 10 years
    I would expect it to, you're telling it to print input. Are you saying the conditionals aren't executing? If that's the case, the only reason it wouldn't work is if you're using .lower instead of .lower()
  • hobgoblin
    hobgoblin over 10 years
    Haha I'm sorry, I realised that I've been telling it to print input this whole time. Thanks though!
  • Yunnosch
    Yunnosch almost 4 years
    Please make more ovious the addtiional insight this provides, especially when compared to the existing, older, upvoted and better explained answer, which also provides an alternative; the one by user2555451.