import random


def random_password(bit=12):
    """
    Generates a random password which include numbers, letters and special characters.
    """
    numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
    small_letters = [chr(i) for i in range(97, 123)]
    cap_letters = [chr(i) for i in range(65, 91)]
    special = ["@", "#", "$", "%", "^", "&", "*", "-"]

    passwords = []
    for i in range(int(bit / 4)):
        passwords.append(random.choice(numbers))
        passwords.append(random.choice(small_letters))
        passwords.append(random.choice(cap_letters))
        passwords.append(random.choice(special))
    for i in range(int(bit % 4)):
        passwords.append(random.choice(numbers))
        passwords.append(random.choice(small_letters))
        passwords.append(random.choice(cap_letters))
        passwords.append(random.choice(special))

        passwords = passwords[:bit]
    random.shuffle(passwords)
    return str("".join(passwords))