@nurzhannogerbek

Алгоритм генерации букв из латинского алфавита?

Здравствуйте!

Есть модель данных под названием "Function". В модели Function есть поле "symbol".

При создании нового объекта, то есть новой записи пользователь через модельное окно вводит название (поле "name") функции, а поле "symbol" необходимо генерировать, а точнее создавать значение автоматически буквами из латинского алфавита по возрастанию и учитывать есть ли такой символ уже.

Внизу вы можете для наглядности удивить пример того, что именно должно получиться. На данный момент у меня получилось только сделать от A до Z и проверить есть ли функция с таким символом, а как дальше получать последующие значения не могу додумать. Помогите построить алгоритм.

Например:
A
B
-
Z
AA
AB
-
AZ
BA
BB
-
BZ
-
ZZ
AAA
AAB
и так далее


models.py:
class Function(models.Model):
    id= models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    name = models.CharField(max_length=250)
    symbol = models.TextField ()

    def __str__(self):
        return self.name


views.py:
if form.is_valid():
   for i in string.ascii_uppercase:  # (A-Z)
         if not Function.objects.filter(symbol=i, project=project_code).exists():
             function = form.save(commit=False)
             function.symbol = i
             function.save()
             break
  • Вопрос задан
  • 517 просмотров
Пригласить эксперта
Ответы на вопрос 2
Keanor
@Keanor
Ведущий разработчик
Напишите перевод из десятичной системы (есть же какой-нибудь autoincrement?) в 26-ричную, из нужных символов.
Ответ написан
@epolyak
Лучше всего хранить последнее значение symbol где то отдельно и обновлять его при при записи нового значения в очередную функцию.

Код не проверял, но мысль следующая:
class SymbolCode(models.Model):
    last_code = models.charfield(max....)

# у себя где то в коде
if form.is_valid():
    last_code = SymbolCode.objects.get(pk=1)
    code = last_code ... #как то обновляете код
    last_code.last_code = code
    last_code.save()
    ....
    function.symbol = code
    ....


Как генерировать code:
code = ""
strs = string.ascii_uppercase
l = len(strs)

for i in range(1, 100):
    ll = len(code)
    if ll == l:
        ll = 0
    elif ll > l:
        ll = ll // l
    code += strs[ll]
    print(code)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы