@Panda_Code
Сognizer

Почему срабатывает бесконечный цикл?

def passwd(length: int, difficult: int) -> List:
    # импортируем модуль для генерации случайных чисел
    import random
    # создаем кортежи из букв, символов и цифр
    chars: tuple = ('a', 'b', 'c', 'd',
                    'e', 'f', 'g', 'h',
                    'i', 'j', 'k', 'l',
                    'm', 'n', 'o', 'p',
                    'q', 'r', 's', 't',
                    'u', 'v', 'w', 'x',
                    'y', 'z')
    symbols: tuple = ('@', '$', '?', '#', '&')
    nums: tuple = tuple(range(10))
    # создаем пароль в зависимости от уровня сложности
    parole = []
    if difficult == 1:
        while len(parole) != length:  # length - длина пароля
            i = random.randrange(len(chars) - 1)  # диапазон кортежа - 1
            parole.append(chars[i])
            parole.append(chars[i].upper())  # если убрать эту строку, то цикл работает верно
    return parole


print(passwd(3, 1))

Не пойму, почему так происходит.
  • Вопрос задан
  • 73 просмотра
Решения вопроса 2
tumbler
@tumbler Куратор тега Python
бекенд-разработчик на python
Если вы по два символа добавляете, вы нечетную длину пароля никогда не словите.
Ответ написан
@erik_mikoyan
Самопровозглашенный программист
Цикл бесконечный из-за того, что вы добавляете 2 элемента, и поэтому длина пароля никогда не равняется 3-м. Самое простое и логичное решение — заменить условие len(parole) != length на
len(parole) <= length
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы