# Functions go here def make_statement(statement, decoration, lines=1): """Creates headings (3 lines), subheadings (2 lines), and emphasized text / mini headings (1 line). Only use emoji for single line statements""" middle = f"{decoration * 3} {statement} {decoration * 3}" top_bottom = decoration * len(middle) if lines == 1: print(middle) elif lines == 2: print(middle) print(top_bottom) else: print(top_bottom) print(middle) print(top_bottom) 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(''' For each ticket holder enter... - Their Name - Their Age - Their Payment Method (Cash/Credit) The Program will record the ticket sale and calculate the ticket cost (and the profit) Once you have either dold all of the tickets or entered the exit code('xxx'), the program will display the ticket sales information and write the data to a text file. It will also choose one lucky ticket holder who wins the draw (their ticket is free). ''') def int_check(question): """Checks users enter an integer that is more than zero (or the optional exit code)""" error = "Oops - please enter an integer more than zero." while True: try: # return the response if it's an integer response = int(input(question)) return response except ValueError: print(error) 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") # main # initialise ticket numbers MAX_TICKETS = 5 tickets_sold = 0 # initialising variables / 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 loop if name == "xxx": break # output error message / success message if age < 12: print("Sorry, you are too young for this movie") continue elif age > 120: print("Have you made a typo?") continue else: pass # ask user for payment method cash or credit pay_method = string_check("Payment method: ", payment_ans, 2) print(f"{name} 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. x") else: print(f"You have sold {tickets_sold} / {MAX_TICKETS} tickets. ")