Как разделить текст знаком тире и ограничить количество знаков?

Подскажите, как разделить пароль знаком тире для лучшей читабельности пароля и ограничить количество знаков.

например:

q34sf2-As5Aer-56Q2rq
def password(): # Формат пароля
    for n in range(int(number_entry.get())):
        password = ' '
        global x
        x += 1
        for i in range(int(length_entry.get())):
            password += secrets.choice(chars)
        if x <= 9:
            calculated_text.insert(
                END, "Пароль" + '  ' + str(x) + ': ' + password  + "\n")
        else:
            calculated_text.insert(
                END, "Пароль" + ' ' + str(x) + ': ' + password + "\n")

Ответы (1 шт):

Автор решения: gil9red

Накидал такой алгоритм, попробуйте:

text = "q34sf2As5Aer56Q2rq"

piece_len = 6
new_text = '-'.join(
    text[i: i+piece_len]
    for i in range(0, len(text), piece_len)
)
print(new_text)
# q34sf2-As5Aer-56Q2rq

Для удобства использования оборачиваем в функцию:

def get_pretty_password(password: str, piece_len=6) -> str:
    return '-'.join(
        password[i: i + piece_len]
        for i in range(0, len(password), piece_len)
    )

text = "q34sf2As5Aer56Q2r"
new_text = get_pretty_password(text)
print(new_text)

print(get_pretty_password(text, piece_len=5))

Для ограничения длины пароля, можно сделать так:

max_len = 12

text = "q34sf2As5Aer56Q2rq"
text = text[:max_len]
→ Ссылка