<p>我清理了一些东西。通过使循环依赖于<code>player_wins</code>和{<cd2>}同时是{<cd3>},修复了循环的主要问题。这样,每当其中一个命中<code>3</code>,循环终止,控制转到下面的<code>if/else</code>语句,该语句将设置优胜者。在</p>
<pre><code>def Fight():
player_wins = 0
alien_wins = 0
while player_wins <= 3 and alien_wins <= 3:
player_roll = random.randint(0, 10)
alien_roll = random.randint(0, 7)
if player_roll > alien_roll:
contents.set("You manage to fire a shot of your laser pistol and the alien backs off.")
player_wins += 1
elif alien_roll > player_roll:
contents.set("The alien reaches out and strikes you with its claws.")
alien_wins += 1
else:
contents.set("You both grapple eachother and eventually back off.")
if player_wins == 3:
contents.set("You manage to overcome the alien. It leaps from wall to wall and crawls into the vents.")
win = True
else:
contents.set("You lose the fight to the alien. Game Over!")
</code></pre>
<p>您也不需要那些<code>break</code>语句,因为这完全脱离了循环。您可能正在考虑<code>continue</code>,它只会转到循环的下一个迭代,但是即使这样也不需要,因为循环的整个内容只是一个<code>if/else</code>语句,因此只执行一个分支。在</p>
<p>另外,在<code>elif</code>中检查两个<code>rolls</code>是否相等是不必要的,因为您已经排除了两个都不大于/小于另一个,所以可以假设它们是相等的。最后一个<code>if/else</code>也一样,你可以检查谁拥有<code>3</code>。如果我们不在循环中,我们知道有人有<code>3</code>,所以我们只需要检查一个玩家的分数。在</p>