Python循环中if语句逻辑异常求助:小于21仍重启循环
问题分析与解决方案
你的代码存在两个核心问题:
- 使用了固定次数的
for循环,无论手牌总和是否符合要求,循环都会执行999次,每次迭代都会重新生成随机数,所以即使总和≤21,下一次循环仍会继续,造成“循环重启”的错觉。 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
相关产品推荐
相关产品推荐

