pythonidle正在重新启动,但没有给我输出

pythonidle正在重新启动,但没有给我输出,python,windows,restart,python-idle,Python,Windows,Restart,Python Idle,我在实现快速排序算法时遇到了一个问题,就像在本例中一样。我找不到比这个问题更相似的问题了。由于这篇帖子自2012年以来一直处于非活动状态,而且问题没有得到解决,我决定再次提问。下面是我的代码: #coding:utf8 import time import sys sys.setrecursionlimit(1000000) x=eval(input("Type a list: ")) start=time.time() L=[] R=[] L_=[] R_=[] c=0 z=x[0] for

我在实现快速排序算法时遇到了一个问题,就像在本例中一样。我找不到比这个问题更相似的问题了。由于这篇帖子自2012年以来一直处于非活动状态,而且问题没有得到解决,我决定再次提问。下面是我的代码:

#coding:utf8

import time
import sys
sys.setrecursionlimit(1000000)
x=eval(input("Type a list: "))
start=time.time()
L=[]
R=[]
L_=[]
R_=[]
c=0
z=x[0]
for j in range(1,len(x)):
    if x[j]>= z:
        R.append(x[j])
    elif x[j] <= z:
        L.append(x[j])
def fun(x,lista,c):
    for i in range(len(x)-1):
        for j in range(i+1,i+2):
            if x[i]<=x[j] and c!=len(x)-2:
                c+=1
            elif x[i]>x[j]:
                lista.append(x[i])
                lista.append(x[j])
                x[i]=lista[1]
                x[j]=lista[0]
                lista=[]
                c=0
                return fun(x,lista,c)
            elif x[i]<=x[j] and c==len(x)-2:
                    c=0
                    return x
fun(L,L_,c)
fun(R,R_,c)

print(L+[z]+R)
end=time.time() 
print(end-start)        

我使用的Python版本是3.4。如您所见,我使用sys库来增加递归限制,但它没有解决我的问题。我对它进行了测试,如果我是对的,它可以对300>X>250范围内的“X”个元素进行排序。我怎样才能解决这个问题?提前谢谢你

除非以-n启动,否则正常空闲运行用户子进程中的用户代码。重新启动行表示子流程已重新启动。无论如何在没有-n的情况下启动空闲,当选择Shell->Restart Shell Cntl+F6或Run->Run Module F5时都会发生这种情况

如果用户进程因程序错误而崩溃,也会重新启动。如果从命令行python-midlelib启动Idle,或者。。。idlelib.idle在2.x中,可能会出现错误消息,但您的程序不会出现这种情况

我用3.4.3运行了你的程序,首先用一个具体的任务替换了输入行,你应该在发布之前完成这个任务

x = list(reversed(range(1000)))
对于许多排序算法来说,这种特殊的选择是最坏的情况

我在命令窗口中没有看到任何内容,但确实看到了Windows消息python.exe已停止工作。由于Idle仍在运行,因此这是指错误进程

将1000000减少到10000并没有改变任何事情。将递归限制保留在1000会导致长时间的回溯

Traceback (most recent call last):
  File "C:\Programs\python34\tem.py", line 33, in <module>
    fun(L,L_,c)
  File "C:\Programs\python34\tem.py", line 29, in fun
    return fun(x,lista,c)
....
  File "C:\Programs\python34\tem.py", line 29, in fun
    return fun(x,lista,c)
  File "C:\Programs\python34\tem.py", line 18, in fun
    for i in range(len(x)-1):
RuntimeError: maximum recursion depth exceeded in comparison
将列表缩小到100并没有改变结果。你有一个无限循环,你需要阻止它

您的代码看起来不像我熟悉的quicksort版本。也许你应该回顾一下算法的定义

然而,这条线 对于i+1、i+2范围内的j: 看起来像一个bug,因为它只迭代了一次,j=i+1。事实上,如果用该行替换程序并删除以下行,则程序运行相同


在任何情况下,终止条件x[i]i正要问同样的问题,因此支持stackoverflow

我的Python在长Python程序期间重新启动,更具体地说,主要是在调用外部程序的程序期间,例如在调用FFMPEG或使用system.os命令调用Tesseract期间

通过搜索,我找到了关于stackoverflow的4个问题,我了解了以下内容:

Python在子进程中空闲运行用户代码,如果该子进程崩溃,则会重新启动。谢谢Terry Jan Reedy

我相信这是我的问题子流程崩溃

起初,我认为这是一个硬件问题:我测试了我的CPU,检查了我的硬盘,用Memtest测试了我的RAM。。。并且没有检测到错误

然后我在我的第二台计算机上运行我的程序,这与我的第一台计算机完全相同:在第二台计算机上一切正常,但在我的第一台计算机上没有

之后,我运行了一个SystemFileCheck,当时我正在使用Windows,发现我的操作系统存在无法解决的问题

最后,我删除了操作系统分区并重新安装了Windows

现在一切都很好。->所以我的Windows无缘无故地扼杀了我的python进程

结论:

如果用户子进程崩溃,Python中的错误重启就会发生。 这种崩溃可能来自程序无限循环中的bug,例如内存不足或操作系统损坏。
修复:检查您的程序是否存在错误,然后重新编写或重新安装操作系统。

sys.setrecursionlimit1000000可能会导致堆栈溢出。也许可以测试一下。我试着用10000个元素对列表进行排序。它给了我一个记忆错误:堆栈溢出错误。不过,我想我可以稍微改进一下程序。我使用了x=listreversedrangey行,它允许我对9500个元素进行排序。