【问题标题】:Why when i randomly select a number to be put into a list it always picks the same starting number?为什么当我随机选择一个要放入列表的数字时,它总是选择相同的起始数字?
【发布时间】:2020-07-19 17:03:41
【问题描述】:

这是代码。我正在学习 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: 1020
the percentage of 7 card hands that total 21 or less is 1 in 10.2
import random

card_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)

【问题讨论】:

  • 我不知道为什么(运气?),但更简单的方法是简单地使用hand = random.choices(card_deck, k=7)。请注意,要真正模拟二十一点,一旦总和达到 21(如果不是更早),您将停止向手牌添加卡片。
  • 你在任何地方使用random.seed()吗?
  • 我的猜测是 hand.pop(all(hand)) - 可能没有按照您的预期进行
  • @chepner 谢谢,这就是我想要的,但由于某种原因,最后一手牌的值总是比其他牌少一个,如下所示: [7, 2, 3, 2, 3, 4] [ 2, 2, 6, 3, 4, 4] [3, 7, 2, 4, 3, 2] [3, 2, 4, 3, 2]

标签: python list random


【解决方案1】:

您用于“弃牌并开始新牌手”的代码是:

hand.pop(all(hand))

不丢弃整手(这个表达式的含义在后面解释)。

你应该使用:

hand.clear()

hand = []

Integesting 是hand.pop(all(hand)) 方法的意思。因为它真正做的是弹出非空数组的第二个元素。

因为 all(hand) 总是返回 True 并且 hand.pop(True) 被强制转换为 hand.pop(1) 并且它会从数组中删除位置 1 的元素。

这就是从不触及位置“0”的元素的原因——因为你从不移除它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2012-09-17
    • 2019-03-18
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2014-08-19
    相关资源
    最近更新 更多