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 the user does not enter something that is valid print(error) print() # Displays instructions def instructions(): """Prints instructions""" print(""" *** Instructions *** To begin, choose the number of questions that you want (or press for infinite mode). Then, you will be asked what a power or square root of a number equals. Enter your answer and ensure that it's rounded to two decimal places (please be very careful with your rounding). At the end of the quiz, you will be provided with your score. Try and improve upon your previous score when you play. Press to end the game at anytime. Good luck! """) # 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 number is more than / equal to 1 if response < 1: print(error) else: return response except ValueError: print(error) # compares user / computer choice and returns # result (win / lose / tie) def rps_compare(user, comp): # If the user and the computer choice is the same, it's a tie if user == comp: result = "tie" # There are three ways to win elif user == "paper" and comp == "rock": result = "win" elif user == "scissors" and comp == "paper": result = "win" elif user == "rock" and comp == "scissors": result = "win" # if it's not a win / tie, then it's a loss else: result = "lose" return result # 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 the user if they want to see the instructions and display # them if requested want_instructions = string_checker("Do you want to read the instructions? ") # checks users enter yes (y) or no (n) if want_instructions == "yes": instructions() # 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 headings (based on mode) 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) # randomly choose from the rps list (excluding the exit code) comp_choice = random.choice(rps_list[:-1]) print("Computer choice", comp_choice) # get user choice user_choice = string_checker("Choose: ", rps_list) print("you chose", user_choice) # check if user choice is the exit code if user_choice == "xxx": break result = rps_compare(user_choice, comp_choice) print(f"{user_choice} vs {comp_choice}, {result}") rounds_played += 1 # if the users are inb infinite mode, increase number of rounds! if mode == "infinite": num_rounds += 1 # Game loop ends here # Game History / Statistics area