为什么这个在python中排序的代码会陷入无限循环? [重复]

问题描述 投票:-3回答:1

这个问题在这里已有答案:

我想采用一个列表进行排序,并使用python随机库对其进行排序。这样做的策略:

  • 首先,在列表中取任意两个随机索引作为输入
  • 然后交换这两个元素。
  • 检查列表是否已排序。
  • 如果未排序,请再次重复这些步骤。

我是python的新手。所以不熟悉所有的技术。请帮忙解释一下。我无法弄清楚出了什么问题。

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
python sorting random
1个回答
0
投票

有两个问题:

  1. l.sort()进行就地排序,因此在第二次迭代时,列表将被排序
  2. 脚本范围中的“p”值不会更改,因此脚本会循环播放

要避免无限循环,你可以做两件事:

检查返回的值

while (p==1):
    p = ransort(n)

或者在ransort函数中编辑全局变量值:

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)
© www.soinside.com 2019 - 2024. All rights reserved.