首页 > 解决方案 > 嵌入式函数没有根据传递python3的变量返回正确的值

问题描述

我正在尝试编写基本的二十一点策略。我希望我的程序从游戏开始时根据庄家的上牌和玩家的 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 的组合。

标签: pythonlistfunctionif-statementnested-lists

解决方案


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

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

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

否则, sand优先于ors。

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

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

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

有关更多信息,请参阅Python 文档的运算符优先级部分


推荐阅读