def shuffle(deck):
for i in range(len(deck)):
idxToPlaceHere = randint(i, len(deck) -1)
swap(deck, i, idxToPlaceHere);
我知道这里有一个标准的随机洗牌算法,但是出于某种原因,这是我写shuffle的自然方式。在我看来,维持(len-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计算startIndex
和endIndex
之间的随机数。没有len-1
,它将是0到3之间的数字。
问题是你的数组中没有键3,导致你的数组从0开始。这就是为什么你使用len-1
,这样你就有了真正的最后一个键。