def int_check(question): error = "Oops - please enter an integer." while True: try: response = int(input(question)) return response except ValueError: print(error) def not_blank(question): while True: response = input(question).strip() if response != "": return response print("Sorry, this can't be blank. Please try again.\n") def string_check(question, valid_ans_list=('yes', 'no'), num_letters=1): while True: response = input(question).lower() for item in valid_ans_list: if response == item: return item elif response == item[:num_letters]: return item print(f"Please choose an option from {valid_ans_list}") payment_ans = ('cash', 'credit') c_price = 7.50 a_price = 10.50 s_price = 6.50 credit_sur = 0.05 while True: print() name = not_blank("Name: ") age = int_check("Age: ") if age < 12: print(f"{name} is too young.") continue elif 12 <= age < 16: ticket_price = c_price elif 16 <= age < 65: ticket_price = a_price elif 65 <= age < 121: ticket_price = s_price else: print(f"{name} is too old.") continue pay_method = string_check("Payment method (cash/credit): ", payment_ans, num_letters=2) if pay_method == "cash": sur = 0 else: sur = ticket_price * credit_sur total_to_pay = ticket_price + sur print(f"{name}'s ticket cost ${ticket_price:.2f}, they paid by {pay_method}" f" so the surcharge is ${sur:.2f}\n" f"The total payable is ${total_to_pay:.2f}\n")