def int_check(question, low , high): """checks user enter an integer / foat that is more than zero""" error = f"opps - please enter an interger between {low} and {high}." while True: try: # changing the responce to an integer and check that it is more than 0 response = int (input(question)) if low <= response <= high: return response else: print(error) except ValueError: print (error) def not_blank(question): """checks that the users reponce is not blank""" while True: response = input(question) if response !="": return response print("Sorry, this cant be blank. please try again.\n") def string_check(question, valid_ans_list=('yes', 'no'), num_letter=1): """checks the users enter the full word or the first letter of a word from a list of responces""" while True: response = input(question).lower() for item in valid_ans_list: #checks if the response is the entire word if response == item: return item #checks if the responce is the first letter elif response == item [:num_letter]: return item print(f"please choose an option from {valid_ans_list}") #main routine gose here #intialise variables / non-default options for string checker payment_ans = ('cash', 'credit') #loop for testing while True: print() name= not_blank("name: ") age = int_check("Age: ") if age <12: print(f"{name} is too young") continue elif age >120: print(f"{name} is to old") continue else: pass payment_method = string_check("paymentmethod:",payment_ans,2) print(f"{name} has bought a ticket({payment_method})")