===================第一版============================
# Rock-paper-scissors-lizard-Spock template
# The key idea of this program is to equate the strings
# "rock", "paper", "scissors", "lizard", "Spock" to numbers
# as follows:
#
# 0 - rock
# 1 - Spock
# 2 - paper
# 3 - lizard
# 4 - scissors
# helper functions
import random
def name_to_number(name):
if name == "rock":
return 0
elif name == "Spock":
return 1
elif name == "paper":
return 2
elif name == "lizard":
return 3
elif name == "scissors":
return 4
else:
print "Sorry, your input is incorrect"
def number_to_name(number):
if number == 0:
return "rock"
elif number == 1:
return "Spock"
elif number == 2:
return "paper"
elif number == 3:
return "lizard"
elif number == 4:
return "scissors"
else:
print "Sorry, your input is incorrect"
def rpsls(player_choice):
print "\n"
print "Player chooses ", player_choice
player_number = name_to_number(player_choice)
comp_number = random.randrange(0, 5)
comp_choice = number_to_name(comp_number)
print "Computer chooses ", comp_choice
if player_number == 0:
if comp_number == 0:
print "Draw!"
elif comp_number == 1:
print "Computer wins!"
elif comp_number == 2:
print "Player wins!"
elif comp_number == 3:
print "Computer wins!"
elif comp_number == 4:
print "Player wins!"
else:
print "Wrong!"
elif player_number == 1:
if comp_number == 0:
print "Player wins!"
elif comp_number == 1:
print "Draw!"
elif comp_number == 2:
print "Computer wins!"
elif comp_number == 3:
print "Computer wins!"
elif comp_number == 4:
print "Player wins!"
else:
print "Wrong!"
elif player_number == 2:
if comp_number == 0:
print "Player wins!"
elif comp_number == 1:
print "Player wins!"
elif comp_number == 2:
print "Draw!"
elif comp_number == 3:
print "Computer wins!"
elif comp_number == 4:
print "Computer wins!"
else:
print "Wrong!"
elif player_number == 3:
if comp_number == 0:
print "Computer wins!"
elif comp_number == 1:
print "Player wins!"
elif comp_number == 2:
print "Player wins!"
elif comp_number == 3:
print "Draw!"
elif comp_number == 4:
print "Computer wins!"
else:
print "Wrong!"
elif player_number == 4:
if comp_number == 0:
print "Computer wins!"
elif comp_number == 1:
print "Computer wins!"
elif comp_number == 2:
print "Player wins!"
elif comp_number == 3:
print "Player wins!"
elif comp_number == 4:
print "Draw!"
else:
print "Wrong!"
rpsls("rock")
rpsls("Spock")
rpsls("paper")
rpsls("lizard")
rpsls("scissors")
===================第二版============================
修改判断胜负的算法
# Rock-paper-scissors-lizard-Spock template
# The key idea of this program is to equate the strings
# "rock", "paper", "scissors", "lizard", "Spock" to numbers
# as follows:
#
# 0 - rock
# 1 - Spock
# 2 - paper
# 3 - lizard
# 4 - scissors
# helper functions
import random
def name_to_number(name):
if name == "rock":
return 0
elif name == "Spock":
return 1
elif name == "paper":
return 2
elif name == "lizard":
return 3
elif name == "scissors":
return 4
else:
print "Sorry, your input is incorrect"
def number_to_name(number):
if number == 0:
return "rock"
elif number == 1:
return "Spock"
elif number == 2:
return "paper"
elif number == 3:
return "lizard"
elif number == 4:
return "scissors"
else:
print "Sorry, your input is incorrect"
def rpsls(player_choice):
print "Player chooses", player_choice
player_number = name_to_number(player_choice)
comp_number = random.randrange(0, 5)
comp_choice = number_to_name(comp_number)
print "Computer chooses", comp_choice
value = (player_number-comp_number) % 5
if (value == 4) or (value == 3):
print "Computer wins!"
elif (value == 1) or (value == 2):
print "Player wins!"
elif value == 0:
print "Player and computer tie!"
else:
print "Something Wrong!"
print "\n"
rpsls("rock")
rpsls("Spock")
rpsls("paper")
rpsls("lizard")
rpsls("scissors")
==================================第三版===============================
使用字典
# Rock-paper-scissors-lizard-Spock template
# The key idea of this program is to equate the strings
# "rock", "paper", "scissors", "lizard", "Spock" to numbers
# as follows:
#
# 0 - rock
# 1 - Spock
# 2 - paper
# 3 - lizard
# 4 - scissors
# helper functions
import random
number2name = {0: "rock", 1: "Spock", 2: "paper", 3: "lizard", 4: "scissors"}
name2number = {"rock": 0, "Spock": 1, "paper": 2, "lizard": 3, "scissors": 4}
rule = {0: "Player and computer tie!", 1: "Player wins!",
2: "Player wins!", 3: "Computer wins!", 4: "Computer wins!"}
def name_to_number(name):
try:
number = name2number[name]
return number
except KeyError:
print "Sorry, your input is incorrect"
def number_to_name(number):
try:
name = number2name[number]
return name
except KeyError:
print "Sorry, your input is incorrect"
def rpsls(player_choice):
print "Player chooses", player_choice
player_number = name_to_number(player_choice)
comp_number = random.randrange(0, 5)
comp_choice = number_to_name(comp_number)
print "Computer chooses", comp_choice
value = (player_number - comp_number) % 5
try:
print rule[value]
except KeyError:
print "Sorry, your input is incorrect"
print "\n"
# test your code - THESE CALLS MUST BE PRESENT IN YOUR SUBMITTED CODE
rpsls("rock")
rpsls("Spock")
rpsls("paper")
rpsls("lizard")
rpsls("scissors")
# always remember to check your completed program against the grading rubric