Mar-26-2023, 07:43 PM
(Mar-26-2023, 07:20 PM)deanhystad Wrote: You are checking at the wrong time. Tell the user what they can enter and force them to enter values that are correct.
def get_number(prompt, range=None): """Force user to input number. If range provided, input must be in range.""" while True: try: value = int(input(prompt)) if not range or range[0] <= value <= range[1]: return value print("Invalid input. Try again") except ValueError: print("Invalid input. Try again") MAX_LENGTH = 30 MIN_LENGTH = 8 remaining = MAX_LENGTH - 2 # at least 1 lettter, number and special character special = get_number(f"How many special characters (1-{remaining}): ", (1, remaining)) remaining = remaining - special + 1 if remaining > 2: numbers = get_number(f"How many numbers (1-{remaining}): ", (1, remaining)) else: numbers = 1 remaining = remaining - numbers + 1 if remaining > 1: min_letters = max(1, MIN_LENGTH - (special + numbers)) letters = get_number(f"How many letters ({min_letters}-{remaining}): ", (min_letters, remaining)) else: letters = 1 print(letters, numbers, special)To answer your question, you could do something like this:
def check(*args): """Force all args to be at least 1""" return [max(1, arg) for arg in args]
Thank you very much.