# Functions go here def make_statement(statement, decoration): """Emphasises headings by adding decoration at the start and end""" print(f"{decoration * 3} {statement} {decoration * 3}") def string_check(question, valid_answers=('yes', 'no'), num_letters=1): """Checks that users enter the full word or the 'n' letter/s of a word from a list of valid responses""" while True: response = input(question).lower() for item in valid_answers: # check if the response is the entire word if response == item: return item # check if it's the "n" letters elif response == item[:num_letters]: return item print(f"Please choose an option from {valid_answers}") def instructions(): make_statement("Instructions", "ℹ️") print(''' Instructions blah blah blah ''') def not_blank(question): """Checks that a user response is not blank""" while True: response = input(question) if response != "": return response print("Sorry this can't be blank. Please try again. \n") def int_check(question): """Checks users enter an integer""" error = "Oops - please enter an integer more than zero" while True: try: # change the response to an integer that it's more than zero response = int(input(question)) return response except ValueError: print(error) # Main routine goes here # Initialise ticket numbers MAX_TICKETS = 5 tickets_sold = 0 # initialise varibles / non-default options for string checker payment_ans = ('cash', "credit") make_statement("Mini-Movie Fundraiser Program", "🍿") print() want_instructions = string_check("Do you want to see the instructions? ") if want_instructions == "yes": instructions() print() while tickets_sold < MAX_TICKETS: # ask user for their name (and check it's not blank) print() name = not_blank("Name: ") # if name is exit code, break out of loop if name == "xxx": break # Ask for their age and check its between 12 and 120 age = int_check("Age: ") # Output error message / success message if age < 12: print(f"Sorry,you are too young for this movie") continue elif age > 120: print(f"?? That looks like a typo (too old)") continue else: # as user for payment method (cash / credit / ca / cr) pay_method = string_check("Payment method: ", payment_ans, 2) print(f" {name} has bought a ticket ({pay_method})") tickets_sold += 1 if tickets_sold == MAX_TICKETS: print(f"You have sold all the tickets (ie: {MAX_TICKETS} tickets") else: print(f"You have sold {tickets_sold} / {MAX_TICKETS} tickets.")