첫 번째 문제는 순열을 원하지 않는다는 것입니다. 순열은 중복을 포함하지 않습니다 (즉, 각 주사위가 다른 숫자를 굴립니다). 10 개의 주사위 굴림 순열이 없습니다.
이 대신해야 하나 product
(그렇지 않을 경우) 또는 combinations_with_replacement
(다르게 (1,1,1,1,1,2)
및 (1,1,1,1,2,1)
을 계산하려는 경우). 나는 후자를 가정한다 *.
if sum(i) == m
yield perms
는 콜론과 들여 쓰기 블록이 있어야한다 :
그런 다음, 여기에 구문 오류가 있습니다. 함수가 어쨌든 마무리 때문에,
if sum(i) == m:
yield i
이 아무것도하지 않는 :
else:
return
따라서는, 함수의 고정 된 버전은 다음과 같습니다 또한, 아마 현재 항목 (i
)를 산출한다
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
, 16,
* combinations_with_replacement
를 사용하는 반면, 당신은 (141 개) 결과를 얻을, product
, subsets(10,35)
수익률 4,395,456 결과가 유의하십시오.
'if'뒤에 콜론과 들여 쓰기를 넣으십시오. 'else : return'을 버리십시오. 왜 그걸 원하니? –