Создание уникального кодированного значения
У меня есть список существующих значений lockedCode = ['CODE001', 'CODE003', 'CODE005'], мне необходимо создать новые уникальные значения, которые отсутствуют в списке lockedCode. Я пытаюсь сделать через рекурсию, но результат не совсем такой какой хотелось бы.
Вот что я пытаюсь сделать:
def FindFreeCode(i, lockedCode):
code = "CODE" + str(i).zfill(3)
if code not in lockedCode:
lockedCode.append(code)
return i, code
else:
return FindFreeCode(i+1, lockedCode)
lockedCode = ['CODE001', 'CODE003', 'CODE005']
for i in range(1, 5):
code = FindFreeCode(i, lockedCode)[1]
i+=FindFreeCode(i, lockedCode)[0]
print code
На данный момент у меня получается следующий список [CODE002, CODE006, CODE008, CODE010]. Т.е. они уникальные, но идут не по порядку, а через несколько элементов.
А я ожидаю что то типо такого [CODE002, CODE004, CODE006, CODE007]
Ответы (1 шт):
code = FindFreeCode(i, lockedCode)[1]
i+=FindFreeCode(i, lockedCode)[0]
Вы тут два раза вызываете функцию FindFreeCode, теряя после первого вызова возвращаемый индекс, а во второй вызов - возвращаемый код (потому что функция в прошлый свой вызов уже добавила код к списку и не будет его добавлять ещё раз, а добавит уже новый код). Вот у вас коды через один и теряются. Нужно брать сразу оба значения, которые возвращает функция и всё будет нормально:
for i in range(1, 5):
i, code = FindFreeCode(i, lockedCode)
print(code)
Вывод:
CODE002
CODE004
CODE006
CODE007
P.S.
- Бесполезно что-то делать с переменной
iвнутри цикла, она всё-равно перезапишется на следующей итерации. print code- это формат вызоваprintво 2-й версииPython, а она уже не поддерживается