在这个牌组改组函数中,nCards表示牌组中的牌数(52),for循环通过使用ranrange方法从1到52获得随机“j”值。
然而,我不明白“i”怎么可能,虽然在“for”循环的执行过程中增加,但最终“i”为52而“j”为52。
为什么呢?因为随机方法在a和b之间获得i,并且当for循环执行时,对我来说,i和len之间的差距(nCards)或ncards的范围减小。
所以在我脑海里。
i = 1,j = 1/52之间的随机
i = 2,j = 2/52之间的随机
i = 3,j = 3/52之间的随机
...
i = 52,j = 52/52之间的随机
我错了吗? 在发布此问题之前,我怎么能测试这个?def shuffle(self):
import random
nCards = len(self.cards)
for i in range(nCards):
j = random.randrange(i, nCards)
self.cards[i], self.cards[j] = self.cards[j], self.cards[i]
答案 0 :(得分:2)
i in range(52)
从0开始并将计算到 52.即最后一个条目为51.请参阅docs以供参考。
randrange()
选择从i
到51(包括首字母)的整数 - 即最多 52(但不是52)。
您可能include random
位于文件的顶部,而不是方法。
如果您print i, j
,您会发现这些数字符合预期。例如
0 16
1 24
2 32
...
49 50
50 50
51 51