这是随机属性的随机播放

时间:2017-07-25 05:25:26

标签: random

def shuffle(deck):
    for i in range(len(deck)):
        idxToPlaceHere = randint(i, len(deck) -1)
        swap(deck, i, idxToPlaceHere);

我知道这里有一个标准的随机洗牌算法,但是出于某种原因,这是我写shuffle的自然方式。在我看来,维持(len-1)!可能性。我是新手,但有人可以确认这是否是随机的,所以我知道我是否必须记住这样做的标准方式,以免轰炸我的采访。感谢。

1 个答案:

答案 0 :(得分:0)

出于以下原因使用len-1:

你有一张带有3张牌的牌组,它们被存放在阵列中:

deck = {
  0 = "card 1",
  1 = "card 2",
  2 = "card 3"
}

所以len(deck)返回元素的数量,在本例中为3.在for循环中,你有索引i

键以0开头,因此变量i将为0, 1, 2

randint(startIndex, endIndex)

randint计算startIndexendIndex之间的随机数。没有len-1,它将是0到3之间的数字。

问题是你的数组中没有键3,导致你的数组从0开始。这就是为什么你使用len-1,这样你就有了真正的最后一个键。