這是代碼。我正在學習 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
提交
取消