我已经用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