2017-04-03 70 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