第一個問題是你不想排列。排列不包括重複項(即每個骰子滾動不同的數字)。沒有10個擲骰子的排列組合。
這應該改爲product
(如果要計算(1,1,1,1,1,2)
和(1,1,1,1,2,1)
的不同)或combinations_with_replacement
(如果不這樣做)。我假設後者*。
然後,有一個語法錯誤的位置:
if sum(i) == m
yield perms
應該有一個冒號和縮進塊。此外,它應該可能產生電流項(i
):
if sum(i) == m:
yield i
這什麼也不做,因爲函數無論如何都會完成:
else:
return
因此,該功能的固定的版本將是:
def subsets(n,m):
perms = itertools.combinations_with_replacement(dice, n)
for i in perms:
if sum(i) == m:
yield i
當然,這可以被簡化爲:
def subsets(n,m):
return (p for p in itertools.combinations_with_replacement(dice,n) if sum(p) == m)
*請注意,product
,subsets(10,35)
產量4395456個結果,而使用combinations_with_replacement
你得到141個結果。
在'if'後面加上一個冒號和一個縮進。放下'else:return',不知道你爲什麼要這樣做。 –