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

扑克动作分析函数Bug排查:误判非初始下注者的Call行为

扑克动作分析函数逻辑修复

问题背景

有一个分析翻牌圈扑克动作的Python函数,输入为动作列表(唯一下注轮次)。针对测试用例test1,函数错误输出no_calls_other_than_original_bettor = True,但实际上Robert3已经跟注了Brittney2的下注,该值应为False。

当前函数输出:('FLOP', True, True, False, False, 6, 1)
正确输出:('FLOP', True, False, False, False, 6, 1)

测试用例test1:

test1= [{'street': 'FLOP', 'player': 'John4', 'position': 4, 'action': 'checks'},
 {'street': 'FLOP', 'player': 'Jane0', 'position': 0, 'action': 'checks'}, 
{'street': 'FLOP', 'player': 'Brittney2', 'position': 2, 'action': 'bets', 'amount': 18.0},
 {'street': 'FLOP', 'player': 'Robert3', 'position': 3, 'action': 'calls', 'amount': 18.0},
 {'street': 'FLOP', 'player': 'John4', 'position': 4, 'action': 'raises', 'amount': 94.0},
 {'street': 'FLOP', 'player': 'Jane0', 'position': 0, 'action': 'folds'}, 
 {'street': 'FLOP', 'player': 'Brittney2', 'position': 2, 'action': 'folds'}, 
{'street': 'FLOP', 'player': 'Robert3', 'position': 3, 'action': 'folds'}]

错误原因分析

问题出在no_calls_other_than_original_bettor的判断逻辑上:
原代码逻辑:

no_calls_other_than_original_bettor = all(player != bettor and player != raiser for player in call_players)

该逻辑的含义是“所有跟注玩家都不是原始下注者、也不是加注者”时返回True,完全与需求相反。我们需要的是“除原始下注者外没有其他玩家跟注”——即当存在非原始下注者的跟注玩家时,该值应为False。

修复后的代码

def analyse_poker_actions(actions):
    players = set()
    bettor = None
    raiser = None
    call_players = []
    raise_players = []
    betting_street = None
    raise_players_excluding_bettor = []
    fold_actions = []
    bettor_actions = []
    for action in actions:
        players.add(action['player'])
        if action['action'] == 'bets':
            bettor = action['player']
            if betting_street is None:
                betting_street = action['street']
        if action['player'] == bettor:
            bettor_actions.append(action['action'])
        if action['action'] == 'calls':
            call_players.append(action['player'])
        if action['action'] == 'raises':
            raise_players.append(action['player'])
            if action['player'] != bettor:
                raise_players_excluding_bettor.append(action['player'])
                if raiser is None:
                    raiser = action['player']

        if action['action'] == 'folds':
            fold_actions.append(action['player'])

    player_bet_and_folded = bettor in fold_actions

    # 修复逻辑:判断所有跟注玩家是否都是原始下注者,无跟注时默认True
    no_calls_other_than_original_bettor = all(player == bettor for player in call_players) if call_players else True

    cold4bet = len(set(raise_players_excluding_bettor)) > 1

    if 'raises' in bettor_actions and 'folds' in bettor_actions:
        bettor_reraised = bettor_actions.index('raises') < bettor_actions.index('folds')
    else:
        bettor_reraised = False
    return betting_street, player_bet_and_folded,no_calls_other_than_original_bettor,cold4bet, bettor_reraised, len(players),len(raise_players_excluding_bettor)

验证结果

用test1测试修复后的函数,输出为('FLOP', True, False, False, False, 6, 1),与预期正确结果一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:59:52