Building a simple Python game of "Rock, Paper, Scissors" for learning purposes.
I've read some other posts here on exiting from Python without a traceback. I'm trying to implement it but still getting a traceback! Can some Python wiz point out what's wrong for this Python dummy? The idea is that clicking RETURN (or typing "yes" or "y" will make the program run the play() again, but hitting CTRL-C will close it without a traceback. I´m using Python 2.7.
# modules
import sys, traceback
from random import choice
#set up our lists
ROCK, PAPER, SCISSORS = 1, 2, 3
names = 'ROCK', 'PAPER', 'SCISSORS'
#Define a function for who beats who?
def beats(a, b):
return (a,b) in ((PAPER, ROCK), (SCISSORS, PAPER), (ROCK, SCISSORS))
def play():
print "Please select: "
print "1 Rock"
print "2 Paper"
print "3 Scissors"
# player choose Rock, Paper or Scissors
player_choice = int(input ("Choose from 1-3: "))
# assigns the CPU variable a random CHOICE from a list.
cpu_choice = choice((ROCK, PAPER, SCISSORS))
if cpu_choice != player_choice:
if beats(player_choice, cpu_choice):
print "You chose %r, and the CPU chose %r." % (names[player_choice - 1], names[cpu_choice - 1])
print "You win, yay!!"
else:
print "You chose %r, and the CPU chose %r." % (names[player_choice - 1], names[cpu_choice - 1])
print "You lose. Yuck!"
else:
print "You chose %r, and the CPU chose %r." % (names[player_choice - 1], names[cpu_choice - 1])
print "It's a tie!"
print "Do you want to play again? Click RETURN to play again, or CTRL-C to exit!"
next = raw_input("> ")
# THIS IS WHAT I'M WORKING ON - NEED TO REMOVE TRACEBACK!
if next == "yes" or "y":
try:
play()
except KeyboardInterrupt:
print "Goodbye!"
except Exception:
traceback.print_exc(file=sys.stdout)
sys.exit(0)
elif next == None:
play()
else:
sys.exit(0)
# initiate play() !
play()