这是代码。我正在学习 Python,我尝试编写一个 Blackjack 脚本,该脚本可以计算在拥有 21 点或以下的情况下以 X 大小的手结束的几率。该代码应该不断地从牌组中添加随机卡片,直到达到一定数量的卡片。(我知道甲板通常不是无限的,这只是一个实验)如果它在 X 手牌数量之前超过 21,则弃牌并开始新手牌。但出于某种原因,每次它开始新手牌时,手牌列表都以与之前所有手牌相同的第一个整数开头,如下所示:有人可以向我解释我做错了什么吗?[8, 3, 2, 6, 2][8, 2, 3, 2, 5][8, 2, 2, 4, 3][8, 6, 2, 2, 2][8, 2, 2, 2, 7][8, 4, 5, 2, 2][8, 5, 2, 2, 2][8, 2, 2, 2, 6][8, 2, 2, 6, 3][8, 3, 6, 2, 2][8, 6, 2, 2]total amount of hands: 1020the percentage of 7 card hands that total 21 or less is 1 in 10.2import randomcard_deck = [2,3,4,5,6,7,8,9,10,11]def blackjack_tracker(deck): hand = [] trackers = 0 count = 0 ace = 0 x = 0 while trackers <10: if len(hand) < 7: hand.append(random.choice(deck)) if len(hand) == 7 and sum(hand) <= 21: print(hand) hand.pop(all(hand)) trackers += 1 count += 1 elif len(hand) == 7 and sum(hand) > 21: hand.pop(all(hand)) count += 1 print(hand) print('total amount of hands: {}'.format(count)) print('the percentage of 7 card hands that total 21 or less is 1 in {}'.format(count/10))blackjack_tracker(card_deck)
1 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
您用于“丢弃手牌并开始新手牌”的代码是:
hand.pop(all(hand))
这不会丢弃整只手(稍后解释这个表达式的含义)。
你应该使用:
hand.clear()
或者
hand = []
Integesting是方法的意思hand.pop(all(hand))
。因为它真正做的是弹出非空数组的第二个元素。
因为all(hand)
总是返回 True 并且hand.pop(True)
被转换为hand.pop(1)
并且它从数组中删除位置 1 的元素。
这就是位置“0”中的元素永远不会被触及的原因——因为你永远不会删除它。
添加回答
举报
0/150
提交
取消