【发布时间】:2020-11-04 04:55:40
【问题描述】:
学了一点Python,我在Kaggle做练习。
基本上我的问题减少到两个int 之间的> 比较器不能按我的意愿工作。
问题是写一个比较两个黑杰克手(字符串列表)的函数
我首先写了一个函数,它给了我一手牌的价值
def hand_val(hand):
ace_count=0
for i in range(len(hand)) :
val_hand=hand
if ((hand[i] == 'J') | (hand[i] == 'Q') | (hand[i] == 'K')):
val_hand[i]=10
elif (hand[i] == 'A'):
val_hand[i]=11
ace_count+=1
else :
val_hand[i]=int(hand[i])
value=0
for i in val_hand :
value = value + i
for i in range(ace_count) :
if value>21 :
value=value-10
return value
然后是另一个比较两只不同的手
def blackjack_hand_greater_than(hand_1, hand_2):
if (hand_val(hand_1)>21):
return False
elif (hand_val(hand_2)>21):
return True
elif (hand_val(hand_1)>hand_val(hand_2)):
return True
else:
return False
(我知道我应该以return ((hand_val(hand_1)<22) and ((hand_val(hand_1)>hand_val(hand_2))or(hand_val(hand_2)>21))) 执行此操作,但单独的条件更易读)
使用这两只特定的手,第二个功能无法按预期工作。我想我已经设法将问题追溯到第一个
elif
这是我写的调试代码
hand_1=['3', '2', '6', '8']
hand_2=['8', 'A', '5']
print(hand_val(hand_1))
print(hand_val(hand_2))
print(type(hand_val(hand_1)))
print(type(hand_val(hand_2)))
print(hand_val(hand_1)>21)
print(hand_val(hand_2)>21) ############# WHY??? OH WHY??
print(14>21)
print(hand_val(hand_1)>hand_val(hand_2))
这是输出
19
14
<class 'int'>
<class 'int'>
False
True
False
False
看到了
print(hand_val(hand_2)>21) 返回 True 而 print(14>21) 返回 False 应该是这样吗?
有人可以帮忙吗?
【问题讨论】:
-
val_hand=hand不是副本。你的hand_val改变了它的输入,所以当你第二次调用它时的结果不是14第二次。 -
只是一个建议:使用
or而不是|:if (hand[i] == 'J') or (hand[i] == 'Q') or (hand[i] == 'K'):你甚至可以使用这个:if hand[i] in ['J', 'Q', 'K']:
标签: python comparator