Blackjack算法实现问题:输入11,11,10未返回预期'BUST'
问题原因与修复方案
问题根源
当传入blackjack(11,11,10)时,代码执行流程如下:
- 计算总和
bj = 11+11+10 = 32,显然大于21,且存在11,触发elif bj > 21 and el == True分支。 - 计算调整后的值
bja = 32-10 = 22,随后直接return bja,程序终止。 - 后续的
elif bja >21判断根本没机会执行——你的代码在调整总和后,没有检查调整值是否仍超过21,直接返回了结果,这就是返回22而非预期'BUST'的原因。
修复后的代码
def blackjack(a,b,c): total = a + b + c has_ace = 11 in (a, b, c) if total <= 21: return total elif has_ace: adjusted_total = total - 10 return adjusted_total if adjusted_total <=21 else "BUST" else: return "BUST"
修复说明
- 调整逻辑:在存在11的分支里,先计算调整后的值,再判断是否仍超过21,符合题目要求的"调整后仍超过21则返回'BUST'"规则。
- 简化判断:用
11 in (a,b,c)替代冗余的多条件判断,代码更简洁易读。 - 变量优化:使用
total、adjusted_total、has_ace这类语义清晰的变量名,提升代码可维护性。
内容的提问来源于stack exchange,提问作者Mario Velez
相关产品推荐
相关产品推荐

