2013-07-28 33 views
0

我寫了一個腳本來打印彩票組合。我的目標是這樣的:在1-49之間的抽獎中有6個數字,意味着有13,983,816個組合。我想打印出所有IN INDER組合,同時確保沒有重複。Python - 所有彩票組合 - 沒有重複,爲了

這裏是我到目前爲止的代碼:

import random 
numbers = [] 
for i in range(2): 
    for j in range(6): 
     numbers.append(random.randint(1,49)) 
     for k in range(j): 
      while numbers[j]==numbers[k]: 
       numbers[j]=random.randint(1,49) 
    print sorted(numbers) 
    numbers = [] 
f = open('combinations.txt', 'w') 
f.write(str(sorted(numbers))) 

的問題是:

在終端的輸出是:

[18, 20, 27, 32, 44, 48] 
[5, 7, 10, 13, 33, 45] 

我想開始[1,2,3,4,5,6]和結束[44,45,46,47,48,49]。所以我需要訂購結果。

此外,我已經嘗試將列表轉換爲字符串,所以我可以把結果放在一個大的文本文件中,但我現在只是將[]打印到文本文件中。

回答

3

你被清除列表然後寫入文件。

from itertools import combinations 
f = open('combinations.txt', 'w') 
for comb in combinations(range(1,50), 6): 
    f.write(str(comb)) 
    f.write('\n') 
f.close() 

請確保您有可用磁盤空間至少350兆字節!和一些空閒時間。

(348168480字節的I與檢查:

>>> s = 0 
>>> for comb in combinations(range(1,50), 6): 
... s += len(repr(comb))+2 
... 
>>> s 
348168480 

)。

5

使用itertools.combinations

>>> from itertools import combinations 
>>> for comb in combinations(range(1,50), 6): 
...  print comb  #Hit Enter at your own risk 

有關打印組合到文本文件:

with open('combinations.txt', 'w') as f: 
    for comb in combination: 
     f.write(str(comb) + '\n') 
+0

哇,這真的很簡單。感謝Ashwini。不知道這樣的模塊存在。 – BubbleMonster

+0

我是否需要使用for循環將所有結果打印到txt文件? – BubbleMonster

+0

@BubbleMonster預期的格式是什麼? –

0
**import itertools 
f= open('combinations.txt','w') 
numb = [1,2,3,4,5,6,7] 
it = itertools.combinations(numb,3) 
for x in it: 
    f.write(str(x)) 
    f.write('\n') 
f.close()** 

你去那裏,只是添加儘可能多的數字麻木和其變量改變R的記者