Python程序冻结计算机
我已经用python编程一段时间了,并且决定也教我的朋友。我让他做一个方法,返回一个数字的所有因子的列表,他给了我一个脚本,虽然效率有点低,但对我来说仍然是可行的。然而,当运行该程序时,我和他的电脑都冻结了(我有一台顶级的游戏电脑,所以我认为它不会占用很多资源)。我向他展示了如何修复它,但是我仍然无法确定是什么导致了问题。这是代码,谢谢你的时间Python程序冻结计算机,python,Python,我已经用python编程一段时间了,并且决定也教我的朋友。我让他做一个方法,返回一个数字的所有因子的列表,他给了我一个脚本,虽然效率有点低,但对我来说仍然是可行的。然而,当运行该程序时,我和他的电脑都冻结了(我有一台顶级的游戏电脑,所以我认为它不会占用很多资源)。我向他展示了如何修复它,但是我仍然无法确定是什么导致了问题。这是代码,谢谢你的时间 def factors(numb): facs = [] for i in range(1,int(numb // 2)):
def factors(numb):
facs = []
for i in range(1,int(numb // 2)):
if numb % i == 0:
facs.append(i)
for i in facs:
facs.append((numb / i))
return facs.sort()
p、 它从不抛出错误,即使在被允许运行一段时间之后。另外,在python 3.4中,问题在于:
for i in facs:
facs.append((numb / i))
这里有一个自增序列。您的问题在这里:
for i in facs:
facs.append((numb / i))
for循环对facs中的每个数字进行迭代,每次迭代都会在末尾添加一个新数字。因此,每当它靠近列表末尾一个位置时,列表就会变长一个位置。这会形成一个无限循环,慢慢吞噬你所有的记忆
编辑:解决问题
实际上不需要循环(排序也不需要,因为函数会生成一个已经排序的列表)
应该可以正常工作。尝试分析这些行(7,8),这里的逻辑看起来不正确,因为你的方面(无限循环)
否则,测试它
def factors(numb):
l = [1,2,3,4]
for i in l:
print i
l.append(numb/i)
factors(10) // function call
发生这种情况时,
numb
有什么值?请注意,这将始终返回None
,因为facs.sort
是一个就地函数,返回None
。可能已排序(facs)
?但无论如何,我们需要知道函数是如何调用的。对不起,不管我在函数中输入什么数字都会导致问题。我在一个print语句中调用它,即print(factors(120))我尝试过使用大数字和小数字您可以简单地返回[I for I in range(1,int(numb//2)),如果不是I%2]
您可以通过在facs中执行for I来解决这个问题[:]
我也遇到过类似的问题,在python空闲脚本模式下是一个无限循环,在我执行该模式后,一切都冻结了。就像python没有响应,windows任务管理器没有快捷方式,过了一段时间,我关上了圈,现在当我在圈上时,没有显示。整个笔记本电脑就被7行python撞坏了代码
for i in facs:
facs.append((numb / i))
def factors(numb):
l = [1,2,3,4]
for i in l:
print i
l.append(numb/i)
factors(10) // function call