最初の問題は、順列を必要としないということです。順列には重複が含まれません(つまり、各サイコロは異なる数をロールバックします)。 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):
return (p for p in itertools.combinations_with_replacement(dice,n) if sum(p) == m)
:ように簡略化することができもちろん
def subsets(n,m):
perms = itertools.combinations_with_replacement(dice, n)
for i in perms:
if sum(i) == m:
yield i
、
* combinations_with_replacement
を使用してのに対し、あなたは141件の結果を得る、product
、subsets(10,35)
利回り4395456の結果とのことに注意してください。
'if'の後にコロンとインデントを挿入します。 'else:return'を落として、なぜそれが欲しいのか分からない。 –