# 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 a word in the list # 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 instructions def instructions(): print(""" *** Instructions *** This is a math quiz that contains basic arithmetic questions. Although you may choose to include area questions if you wish to. You also may choose to include perimeter questions if you wish to. Each arithmetic question will use two random numbers and a random operator (+, -, * or /). For area and perimeter questions it will either be for a square or rectangle. The lengths and width will be displayed for rectangles, squares will display one side with a number Your goal is to answer each question correctly. How it works: • Choose how many questions you want to answer • You may choose if you want to include area questions or not. • For each round, a new maths question will appear. • Type your answer and press . • The quiz will tell you if you are correct or incorrect. • If you entered an incorrect answer, the correct answer will be displayed. • Your total score will be displayed at the end if you wish to see them. Rules: • Arithmetic numbers are between 2 and 12. • Area numbers are between 2 and 24. • Perimeter numbers are between 2 and 36. • If area questions are included there will be a 50% chance for an area question to appear each round. • If Perimeter questions are included there will be a 50% chance for a perimeter question to appear each round. • If both Perimeter and Area questions are included there will be a 33.3% chance for an each question to appear each round. • For area and perimeter questions you do not need to include units. • Division questions may produce decimal answers. • If an answer contains decimals it will be rounded to 1 dp. • You can exit the quiz at any time by typing 'xxx'. Good luck! """) # Main routine # ask the user if they want to see instructions and display # them if requested want_instructions = string_checker("Do you want to see instructions? ") # Display the instructions if the user wants to see them... if want_instructions == "yes": instructions() print() print("program continues")