Password Generator

import random
import string

def generate_password(length=12, use_uppercase=True, use_lowercase=True, use_digits=True, use_symbols=True):
    """Generate a secure random password based on user preferences."""
    characters = ''
    
    if use_uppercase:
        characters += string.ascii_uppercase
    if use_lowercase:
        characters += string.ascii_lowercase
    if use_digits:
        characters += string.digits
    if use_symbols:
        characters += string.punctuation

    if not characters:
        raise ValueError("At least one character type must be selected!")

    password = ''.join(random.choice(characters) for _ in range(length))
    return password

if __name__ == "__main__":
    print("--- Password Generator ---")
    length = int(input("Enter desired password length (default is 12): ") or 12)
    use_uppercase = input("Include uppercase letters? (y/n, default is y): ").strip().lower() != 'n'
    use_lowercase = input("Include lowercase letters? (y/n, default is y): ").strip().lower() != 'n'
    use_digits = input("Include digits? (y/n, default is y): ").strip().lower() != 'n'
    use_symbols = input("Include symbols? (y/n, default is y): ").strip().lower() != 'n'

    try:
        generated_password = generate_password(length, use_uppercase, use_lowercase, use_digits, use_symbols)
        print(f"Generated Password: {generated_password}")
    except ValueError as e:
        print(e)