<p>对于player1和player2,这个大的<code>while</code>循环实际上是相同的,因此您应该将它设为一个函数,并将Player的名称(或数字)作为参数传递。你知道吗</p>
<p>但还有更多:即使在函数内部,也有很多冗余。例如,检查成对和非成对情况下的滚动是否均匀,可以使用三元<code>... if ... else ...</code>表达式进一步压缩该部分。另外,请注意代码中还有一些问题,例如,您似乎从未初始化<code>score1</code>和<code>score2</code>,并且<code>score1-score1 -5</code>中有一个拼写错误。还有,什么是<code>even</code>,所有偶数的列表?相反,可以使用<code>total % 2 == 0</code>检查<code>total</code>是否为偶数。你知道吗</p>
<p>而且,您的<code>if score < 0:</code>检查在循环之外。如果这是有意的,那么<code>break</code>就没有意义了,因为它只会跳出外<code>for</code>循环,这可能不是有意的。此外,您还可以为分数不是<code>< 0</code>的情况添加一些输出。你知道吗</p>
<p>将所有这些放在一起,函数可以如下所示:</p>
<pre><code>def roll(player):
score = 0
while True:
input("\nPress enter to roll, %s" % player)
roll1 = random.randint(1,6)
roll2 = random.randint(1,6)
print("Rolling dice!", roll1, roll2)
total = roll1 + roll2
score += total
score += 10 if total % 2 == 0 else -5
print("Your total is:", score)
if roll1 == roll2:
print("You rolled a double. Roll again.")
else:
break
if score < 0:
print("%s, you went under 0. Game over." % player)
else:
print("%s, your final score is %d." % (player, score))
</code></pre>
<p>现在,只需调用该函数两次:</p>
<pre><code>for _ in range(5):
roll("Player 1")
roll("Player 2")
</code></pre>