python - 嵌入式函数没有根据传递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 的组合。
解决方案
您的布尔表达式中缺少一些括号。
在主要if
语句中,您希望在所有or
s 周围加上括号,例如:
if (dealer_card == 2 or dealer_card == 3 or dealer_card == 4) and ..
否则, sand
优先于or
s。
正如评论中指出的那样,您想要:
if (card_set[0] in player_cards) or (card_set[1] in player_cards):
而不是你所拥有的,因为你想检查in
两次。
有关更多信息,请参阅Python 文档的运算符优先级部分。
推荐阅读
- python - Python - 无法安装新包,升级到 TLS 1.2?
- html - 尝试显示 6 张幻灯片时,css 中的滑块不起作用
- javascript - Framework 7 Webpack 构建错误超过了“500KB”的最大值
- kotlin - 我应该如何用我自己的类型形成一个列表属性类型
- ldap - LDAP - ldapwhoami 返回“ldap_bind:无效凭据 (49)”
- node.js - Stripe:如何列出待处理的 webhook?
- python - 在 json-rpc 调用中从帖子中打印状态代码
- http-status-code-404 - 未找到云高仪 HTTP 404
- android - 如何让我的 react-native android 应用出现在另一个 android 应用的共享列表中
- java - Symantec CA 不信任对代码签名证书有何影响?