def required(label): value = input(f'{label}: ').strip() if value: print() return value else: return required(label) def multi_line(label): lines = '' print(f'{label}, type [end] to finish:\n') while True: value = input() if value.strip() == '[end]': break elif value.strip(): lines += f'{value.strip()}\n' print() return lines.strip() def optional(label): value = input(f'{label} (optional): ').strip() print() return value def non_empty_list(label): value = input(f'{label} (separated by commas): ') values = [x.strip() for x in value.split(',') if x.strip()] if len(values) > 0: print() return values else: return non_empty_list(label) def integer(label): value = input(f'{label}: ').strip() if value.isdigit(): print() return int(value) else: return integer(label) def choices(label, xs): pp_choices = '/'.join(xs) value = input(f'{label} [{pp_choices}] ') if value in xs: print() return value else: return choices(label, xs) def confirm(message): if choices(message, ['y', 'n']) == 'n': print('\nStopping.') exit(1)