import random
def shuffle(ary):
ary = [1,2,3,4,5]
d=len[ary]
b=d-1
while (d > 0):
x=random.randint(0,d)
if x == d:
ary[b],ary[x]=ary[x],ary[d]
return ary
print("shuffle list" + str(shuffle(ary)))
答案 0 :(得分:1)
我没有听懂你的逻辑。只是在语法上更正了您的代码。您已通过列表而未对其进行初始化。创建了一个无限循环(从未减少参数d)
import random
ary = [1,2,3,4,5]
def shuffle(ary):
d=len(ary)
b=d-1
while (d > 0):
x=random.randint(0,b)
if x == d:
ary[b],ary[x]=ary[x],ary[d]
d=d-1
return ary
print("shuffle list" + str(shuffle(ary)))
答案 1 :(得分:1)
仅供参考:随机软件包中有一个预定义的shuffle函数
import random
array = [1, 2, 3, 4]
random.shuffle(array) # shuffles in place
print("My shuffled list", array)
对于您的情况,您需要先定义数组,然后再将其传递给函数
ary = [1, 2, 3, 4]
print(shuffle(ary))
答案 2 :(得分:1)
您有一些错误,我为您解决了这些错误,目前将对它进行分解,以对错误之处进行全面的解释。
import random
def shuffle(some_ary, mixes):
d = len(some_ary) - 1
for i in range(mixes):
x = random.randint(0, d)
y = random.randint(0, d)
while y == x:
y = random.randint(0, d)
some_ary[x], some_ary[y] = some_ary[y], some_ary[x]
return some_ary
ary = [1,2,3,4,5]
print(f"Shuffle: {shuffle(ary, 10)}")
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 shuffle.py Shuffle: [5, 2, 3, 4, 1]
第一件事:
def shuffle(ary):
ary = [1,2,3,4,5]
您要将ary
放在函数内部,我们需要将其移到外部,以便可以使用suffle(ary)
将其传递到函数中
d=len[ary]
b=d-1
这应该是一行d = len[ary] - 1
while (d > 0):
现在好东西了:)首先,我们有while(d > 0)
,如果要使用它,我们必须添加一些最终结束该循环的内容,因此在每次运行之后,我们都可以添加d -= 1
,但即使因此,您应该使用for loop
来代替for i in range(mixes)
,而无需在这里使用d
,因为周期数确实取决于您,您走得越高,随机化就越多得到。在此示例中,让mixes
与我们的数组一起传递。
接下来我们的改组:
x=random.randint(0,d)
在您的代码上下文中,这0
和5
之间是随机的,因为lists
从0
索引开始,您当前的ary
具有0-4
的索引
因此我们想要一个在该范围内的随机整数,在您的代码中,由于b
是b
,所以本来应该是d - 1
。
if x == d:
这表示如果if the random int == 5
不在索引范围内,尽管为了方便起见,假设您的意思是4
,所有这些操作只会给我们提供{{ 1}},这不是我们想要的改组,我们一直想要一个随机索引,因此请消除它。
让我们获取另一个随机变量进行交换,因此我们总是交换两个随机数
4
在这里,我们为索引生成了另一个随机数,但还要确保它不等于我们要交换的那个
最后我们交换:
y = random.randint(0, b)
while y == x:
y = random.randint(0, b)
如果再次使用此方法,我们将只交换最后一个数字和一个随机数字,更不用说ary[b],ary[x]=ary[x],ary[d]
超出范围了
d
让我们交换两个随机位置
然后我们可以:
some_ary[x], some_ary[y] = some_ary[y], some_ary[x]
或
results = shuffle(ary, 10)
print(results)
希望这会有所帮助! :)