Python Program
This Python program uses patterns, modes, and randomization to beat the player. It improves the odds of the computer winning but chance is always a factor in a game of Rock Paper Scissors. So may the odds be in your favor!
#imports
import random
from statistics import mode
#lists
possible_options = ["rock", "paper", "scissors"]
historical_user_choices = []
#win_records
record_of_wins = []
user_wins = 0
computer_wins = 0
#user_win_lose_rate
def user_win_lose_rate(user_wins,computer_wins):
output = (user_wins/(computer_wins+user_wins))*100 if (computer_wins+user_wins) != 0 else 0
rounded_output = format(output, ".2f")
return rounded_output
#computer_win_lose_rate
def computer_win_lose_rate(user_wins,computer_wins):
output = (computer_wins/(computer_wins+user_wins))*100 if (computer_wins+user_wins) != 0 else 0
rounded_output = format(output, ".2f")
return rounded_output
#computer choice based on user inputs
def bestcounter(historical_user_choices,record_of_wins):
possible_options = ["rock", "paper", "scissors"]
probabilities = []
if record_of_wins[-3:] == ['user','user','user']:
bestcounter = random.choice(possible_options)
return bestcounter
elif historical_user_choices[-1] == historical_user_choices[-2]:
if historical_user_choices[-1] == 'rock':
bestcounter = random.choice(['rock','paper'])
return bestcounter
elif historical_user_choices[-1] == 'paper':
bestcounter = random.choice(['scissors','paper'])
return bestcounter
elif historical_user_choices[-1] == 'scissors':
bestcounter = random.choice(['rock','scissors'])
return bestcounter
else:
pass
else:
for i in possible_options:
probabilities.append(historical_user_choices[-9:].count(i)/len(historical_user_choices[-9:]))
expected_user_choice = random.choices(possible_options, weights=probabilities)[0]
if expected_user_choice == "rock":
bestcounter = "paper"
return bestcounter
elif expected_user_choice == "paper":
bestcounter = "scissors"
return bestcounter
elif expected_user_choice == "scissors":
bestcounter = "rock"
return bestcounter
else:
pass
#startup
again = "y"
round = 1
#game process (game by game)
while again == "y":
if round == 1:
print('Welcome to Rock, Paper, Scissors!\n')
print(f'\nRound #{round}')
user_choice = input("What do you choose? (Rock, Paper, Scissors) ").lower()
if user_choice.lower() == 'r':
user_choice = "rock"
elif user_choice.lower() == 'p':
user_choice = "paper"
elif user_choice.lower() == 's':
user_choice = "scissors"
else:
pass
historical_user_choices.append(user_choice)
computer_choice = random.choice(possible_options)
round += 1
elif round <= 9:
print(f'\nRound #{round}')
user_choice = input("What do you choose? (Rock, Paper, Scissors) ").lower()
if user_choice.lower() == 'r':
user_choice = "rock"
elif user_choice.lower() == 'p':
user_choice = "paper"
elif user_choice.lower() == 's':
user_choice = "scissors"
else:
pass
historical_user_choices.append(user_choice)
computer_choice = random.choice(possible_options)
round += 1
else:
print(f'\nRound #{round}')
round += 1
user_choice = input("What do you choose? (Rock, Paper, Scissors) ").lower()
if user_choice.lower() == 'r':
user_choice = "rock"
elif user_choice.lower() == 'p':
user_choice = "paper"
elif user_choice.lower() == 's':
user_choice = "scissors"
else:
pass
computer_choice = bestcounter(historical_user_choices,record_of_wins)
historical_user_choices.append(user_choice)
if user_choice == "rock":
print("You chose Rock!")
print(f"Computer chose {computer_choice.capitalize()}!")
if computer_choice == user_choice:
print("It is a tie!\n")
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
if computer_choice == "rock":
if user_choice == "paper":
print("Paper covers rock! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
print("Rock smashes scissors! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
elif computer_choice == "paper":
if user_choice == "rock":
print("Paper covers rock! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
print("Scissors cut paper! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
elif computer_choice == "scissors":
if user_choice == "rock":
print("Rock smashes scissors! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
print("Scissors cut paper! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
pass
elif user_choice == "paper":
print("You chose Paper!")
print(f"Computer chose {computer_choice.capitalize()}!")
if computer_choice == user_choice:
print("It is a tie!\n")
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
if computer_choice == "rock":
if user_choice == "paper":
print("Paper covers rock! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
print("Rock smashes scissors! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
elif computer_choice == "paper":
if user_choice == "rock":
print("Paper covers rock! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
print("Scissors cut paper! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
elif computer_choice == "scissors":
if user_choice == "rock":
print("Rock smashes scissors! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
print("Scissors cut paper! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
elif user_choice == "scissors":
print("You chose Scissors!")
print(f"Computer chose {computer_choice.capitalize()}!")
if computer_choice == user_choice:
print("It is a tie!\n")
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
if computer_choice == "rock":
if user_choice == "paper":
print("Paper covers rock! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
print("Rock smashes scissors! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
elif computer_choice == "paper":
if user_choice == "rock":
print("Paper covers rock! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
print("Scissors cut paper! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
elif computer_choice == "scissors":
if user_choice == "rock":
print("Rock smashes scissors! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
print("Scissors cut paper! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
again = input("""Play again? (Y/N) or Enable Auto-Play (Type "Auto") """).lower()
else:
print("Invalid, try again.")
while again == 'auto':
print('\n\nAuto-Play enabled! Rounds will automatically continue.\n')
break
#game process (auto play)
while again == "auto":
if round == 1:
print('Welcome to Rock, Paper, Scissors!\n')
print(f'\nRound #{round}')
user_choice = input("What do you choose? (Rock, Paper, Scissors) ").lower()
if user_choice.lower() == 'r':
user_choice = "rock"
elif user_choice.lower() == 'p':
user_choice = "paper"
elif user_choice.lower() == 's':
user_choice = "scissors"
else:
pass
historical_user_choices.append(user_choice)
computer_choice = random.choice(possible_options)
round += 1
elif round <= 9:
print(f'\nRound #{round}')
user_choice = input("What do you choose? (Rock, Paper, Scissors) ").lower()
if user_choice.lower() == 'r':
user_choice = "rock"
elif user_choice.lower() == 'p':
user_choice = "paper"
elif user_choice.lower() == 's':
user_choice = "scissors"
else:
pass
historical_user_choices.append(user_choice)
computer_choice = random.choice(possible_options)
round += 1
else:
print(f'\nRound #{round}')
round += 1
user_choice = input("What do you choose? (Rock, Paper, Scissors) ").lower()
if user_choice.lower() == 'r':
user_choice = "rock"
elif user_choice.lower() == 'p':
user_choice = "paper"
elif user_choice.lower() == 's':
user_choice = "scissors"
else:
pass
computer_choice = bestcounter(historical_user_choices,record_of_wins)
historical_user_choices.append(user_choice)
if user_choice == "rock":
print("You chose Rock!")
print(f"Computer chose {computer_choice.capitalize()}!")
if computer_choice == user_choice:
print("It is a tie!\n")
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
if computer_choice == "rock":
if user_choice == "paper":
print("Paper covers rock! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
print("Rock smashes scissors! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
elif computer_choice == "paper":
if user_choice == "rock":
print("Paper covers rock! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
print("Scissors cut paper! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
elif computer_choice == "scissors":
if user_choice == "rock":
print("Rock smashes scissors! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
print("Scissors cut paper! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
pass
elif user_choice == "paper":
print("You chose Paper!")
print(f"Computer chose {computer_choice.capitalize()}!")
if computer_choice == user_choice:
print("It is a tie!\n")
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
if computer_choice == "rock":
if user_choice == "paper":
print("Paper covers rock! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
print("Rock smashes scissors! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
elif computer_choice == "paper":
if user_choice == "rock":
print("Paper covers rock! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
print("Scissors cut paper! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
elif computer_choice == "scissors":
if user_choice == "rock":
print("Rock smashes scissors! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
print("Scissors cut paper! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
elif user_choice == "scissors":
print("You chose Scissors!")
print(f"Computer chose {computer_choice.capitalize()}!")
if computer_choice == user_choice:
print("It is a tie!\n")
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
if computer_choice == "rock":
if user_choice == "paper":
print("Paper covers rock! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
print("Rock smashes scissors! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
elif computer_choice == "paper":
if user_choice == "rock":
print("Paper covers rock! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
print("Scissors cut paper! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
elif computer_choice == "scissors":
if user_choice == "rock":
print("Rock smashes scissors! You win!\n")
user_wins += 1
record_of_wins.append('user')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
print("Scissors cut paper! Computer wins!\n")
computer_wins += 1
record_of_wins.append('computer')
print(f"User Wins: {user_wins}({user_win_lose_rate(user_wins,computer_wins)}%)\nComputer Wins: {computer_wins}({computer_win_lose_rate(user_wins,computer_wins)}%)\n")
else:
print("Invalid, try again.")
while again != "auto" or "y":
print("\nGame Ended. Good Game!")
break
Press Run to start or restart the program.
Use text inputs to interact with the game.
You may type full words (Rock, rock, ROCK) or simply letters (r).