嵌入函数没有基于变量传递python3返回正确的值[复制]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我正在尝试编写基本的黑杰克策略。我想让我的程序根据经销商的上牌和比赛开始时的玩家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语句,或者print('stand')。但相反,它返回顶部的if语句,不包括玩家卡10和10的组合。

python list function if-statement nested-lists
1个回答
0
投票

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

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

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

否则,and优先于ors。

正如评论中指出的那样,您需要:

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

© www.soinside.com 2019 - 2024. All rights reserved.