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

时间:2018-09-18 18:52:40

标签: python arrays shuffle

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)))

3 个答案:

答案 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)

在您的代码上下文中,这05之间是随机的,因为lists0索引开始,您当前的ary具有0-4的索引 因此我们想要一个在该范围内的随机整数,在您的代码中,由于bb,所以本来应该是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)

希望这会有所帮助! :)