关于blackjack_hand_greater_than函数if语句or条件的疑问
为什么二十一点手牌比较函数需要
or total_2>21条件? 先看你提到的测试用例:
- hand_1=['9']:总点数9,未爆牌(<=21)
- hand_2=['9','Q','8','A']:Q是10,8是8,9+10+8=27,即使A算1,总点数也是28,已经爆牌(>21)
按照二十一点的核心规则:只要自己没爆,对方爆了,不管自己点数多少,自己直接赢。
移除or total_2>21后的问题
当你把条件改成(total_1 <=21) and (total_1>total_2)时,这个逻辑只覆盖了「自己没爆且点数比对方高」的场景,但完全忽略了「对方爆牌」的情况。
在测试用例里,total_1=9,total_2=28,9>28是False,所以整个条件返回False,这就和规则矛盾了——明明对方爆牌了,应该返回True才对。
原条件的逻辑合理性
原条件(total_1 <=21) and (total_1>total_2 or total_2>21)其实是把两种「自己赢」的合法场景合并了:
- 自己没爆,且点数比没爆的对方高(
total_1 <=21 and total_1>total_2) - 自己没爆,但对方爆牌了(
total_1 <=21 and total_2>21)
这完全贴合二十一点的胜负判定规则,所以必须保留or total_2>21来覆盖对方爆牌的场景。
内容的提问来源于stack exchange,提问作者novice
相关产品推荐
相关产品推荐

