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)}")
好的方面是:)首先我们有while(d > 0),如果你想使用它,我们必须添加一些最终结束这个循环的东西,所以在每次运行之后,让我们添加一个d -= 1,但是即使这样,你也应该使用一个for loop而不是for i in range(mixes)这里不需要使用d,因为循环的数量实际上是由你决定的,你走得越高,你就走得越多我们将得到随机分组。在本例中,让我们将mixes与数组一起传递。你知道吗
仅供参考随机包中有一个预定义的shuffle函数
对于您的情况,您需要在将数组传递给函数之前定义数组
你有一些错误,我为你解决了,我会把它分解,目前正在努力解释你哪里出错了。你知道吗
第一件事:
您正在函数内部标记
ary
,我们需要将其移到外部,以便使用suffle(ary)
将其传递到函数中这应该是一行
d = len[ary] - 1
好的方面是:)首先我们有
while(d > 0)
,如果你想使用它,我们必须添加一些最终结束这个循环的东西,所以在每次运行之后,让我们添加一个d -= 1
,但是即使这样,你也应该使用一个for loop
而不是for i in range(mixes)
这里不需要使用d
,因为循环的数量实际上是由你决定的,你走得越高,你就走得越多我们将得到随机分组。在本例中,让我们将mixes
与数组一起传递。你知道吗接下来我们洗牌:
在您的代码上下文中,这可能是
0
和5
之间的随机数,因为lists
从0
索引开始,所以您当前的ary
具有来自0-4
的索引 所以我们想要一个在这个范围内的随机整数,在你的代码中这应该是b
,因为b
是d - 1
。你知道吗如果说
if the random int == 5
超出了索引的范围,让我们假设你的意思是4
,所有这一切只会给我们一个4
的索引,这不是我们想要的洗牌,我们想要一个随机索引,所以让我们摆脱它。你知道吗换成另一个随机变量来交换,所以我们总是交换两个随机数
这里我们为索引生成另一个随机数,但也要确保它不等于我们要交换的那个
最后我们交换:
同样,如果我们使用这种方法,我们只会用随机数字交换最后一个数字,更不用说
d
会超出范围相反,让我们交换两个随机位置
然后我们可以:
或者
希望这有帮助!:)
我还没看透你的逻辑。只是从语法上纠正了你的代码。你没有初始化就通过了列表。创建了一个无限循环(从未减少参数d)
相关问题 更多 >
编程相关推荐