gpt4 book ai didi

python - riffleshuffling 出现问题,函数找不到列表

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:14 25 4
gpt4 key购买 nike

需要帮助,我正在尝试进行完美的 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)

我希望我的函数做的就是计算卡片组需要多少次反复洗牌(在我的例子中为 n,它应该适用于任何偶数 n)才能再次恢复正常(0,1,2 ,3,...,51)。我见过人们通过类(class)解决这个问题,但我想在没有类(class)的情况下做到这一点......

最佳答案

这里有一些问题:

  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

关于python - riffleshuffling 出现问题,函数找不到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37969280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com