这是一些用于手动洗牌的代码。我理解它到cards[pos], cards[randpos] = cards[randpos], cards[pos]
。这里发生了什么?将卡片[pos]分配给卡片[randpos]有什么意义?
self.cards是标准顺序的扑克牌列表。
def shuffle(self):
n = len(self.cards)
cards = self.cards
for pos in range(n):
randpos = randrange(pos,n)
cards[pos], cards[randpos] = cards[randpos], cards[pos]
答案 0 :(得分:3)
正在切换cards[pos]
和cards[randpos]
的值。这是一种常见的Python习语:您可以通过说a, b = b, a
来切换两个或多个变量的值。
请注意the standard library implementation of shuffling (random.shuffle()
) is quite similar。
答案 1 :(得分:2)
cards[pos], cards[randpos] = cards[randpos], cards[pos]
将卡片放在索引pos处,卡片位于索引randpos
它基本上将卡[randpos]分配给卡[pos]并将卡[pos]分配给卡[randpos]。另一种方法是
t = card[pos]
card[pos] = card[randpos]
card[randpos] = t
前者更短,更蟒蛇。
答案 2 :(得分:1)
它正在pos
和randpos
中交换卡片的位置。
因此,例如,如果您的列表为[1,2,3,4,5,6,7]
且pos为0
,则首先会选择列表中1
之后的索引。然后它将交换1
和该索引处的数字。因此,如果randpos
在第一次迭代时为3,那么在循环一次之后我们会以[4,2,3,1,5,6,7]
结束。
作为旁注,使用random.shuffle()会更有效(也更可靠)。
答案 3 :(得分:1)
在python中
a, b = b, a
是你如何交换两个变量。在您的代码中,交换的内容是位置pos
和randpos
的列表内容。
答案 4 :(得分:1)
cards[pos], cards[randpos] = cards[randpos], cards[pos]
这只是交换cards[pos]
和cards[randpos]
这是关于该技术的整个网页:http://blog.mithis.net/archives/ideas/64-python-swap-var
答案 5 :(得分:0)
它基本上是随机交换卡片。它将cards[pos]
从牌组中取出,将cards[randpos]
放在其位置,然后将cards[pos]
放回cards[randpos]
所在的位置。
另请注意,Python提供random.shuffle
,因此您无需手动执行此操作。