Python - 数组不会随机播放和打印

问题描述 投票:-6回答:3
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)))
python arrays shuffle
3个回答
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
投票

仅供参考,随机包中有预定义的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))

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]

你在我们需要移动到外面的函数中声明qazxsw poi所以我们可以使用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之间的随机,因为5lists索引开始,你当前的0有来自ary的索引所以我们想要在该范围内的随机int,在你的代码中这将是0-4bb

d - 1

这个如果说if x == d: 超出了索引的范围,虽然为了它假设你的意思是if the random int == 5,所有这一切只会给我们一个4的索引,这不是我们想要的改组,我们想要一个整个随机索引让我们摆脱它。

让我们拿另一个随机变量来交换,所以我们总是交换两个随机数

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)

希望这可以帮助 ! :)

© www.soinside.com 2019 - 2024. All rights reserved.