擅长:python、mysql、java
<p>罗里道尔顿的答案是一个很好的,它有效地给你不同的总数是可能的。我想提供另一种方法,它不一定比那个更好,只是有点不同。我的方法的好处是,您可以看到导致给定总数的分数序列,而不仅仅是最后的总数。你知道吗</p>
<pre><code>def getPointTotal(cards):
card_scores = [getPoints(card) for card in cards] # will be a list of lists
combos = {sorted(scores) for scores in itertools.product(*card_scores)}
return [(scores, sum(scores)) for scores in combos]
</code></pre>
<p>这段代码的关键部分是对<code>itertools.product(*card_scores)</code>的调用。这将获取从<code>getPoints</code>获得的输入列表中每个卡的列表,并获取所有组合。所以<code>product([1, 11], [1, 11], [10])</code>会给出<code>(1, 1, 10)</code>,<code>(1, 11, 10)</code>,<code>(11, 1, 10)</code>,和<code>(11, 11, 10)</code>。你知道吗</p>
<p>对于21点得分来说,这可能有点过分了,因为对于给定的一组牌来说,得分不会有太多变化。但是对于一个不同的问题(即<code>getPoints</code>函数的不同实现),它可能非常有趣。你知道吗</p>