import random from symbol import return_stmt # check that users have entered a valid # option based on a list def string_checker(question, valid_ans=('yes', 'no')): while True: error = f"Please enter a valid option from the following list: {valid_ans}" # 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 valid print(error) print() def instructions(): """Prints instructions""" print(""" *** Instructions *** To begin, choose the number of rounds (or press for infinite mode). Then play against the computer. You choose R (rock), P (paper) or S (scissors). The rules are as follows: o Paper beats rock o Rock beats scissors o scissors beats paper Good luck! """) # check that users have entered a valid def int_check(question): while True: error = "Please enter and 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 13 if response < 1: print(error) else: return response except ValueError: print(error) def rps_compare(user, comp): # if the user and the computer is the same, it's a tie if user == comp: round_result = "tie" # there are three ways to win elif user == "paper" and comp == "rock": round_result = 'win' elif user == "scissors" and comp == "paper": round_result = 'win' elif user == "rock" and comp == "scissors": round_result = 'win' # if it's not a win / tie, then it's a loss else: round_result = "lose" return round_result # Main routine Stars here # Intialise game variables mode = "regular" round_played = 0 rounds_tied = 0 round_lost = 0 rps_list = ["rock", "paper", "scissors", "xxx"] game_history = [] print("πŸ’ŽπŸ“βœ‚οΈRock / Paper / Scissors Game βœ‚οΈπŸ“πŸ’Ž") print() # ask the user if they want instructions (check they say yes / no) want_instructions = string_checker("do you want to see the instructions? ") # Display the instructions if the user wants to see them... if want_instructions == "yes": instructions() # Ask user for number of rounds / infinite mde 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 round_played < num_rounds: # Rounds headings if mode == "infinite": rounds_heading = f"\n∞ ∞ ∞ Round {round_played + 1} (infinite Mode) ∞ ∞ ∞" else: rounds_heading =f"\nπŸ’ΏπŸ’ΏπŸ’Ώ Round {round_played + 1} of {num_rounds} πŸ’ΏπŸ’ΏπŸ’Ώ" print(rounds_heading) # generate a random integer between 0 and 10 random_integer = random.randint(0, 10) random_integer2 = random.randint(0, 10) answer = random_integer * random_integer2 def string_checker(question, valid_ans=('yes', 'no')): while True: try: user_ans = int(input(f'What is {random_integer} times {random_integer2}? ')) if user_ans == answer: print('correct') else: print(f'incorrect, {random_integer} times {random_integer2} equals {answer}') error = f"Please enter a valid option from the following list: {valid_ans}" # 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 valid print(error) print() round_played += 1 # if users are in infinite mode, increase number of rounds! if mode == "infinite": num_rounds += 1