for循环未执行:Blackjack列表检测11元素时调整变量的逻辑失效
故障原因定位
break缩进错位,直接掐断循环
原代码里break和if n == 11是平级缩进,for循环刚拿到第一个列表元素(也就是5),不管当前元素是不是11点的A,都会直接触发break退出循环,根本遍历不到列表后面的11点A,自然走不到减10的折算逻辑。- 存在完全跑不到的废代码
单独写的newsum <= 21既不是赋值操作,也没搭配if等关键字做有效判断,而且位置在break后面,碰到break就跳出循环了,这行代码永远不会被执行,纯冗余。 - 原折算逻辑缺前提判断
就算修正了缩进,只要碰到11就直接减10的逻辑也不对:只有总点数已经超过21的时候,才需要把11点的A当1点算(也就是减10),如果总点数本来就没超,没必要动A的点数。
修复后的可运行代码
blackjack = [5, 11, 7] newsum = sum(blackjack) if newsum <= 21: print(newsum) else: for n in blackjack: # 只有总点数还超21、且当前是11点的A时,才做折算 if n == 11 and newsum > 21: newsum -= 10 # 保留原来的调试打印,验证循环运行 print(newsum) if newsum <= 21: print(newsum) else: print("BUST")
实际运行效果
- 示例手牌初始总点为23,超过21进入折算分支
- 遍历到11的A时,总点减10得到13,调试打印会输出13
- 最终判断13≤21,正常返回有效总点,不会误判爆牌
- 如果手牌有多张A(比如两张11的A加10点牌),逻辑会自动逐张折算,直到总点不超21或者没有可折算的A,完全符合Blackjack的计分规则
内容的提问来源于stack exchange,提问作者grantt932
相关产品推荐
相关产品推荐

