Rock Paper Scissors

\[ \begin{align}\begin{aligned}\newcommand\blank{~\underline{\hspace{1.2cm}}~}\\% Bold symbols (vectors) \newcommand\bs[1]{\mathbf{#1}}\\% Poor man's siunitx \newcommand\unit[1]{\mathrm{#1}} \newcommand\num[1]{#1} \newcommand\qty[2]{#1~\unit{#2}}\\\newcommand\per{/} \newcommand\squared{{}^2} % % Scale \newcommand\milli{\unit{m}} \newcommand\centi{\unit{c}} \newcommand\kilo{\unit{k}} \newcommand\mega{\unit{M}} % % Angle \newcommand\radian{\unit{rad}} \newcommand\degree{\unit{{}^\circ}} % % Time \newcommand\second{\unit{s}} % % Distance \newcommand\meter{\unit{m}} \newcommand\m{\meter} \newcommand\inch{\unit{in}} \newcommand\feet{\unit{ft}} \newcommand\mile{\unit{mi}} \newcommand\mi{\mile} % % Volume \newcommand\gallon{\unit{gal}} % % Mass \newcommand\gram{\unit{g}} \newcommand\g{\gram} % % Frequency \newcommand\hertz{\unit{Hz}} \newcommand\rpm{\unit{rpm}} % % Voltage \newcommand\volt{\unit{V}} \newcommand\V{\volt} \newcommand\millivolt{\milli\volt} \newcommand\mV{\milli\volt} \newcommand\kilovolt{\kilo\volt} \newcommand\kV{\kilo\volt} % % Current \newcommand\ampere{\unit{A}} \newcommand\A{\ampere} \newcommand\milliampereA{\milli\ampere} \newcommand\mA{\milli\ampere} \newcommand\kiloampereA{\kilo\ampere} \newcommand\kA{\kilo\ampere} % % Resistance \newcommand\ohm{\Omega} \newcommand\milliohm{\milli\ohm} \newcommand\kiloohm{\kilo\ohm} % correct SI spelling \newcommand\kilohm{\kilo\ohm} % "American" spelling used in siunitx \newcommand\megaohm{\mega\ohm} % correct SI spelling \newcommand\megohm{\mega\ohm} % "American" spelling used in siunitx % % Inductance \newcommand\henry{\unit{H}} \newcommand\H{\henry} \newcommand\millihenry{\milli\henry} \newcommand\mH{\milli\henry} % % Temperature \newcommand\celsius{\unit{^{\circ}C}} \newcommand\C{\unit{\celsius}} \newcommand\fahrenheit{\unit{^{\circ}F}} \newcommand\F{\unit{\fahrenheit}} \newcommand\kelvin{\unit{\K}} \newcommand\K{\unit{\kelvin}}\\% Power \newcommand\watt{\unit{W}} \newcommand\W{\watt} \newcommand\milliwatt{\milli\watt} \newcommand\mW{\milli\watt} \newcommand\kilowatt{\kilo\watt} \newcommand\kW{\kilo\watt} % % Torque \newcommand\ozin{\unit{oz}\text{-}\unit{in}} \newcommand\newtonmeter{\unit{N\text{-}m}}\end{aligned}\end{align} \]

Apr 16, 2025 | 447 words | 4 min read

6.2.2. Rock Paper Scissors#

Write a program that lets the user play a game of Rock, Paper, Scissors against the computer. The program should work as follows:

  1. When the program begins, the computer chooses either ‘rock’, ‘paper’, or ‘scissors’ at random. (Don’t display the computer’s choice yet.) This step should be implemented using a function named get_computer_choice that takes no arguments and returns the computer’s choice as a string, either ‘rock’, ‘paper’, or ‘scissors’.

  2. Then the user is asked to make their choice, either ‘rock’, ‘paper’, or ‘scissors’. If the user enters an invalid choice they should be asked to try again until they enter a valid choice. This step should be implemented using a function named get_player_choice that takes no arguments and returns the player’s valid choice as a string, either ‘rock’, ‘paper’, or ‘scissors’.

  3. Once both players have chosen, their choices are displayed.

  4. Next a winner is selected according to the following rules:

    • If one player chooses rock and other player chooses scissors, then rock wins (rock smashes scissors).

    • If one player chooses scissors and the other player choose paper, then scissors wins (scissors cut paper).

    • If one player chooses paper and the other play chooses rock, then paper wins (paper wraps rock). If both players make the same choice, the game is played again to determine the winner.

    This step should be implemented using a function named get_winner that takes the computer’s choice as its first argument, and the player’s choice as its second argument. Both arguments should be strings. The function should return the winner as a string, either ‘computer’, ‘player’, or ‘tie’.

  5. Finally, the program should display the results of the contest. If it is a tie, the match should continue until one player wins.

Sample Output#

Use the values in Table 6.3 below to test your program.

Table 6.3 Test Cases#

Case

Choice

1

paper

2

scissors, rock, rock

3

rrock, rock, scissors

Ensure your program’s output matches the provided samples exactly. This includes all characters, white space, and punctuation. In the samples, user input is highlighted like this for clarity, but your program should not highlight user input in this way.

Case 1 Sample Output

$ python3 rock_paper_scissors_login.py Choose rock, paper, or scissors: paper The computer chose rock, and you chose paper. paper beats rock You won the game! Thanks for playing.

Case 2 Sample Output

$ python3 rock_paper_scissors_login.py Choose rock, paper, or scissors: scissors The computer chose scissors, and you chose scissors. It's a tie. Starting over.

Choose rock, paper, or scissors: rock The computer chose rock, and you chose rock. It's a tie. Starting over.

Choose rock, paper, or scissors: rock The computer chose paper, and you chose rock. paper beats rock You lost. Better luck next time. Thanks for playing.

Case 3 Sample Output

$ python3 rock_paper_scissors_login.py Choose rock, paper, or scissors: rrock You made an invalid choice. Please try again. Choose rock, paper, or scissors: rock The computer chose rock, and you chose rock. It's a tie. Starting over.

Choose rock, paper, or scissors: scissors The computer chose paper, and you chose scissors. scissors beats paper You won the game! Thanks for playing.

Deliverables#

Save your finished program as rock_paper_scissors_login.py, replacing login with your Purdue login. Then submit it along with all the deliverables listed in Table 6.4 below.

Table 6.4 Deliverables#

Deliverable

Description

rock_paper_scissors_login.py

Your finished program.

Screenshot(s)

PNG(s) capturing all 3 test cases.