You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 10:45:28