Python中如何让循环在部分代码终止后仍继续执行
问题分析与解决方案
你的核心需求是:当任意一个玩家先达到20时,不直接终止程序,而是让未达标的玩家继续掷骰子直到也达到20,最后对比谁先完成达标。原代码的问题在于,一旦某个玩家达标就直接break终止了整个循环,导致另一个玩家没有机会完成目标。
下面是修改后的代码,完全实现你想要的逻辑:
import random player1 = 0 rollnum_player1 = 0 player2 = 0 rollnum_player2 = 0 # 新增两个标记,跟踪玩家是否已经达标 player1_done = False player2_done = False def die(): roll = random.randint(1, 6) return roll # 循环条件改为:只要有一个玩家没达标,就继续 while not (player1_done and player2_done): # 只有player1未达标时,才继续掷骰子 if not player1_done: player1 += die() print(f"Player 1 roll: {player1}") rollnum_player1 += 1 if player1 >= 20: player1_done = True print("Player 1 has reached the target!") # 只有player2未达标时,才继续掷骰子 if not player2_done: player2 += die() print(f"Player 2 roll: {player2}") rollnum_player2 += 1 if player2 >= 20: player2_done = True print("Player 2 has reached the target!") # 两个玩家都达标后,判断谁先完成 if rollnum_player1 < rollnum_player2: print(f"\nCongratulations Player 1! You reached 20 first in {rollnum_player1} rolls!") elif rollnum_player2 < rollnum_player1: print(f"\nCongratulations Player 2! You reached 20 first in {rollnum_player2} rolls!") else: print(f"\nIt's a tie! Both players reached 20 in {rollnum_player1} rolls!")
关键修改点说明:
- 添加达标状态标记:用
player1_done和player2_done两个布尔值,控制每个玩家是否继续执行掷骰子逻辑。 - 调整循环条件:循环会持续到两个玩家都达标为止,而不是任意一个达标就终止。
- 后置胜负判断:等到两个玩家都完成目标后,通过对比各自的掷骰子次数
rollnum_player1和rollnum_player2,确定谁先达标(次数越少,完成越早)。 - 优化输出信息:用f-string让输出更清晰,同时在每个玩家达标时给出明确提示。
这样修改后,就能完美实现你想要的逻辑:先达标的玩家停止掷骰子,另一个继续直到达标,最后揭晓谁先完成。
内容的提问来源于stack exchange,提问作者Naga Nir
相关产品推荐
相关产品推荐

