Exit a program conditional on input (Python 2)
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
hobgoblin
Updated on June 04, 2022Comments
-
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 over 10 yearsMight also want to address that
blah == 'yes' or 'y'
isn't going to work as expected either... -
hobgoblin over 10 yearsOkay 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 over 10 yearsI 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 over 10 yearsHaha I'm sorry, I realised that I've been telling it to print input this whole time. Thanks though!
-
Yunnosch almost 4 yearsPlease 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.