为什么python中的排序代码会陷入无限循环?
我想获取一个列表进行排序,并使用python随机库对其进行排序。实现这一目标的战略是:为什么python中的排序代码会陷入无限循环?,python,sorting,random,Python,Sorting,Random,我想获取一个列表进行排序,并使用python随机库对其进行排序。实现这一目标的战略是: 首先,将列表中的任意两个随机索引作为输入 然后交换这两个元素 检查列表是否已排序 如果未排序,请再次重复这些步骤 我是python新手。所以我不太熟悉所有的技术。请帮忙解释一下。我不知道出了什么问题 from random import randint n=int(input()) l=[int(input()) for x in range(0,n)] p=1 while (1): if(p=
- 首先,将列表中的任意两个随机索引作为输入
- 然后交换这两个元素
- 检查列表是否已排序
- 如果未排序,请再次重复这些步骤
from random import randint
n=int(input())
l=[int(input()) for x in range(0,n)]
p=1
while (1):
if(p==1):
ransort(n)
else:
break
for x in l:
print (x)
def ransort(n):
i=randint(0,n-1)
j=randint(0,n-1)
l[i],l[j]=l[j],l[i]
if l== l.sort():
p=0
else:
p=1
return p
有两个问题:
while (p==1):
p = ransort(n)
或在Transort函数中编辑全局变量值:
def ransort(n):
i=randint(0,n-1)
j=randint(0,n-1)
l[i],l[j]=l[j],l[i]
global p
if l== l.sort():
p=0
else:
p=1
这是有效的:
def ransort(n):
i=randint(0,n-1)
j=randint(0,n-1)
l[i],l[j]=l[j],l[i]
global p
if l== l.sort():
p=0
else:
p=1
return p #here it is
while p == 1:
p = ransort(n)
这个算法可能效率很低。它是否仍然在小列表(长度为2或3?)上无限运行,因为
p
在循环中没有机会更改内的值。函数中的p
与全局p
l.sort()不同。
对就地列表进行排序并返回None
。顺便说一句,这只是正常的(p
的范围)。您可以查看while(p==1):transort(n)
并查看p
是否可以改变以及如何改变。如果transort
可以/将从函数内部更改它,那就是意大利面代码。这种算法几乎没有意义<代码>排序
已将列表排序到位。为检查列表是否已排序而调用是。。奇怪。但它显示了全局语法错误。错误代码是文件“test.py”,第10行\n global p=0\n^\n syntaxer:无效的syntaxer如果您是对的,请查看编辑,变量p被声明为global谢谢您的帮助。它确实有效。但我必须在函数定义之前将p声明为全局的,并用1初始化它。如果我只在函数中声明它,那么它在while(p==1)行显示Nameerror。请你解释一下。我的代码在这里:对不起,在复制粘贴中我错过了一行,transort函数有一个“return p”,我将编辑答案以便您理解