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)))
我没有完成你的逻辑。刚刚在语法上纠正了你的代码。您已经通过了列表而没有初始化它。已经创建了一个无限循环(永远不会减少参数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)))
仅供参考,随机包中有预定义的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]
你在我们需要移动到外面的函数中声明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
之间的随机,因为5
从lists
索引开始,你当前的0
有来自ary
的索引所以我们想要在该范围内的随机int,在你的代码中这将是0-4
自b
是b
。
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)
希望这可以帮助 ! :)