[Tutor] more rps

Christopher Spears cspears2002 at yahoo.com
Tue Aug 15 08:42:37 CEST 2006


Here is the latest version of my Rock, Paper, Scissors
game:

#!/usr/bin/python

import random
random.seed()

class Human:
	def __init__(self):
		self.points = 0
		self.choice = " "
		
	def plays(self):
		fromUser = raw_input("Pick (R)ock, (P)aper, or
(S)cissors! ")
		translate = {'r':'rock', 's':'scissors',
'p':'paper'} 
		try:
			self.choice = translate[fromUser.lower()]
		except KeyError:
			print 'Invalid Response'
	
class Computer:
	def __init__(self):
		self.points = 0
		self.choice = " "
	
	def plays(self):
		comp_choice = random.randint(0,2)
		if comp_choice == 0:
			self.choice = 'rock'
		elif comp_choice == 1:
			self.choice = 'paper'
		else:
			self.choice = 'scissors'
			
def compare_objects(human, computer):
	print "Human picked ", human.choice
	print "Computer picked", computer.choice
	results = { 'rock' : {'rock' : 'draw', 'paper': 0,
'scissors': 1},
		'paper' : {'rock' : 1, 'paper': 'draw', 'scissors':
0},
		'scissors' : {'rock' : 0, 'paper' : 1, 'scissors' :
'draw'}
		}
		
	outcome = results[human.choice][computer.choice]
	if outcome == 0:
		print "Computer Wins!"
		computer.points = computer.points + 1
	elif outcome == 1:
		print "Human Wins!"
		human.points = human.points + 1
	else:
		print "Draw!"
		

if __name__ == "__main__":
	print "Welcome to Rock, Paper, Scissors!"
	final_points = raw_input("Play to how many points? ")
	human = Human()
	computer = Computer()
	while (human.points < final_points or computer.points
< final_points):
		human.plays()
		computer.plays()
		compare_objects(human, computer)
		print "Score:\tHuman: ",human.points,"\tComputer:
",computer.points
	print "Game Over!"
	
	
I actually figured out how to build the 2x2 matrix. 
I'm quite proud of this.  Like all of my good ideas,
the answer came to me in the shower. :-)

Unfortunately, my while loop doesn't seem to be
working.  I've played around with it with no success. 
Hints, anyone?



More information about the Tutor mailing list