Не работает код для генерации новых значений, которых нет в списке

Ранее я задавал вопрос - ссылка, мне нужно было сгенерировать значение которого нет в списке, спустя немного времени я разобрался и получал абсолютно новый ключ без всяких ошибок с помощью этого кода:

def generateKeyForNewCategory():
    categories_Keys = ['41', '42'] # тут существующие ключи

    for _ in categories_Keys:
        random_category_key = str(randint(41, 43))
        if random_category_key not in categories_Keys:
            new_category_key = random_category_key
            return new_category_key

Сегодня я попытался использовать ещё раз свой код, только уже в другом файле, спустя несколько генераций, я получаю заместо ключа None, я не могу понять в чем проблема или ошибка, так как это абсолютно идентичный код, который я использовал в прошлый раз.

введите сюда описание изображения


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

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

я получаю заместо ключа None

Это связано с тем, что вы в if random_category_key not in categories_Keys: проверяете значение, удволетворяющее условию, но если это не так, то ничего не происходит.

Добавьте в конце функции условие для повторного вызова функции (сделайте рекурсию):

if random_category_key not in categories_Keys:
    ...
else:
    return generateKeyForNewCategory()
→ Ссылка
Автор решения: CrazyElf

Обычно такие вещи делают в "бесконечном цикле" пока не выполнится условие выхода:

def generateKeyForNewCategory():
    categories_Keys = ['41', '42'] # тут существующие ключи

    while True:
        random_category_key = str(randint(41, 43))
        if random_category_key not in categories_Keys:
            new_category_key = random_category_key
            return new_category_key

А у вас получается, что если два раза выпало значение из списка, то цикл заканчивается, и функция тоже заканчивается, ничего не вернув, а значит питон считает, что функция вернула None.

→ Ссылка