2017-04-03 72 views
1

有人可以帮助我创建算法。我有型号"Function"与字段"symbol"来自拉丁字母的字母的生成算法?

当用户创建新的函数对象系统时,需要从英文字母的字母中自动创建值为"symbol"的字段。现在我只做了从A到Z,没有重复记录字段值。

例如

A 
B 
- 
Z 
AA 
AB 
- 
AZ 
BA 
BB 
- 
ZZ 
AAA 
etc. 

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 

回答

1

让内置福nctions为你做无聊的工作。

我想你会用itertools.product()做得更好。创建发电机,只需拨打下一步()每当需要下一个组合时。如果你想从1个字母的字符串开始并从那里开始工作,那么将空格作为你的字母表的第一个元素;当你拿一个新的标签时,strip()在应用它之前出现空白。

+0

感谢您提供此信息。正如我从'itertools.product()'所理解的那样,我们需要设置位置的数量(n字母字符串)。我的意思是'重复'的论点。如果我需要无限数字,我需要做什么?你可以用例子来表达你的想法,我可以稍微抱怨一下。 –

+0

如果您需要任意大小,那么我建议您编写一个包装生成器:一个以** repeat == 1 **开头并根据需要循环更高的数字。但是,我怀疑实际上,您可以设置足够大的上限以满足您的实际需求。 – Prune