import random # Check that users have entered a valid # option based on a list def string_checker(question, valid_ans=("yes", "no")): error = f"Please enter a valid option from the following list: {valid_ans}" while True: # get user response and make sure it's lowercase user_response = input(question).lower() for item in valid_ans: # check if the user response is a word in the list if item == user_response: return item # check if the user response is the same as # the first letter of an item in the list elif user_response == item[0]: return item # print error if user does not enter something that is valid print(error) print() # displays the instructions def instruction(): print('\n' '**** Instructions ****\n' '\n' 'To begin, choose the number of rounds (or infinite rounds)\n' ' \n' 'Hand Gestures:\n' '\n' 'Rock: is R\n' 'Paper: is P\n' 'Scissors: is S\n' '\n' 'Rules:\n' '\n' 'Rock beats Scissors (rock crushes scissors)\n' 'Scissors beats Paper (scissors cuts paper)\n' 'Paper beats Rock (paper covers rock)\n' '\n' 'Rock vs. Scissors: Rock wins.\n' 'Scissors vs. Paper: Scissors wins.\n' 'Paper vs. Rock: Paper wins.\n' 'Same gesture: It\'s a tie; play again.\n' '\n') # checks for an integer more than 0 (allows ) def int_check(question): while True: error = "please enter an integer that is 1 or more" to_check = input(question) # check for infinite mode if to_check == "": return "infinite" try: response = int(to_check) # checks that the number is more than / equal to 1 if response < 1: print(error) else: return response except ValueError: print(error) # Main routine starts here # Initialise game variables mode = "regular" rounds_played = 0 rps_list = ["rock", "paper", "scissors", "xxx"] print("๐Ÿ’Ž Rock / Paper / Scissors Game ๐Ÿ’Ž") print() # ask user if they want to see the instructions and display # them if requested want_instructions = string_checker("Do you want to read the instructions?") # checkers users enter yes (Y) or no (N) if want_instructions == "yes": instruction() # Ask user for number of rounds / infinite mode num_rounds = int_check("How many rounds would you like? Push for infinite mode: ") if num_rounds == "infinite": mode = "infinite" num_rounds = 5 # Game loop starts here while rounds_played < num_rounds: # Rounds heading if mode == "infinite": rounds_heading = f"\nโ“งโ“งโ“ง Round {rounds_played + 1} (Infinite Mode) โ“งโ“งโ“ง" else: rounds_heading = f"\n๐Ÿ“€๐Ÿ“€๐Ÿ“€ Round {rounds_played + 1} of {num_rounds} ๐Ÿ“€๐Ÿ“€๐Ÿ“€" print(rounds_heading) print() # get user choice user_choice = string_checker("Choose: ", rps_list) print("you chose", user_choice) # exit code for any game mode if user_choice == "xxx": break comp_choice = random.choice(rps_list[:-1]) rounds_played += 1 # if users are in infinite mode, increase number of rounds. if mode == "infinite": num_rounds += 1 # Game loop ends here # Game History / Statistics area