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

Python循环中if语句逻辑异常求助:小于21仍重启循环

问题分析与解决方案

你的代码存在两个核心问题:

  1. 使用了固定次数的for循环,无论手牌总和是否符合要求,循环都会执行999次,每次迭代都会重新生成随机数,所以即使总和≤21,下一次循环仍会继续,造成“循环重启”的错觉。
  2. os.system('clear')语句后缺少换行/分号,导致和下一行代码拼接,会触发语法错误。

要实现“生成随机数求和,超过21则重新生成,直到总和≤21为止”的需求,应该改用while循环,直到满足条件才终止循环。

完整修正代码

import os
import random
import time

while True:
    os.system('clear')  # 清屏,确保每次生成新数据前刷新界面
    player_hand1 = random.randint(2, 11)
    player_hand2 = random.randint(2, 11)
    player_hand_total = player_hand1 + player_hand2

    print(f"你的手牌:{player_hand1} + {player_hand2} = {player_hand_total}")
    if player_hand_total > 21:
        print("You broke!")
        time.sleep(3)
        continue  # 总和超过21,重新循环生成手牌
    else:
        print("Keep going")
        break  # 总和符合要求,终止循环

代码说明

  • 改用while True无限循环,直到生成符合条件的手牌后用break终止。
  • 修复了os.system('clear')的语法问题,确保清屏操作单独执行。
  • 增加了手牌信息的打印,方便查看每次生成的具体数值。
  • 当总和≤21时,执行break退出循环,不再继续生成新数据。

内容的提问来源于stack exchange,提问作者kedarpatel420

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:34:59