Python程序冻结计算机



我已经用python编程一段时间了,并决定教我的朋友。我让他写一个方法来返回一个数字的所有因子的列表,他给了我一个脚本,这个脚本有点低效,但看起来应该可以工作。然而,当运行程序冻结我和他的电脑(我有一个顶级的线上游戏电脑,所以我不认为它是使用太多的资源)。我向他展示了如何修复它,但是我仍然不能确定是什么导致了这个问题。这是代码,谢谢你的时间!

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()

注。即使运行了一段时间,它也不会抛出错误。在python 3.4

你的问题在这里:

for i in facs:
    facs.append((numb / i))

for循环遍历facs中的每个数字,每次迭代都会在末尾添加一个新数字。所以每靠近列表末尾一个位置,列表就长一个位置。这会形成一个无限循环,慢慢地吞噬你所有的内存。

编辑:解决问题

实际上不需要循环(排序也不需要,因为函数生成的是一个已经排序的列表)

def factors(numb):
    facs = []
    for i in range(1,int(numb // 2)):
        if numb % i == 0:
        facs.append(i)
return facs

问题在这个片段中:

for i in facs:
        facs.append((numb / i))

这里有一个自增序列

试着分析这些行(7,8),这里的逻辑看起来不像你的方面(无限循环)。

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

最新更新