john pfeiffer
  • Home
  • Categories
  • Tags
  • Archives

rpsls

# Rock-paper-scissors-lizard-Spock

import random

# 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

def number_to_name(number):
    if number == 0:
        name = 'rock'
    elif number == 1:
        name = 'Spock'
    elif number == 2:
        name = 'paper'
    elif number == 3:
        name = 'lizard'
    elif number == 4:
        name = 'scissors'
    else:
        name = None
    return name

def name_to_number(name):
    if name == 'rock':
        number = 0
    elif name == 'Spock':
        number = 1
    elif name == 'paper':
        number = 2
    elif name == 'lizard':
        number = 3
    elif name == 'scissors':
        number = 4
    else:
        number = None
    return number

# find_winner returns:
#     1 if first number wins,
#     2 if second number wins,
#     0 if it's a tie
def find_winner(first_number, second_number):
    modulo_five = (first_number - second_number) % 5
    if modulo_five > 2:
        winner = 2
    elif modulo_five > 0:
        winner = 1
    else:
        winner = 0
    return winner

def rpsls(player_name):
    player_number = name_to_number(player_name)
    comp_number = random.randrange(0, 5)
    comp_name = number_to_name(comp_number)
    winner = find_winner(player_number, comp_number)
    print "Player chooses", player_name
    print "Computer chooses", comp_name
    if winner == 1:
        print "Player wins!"
    elif winner == 2:
        print "Computer wins!"
    else:
        print "Player and computer tie!"
    print ""

if __name__ == '__main__':
    rpsls("rock")
    rpsls("Spock")
    rpsls("paper")
    rpsls("lizard")
    rpsls("scissors")

  • « rpsls pytest advanced test
  • rpsls pytest readme »

Published

Jan 25, 2013

Category

python

~185 words

Tags

  • python 180
  • rpsls 6