<p>因为<code>pattern</code>是一个局部变量(因为它是一个函数参数),当函数退出时,对它的修改不会持久。你知道吗</p>
<p>解决这个问题的一种方法是将<code>pattern</code>作为一个全局变量传递(正如您隐式地处理<code>die1..5</code>、<code>diceSum</code>和<code>count</code>),但更好的方法是只将骰子值作为参数传递,计算这个评分函数中的中介并返回值。我将返回2元组的模式“id”和解释,但是您可能还想将它们扩展到3元组的id/解释/分数。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>def patterns(die1, die2, die3, die4, die5):
total = die1 + die2 + die3 + die4 + die5
count = len({die1, die2, die3, die4, die5}) # count unique values
if die1 == die2 == die3 == die4 == die5:
return (1, "all values being the same (100 points)?")
elif total % 2 == 1:
return (2, "a prime number sum (sum of %s is a prime number) (50 points)" % total)
elif count == 3:
return (3, "3 values being the same (30 points)?")
elif count == 5:
return (4, "all different values (25 points)?")
else:
return (5, "mysterious pattern #5")
# ...
pattern_id, pattern_explanation = patterns(1, 3, 6, 4, 5)
</code></pre>
<p>进一步的重构将允许任意数量的骰子,将它们作为一个列表传入:</p>
<pre class="lang-py prettyprint-override"><code>def patterns(dice):
total = sum(dice) # total of dice
count = len({die1, die2, die3, die4, die5}) # count unique values
if count == 1:
return (1, "all values being the same (100 points)?")
elif total % 2 == 1:
return (2, "a prime number sum (sum of %s is a prime number) (50 points)" % total)
elif count == 3:
return (3, "3 values being the same (30 points)?")
elif count == len(dice):
return (4, "all different values (25 points)?")
else:
return (5, "mysterious pattern #5")
# ...
print(patterns([1, 3, 3, 6, 2, 4, 5, 5, 1, 5, 1]))
</code></pre>