我正在写一个程序,可以对给定的序列(列表l)进行随机抽取,m次。我的函数接受列表l和数字m作为输入,但是我定义了一个shuffle的shuffle本身,然后使用for循环做了m次。但是,现在for循环不采用用户指定的值m
我是个Python迷,所以我可能错过了一件简单的事情。我尝试使用全局m,在我的函数中重新定义m,但是要么我不知道怎么做,要么它似乎不起作用
def riffle_shuffle(l, global m):
#global m goes here?
r = np.random.binomial(len(l),0.5)
sd1 = l[:r]
d2 = l[r:]
fl = []
c = [sd2,sd1]
l2 = sd2+sd1
for i in range(1,len(l) + 1):
x = [sd2,sd1]
y = [(len(sd2))/(len(l) - i+1),(len(sd1))/(len(l) - i+1)]
a = choices(x,y)
a1 = a[0][0]
fl.append(a1)
#Deck Split is c
#Sub decks are',c
#Probabilities are',y
#Deck chosen is',a
#fl
if a1 in sd1:
sd1.remove(a1)
elif a1 in sd2:
sd2.remove(a1)
return fl,m
for j in range(1,m+1):
fl = riffle_shuffle(fl)
return fl
我得到错误,说m是没有定义的,无效的语法,下面的错误消息。我不知道最后一个是什么意思
'比较中超过最大递归深度'
非常感谢您的帮助,谢谢
编辑:我错过了描述中提到的for循环。对不起,现在已经结束了
所以。。。你想要一个能重复m次的方法,对吗
您的代码有一些问题:
首先,
return
在函数之外第二,在函数中调用函数,而不破坏条件:因此函数将调用函数,而函数将一次又一次地调用函数,依此类推,直到错误发生。那就是
maximum recursion depth exceeded in comparison
第三,您必须像这样使用
np.random.choice
:np.random.choice(x, p=y)
。否则,python不知道y是概率,它将把它解释为第二个参数:输出的大小。所以这里发生了错误这可能是您要编写的代码:
正如您所做的,我使用break条件“递归地”调用了函数“call function in function”
这样,您就不必使用全局变量—在大多数情况下,使用全局变量不是一个好主意
关于您的问题(如何将用户提供的值设置为全局变量),您可以这样做
相关问题 更多 >
编程相关推荐