riffleshuffling有问题,函数找不到lis

2024-04-16 09:21:41 发布

您现在位置:Python中文网/ 问答频道 /正文

在需要帮助的时候,我正试着做一个完美的riffleshuffle或“Faro shuffle”。一直在尝试自己,我做了另一个线程,但违反了规则,所以希望我这次的问题是更好的。你知道吗

我的代码现在是这样的:

def shuffle(n):
    r=[]
    for (a, b) in zip(lista[0:int(n/2)], lista[int(n/2):n]):
        r.append(a)
        r.append(b)

def riffel(n):
    lista = []
    for a in range(0,n):
        lista.append(a)
    for i in range(1,1000):
        r.shuffle()
        if lista==r:
            print("done",i)

我想让我的函数做的是计算carddeck需要多少次riffleShuffle(在我的例子n中,它应该对任何偶数n起作用)才能恢复正常(0,1,2,3,…,51)。我见过有人在课堂上解决这个问题,但我不想这样做。。。你知道吗


Tags: 代码infor规则defrangezip线程
1条回答
网友
1楼 · 发布于 2024-04-16 09:21:41

这里有几个问题:

  1. riffel中的列表r从未初始化。你知道吗
  2. 你永远不会把n传给r.shuffle()
  3. (正如R Nar的评论所说,shuffle中r的状态丢失了,因为它的作用域是局部的。你知道吗
  4. 调用r.shuffle()无效,因为r不是shuffle类型的对象。你知道吗

您可以按以下方式修复此代码:

def shuffle(n, lista): #< - Now passing in lista as a parameter
    r = []
    for (a, b) in zip(lista[0:int(n/2)], lista[int(n/2):n]):
        r.append(a)
        r.append(b)
    return r

def riffel(n):
    lista = []
    for a in range(0,n):
        lista.append(a)
    r_prev = lista
    for i in range(1,1000):
        r = shuffle(n, r_prev) #< - changed how this is called, added arguments to func call
        if r == lista:         #< - List a doesn't change so we can keep comparing to it.
            print("done",i)
        r_prev = r #< - Making r_prevthe newly shuffled entry to pass to shuffle in next iteration

相关问题 更多 >