import random # Check that users have entered a valid # option based on a list def string_checker(question, valid_ans): # while True: error = f"please enter a valid option from following list: {valid_ans}" user_response = input(question).lower() for item in valid_ans: if item == user_response: return item elif user_response == item[0]: return item # print error if user does not enter something that valid print(error) print() def instructions(): print(''' πŸͺ¨πŸ“„βœ‚οΈ Instructions βœ‚οΈπŸ“„πŸͺ¨ To begin, choose the number of rounds (or infinite mode). Then, play against the computer. You need P (paper) or S (scissors). The rules are as follows: o Paper beats rock o Rock beats scissors o Scissors beats paper o Rock vs Rock tie o Scissors vs Scissors tie o Paper vs Paper tie o Type xxx to stop the game 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 infinity 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) # win lose or tie result def rps_compare(user, comp): # If the user and the computer choice 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 # Initialise game variables mode = "regular" rounds_played = 0 rounds_tied = 0 rounds_lost = 0 yes_no = ["yes", "no"] # Main Routine game_history = [] 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?", yes_no) # 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, rps list (excluding the exit code) comp_choice = random.choice(rps_list[:-1]) user_choice = string_checker("Choose: ", rps_list) print("you chose", user_choice) if user_choice == "xxx": break result = rps_compare(user_choice, comp_choice) # Adjust game lost / game tied counters and add results to game history if result == "tie": rounds_tied += 1 feedback = "πŸ‘”πŸ‘” It's a tie! πŸ‘”πŸ‘”" elif result == "lose": rounds_lost += 1 feedback = "😒😒 You lose 😒😒" else: feedback = "πŸ‘πŸ‘ You won. πŸ‘πŸ‘" # Set up round feedback and output it user. # Add it to the game history list (include the round number) round_feedback = f"{user_choice} vs {comp_choice}, {feedback}" history_item = f"Round: {rounds_played + 1} - {round_feedback}" print(round_feedback) game_history.append(history_item) # increase number of rounds played. 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 if rounds_played > 0: # Calculate Statistic rounds_won = rounds_played - rounds_tied - rounds_lost percent_won = rounds_won / rounds_played * 100 percent_lost = rounds_lost / rounds_played * 100 percent_tied = 100 - percent_won - percent_lost # Output Game Statistics print("πŸ“ŠπŸ“ŠπŸ“Š Game Statistics πŸ“ŠπŸ“ŠπŸ“Š") print(f"πŸ‘ Won: {percent_won:.2f}% \t " f"😒 Lost: {percent_lost:.2f}% \t " f"πŸ‘” Tied: {percent_tied:.2f}%") # Ask user if they want to see their game history and output it if requested. see_history = string_checker("\nDo you want to see your game history?", yes_no) if see_history == "yes": for item in game_history: print(item) print() print("Thanks for playing.") else: print("πŸ”πŸ”πŸ” Oops – You chickened out! πŸ”πŸ”πŸ”")