基于变量传递python3的嵌入函数未返回正确值

2024-06-16 09:50:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我在尝试编程基本的黑杰克策略。我想让我的程序返回正确的移动取决于庄家的上升卡和玩家2卡从游戏开始。我把一个简单的函数放在一起,用来处理传入的玩家卡,在一个函数中用来处理庄家卡和玩家卡

def player_has(card_sets, player_cards):
    for card_set in card_sets:
        if (card_set[0] and card_set[1]) in player_cards:
            return True

    return False

def get_best_move(player_cards, dealer_card):
        move = ''
    if dealer_card == 2 or dealer_card == 3 or dealer_card == 4 and \
            player_has([[2, 2], [3, 3], [6, 6], [7, 7], [8, 8], [9, 9], [11, 11]], player_cards):
        print('split')

    elif dealer_card == 2 or dealer_card == 3 or dealer_card == 4 and player_has([[4, 4]], player_cards):
        print('Hit')

    elif dealer_card == 2 or dealer_card == 3 or dealer_card == 4 and player_has([[5, 5]], player_cards):
        print('Double Down')

    elif dealer_card == 2 or dealer_card == 3 or dealer_card == 4 and player_has([[10, 10]], player_cards):
        print('Stand')

    print(move)
    return move


_player_cards = [10, 10]
_dealer_card = 3
get_best_move(_player_cards, _dealer_card)

问题是这个测试应该返回包含值[10,10]的elif语句,或者打印('stand')。但是相反,它返回的if语句不包括玩家卡10和10的组合


Tags: orandmovereturnif玩家cardcards
1条回答
网友
1楼 · 发布于 2024-06-16 09:50:10

布尔表达式中缺少一些括号

在主if语句中,您希望在所有or语句周围加上括号,如:

if (dealer_card == 2 or dealer_card == 3 or dealer_card == 4) and ..

否则,and优先于or

正如在评论中指出的,您希望:

if (card_set[0] in player_cards) or (card_set[1] in player_cards):

而不是你所拥有的,因为你想检查in两次

参见operator precedence section of the Python docs for more info

相关问题 更多 >