Python数组不会洗牌和翻滚

2024-04-26 11:40:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: importlenreturnifdefrandomlistprint
3条回答

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

你有一些错误,我为你解决了,我会把它分解,目前正在努力解释你哪里出错了。你知道吗

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的索引 所以我们想要一个在这个范围内的随机整数,在你的代码中这应该是b,因为bd - 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)

或者

print(f"{shuffle(ary, 10)}")

希望这有帮助!:)

我还没看透你的逻辑。只是从语法上纠正了你的代码。你没有初始化就通过了列表。创建了一个无限循环(从未减少参数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)))

相关问题 更多 >