Debugging 迭代器是否意外地递增自身?
调试此代码摘录时遇到问题。不管它实际上没有返回作者想要的东西,我已经解释过了,我的问题是不同的Debugging 迭代器是否意外地递增自身?,debugging,python-2.7,Debugging,Python 2.7,调试此代码摘录时遇到问题。不管它实际上没有返回作者想要的东西,我已经解释过了,我的问题是不同的 def factors(n): result = [] for x in xrange(2,n): print "\t%i,foo" % x if n % x == 0: isPrime = True print "\t\t%i,bar" % x for factor in resu
def factors(n):
result = []
for x in xrange(2,n):
print "\t%i,foo" % x
if n % x == 0:
isPrime = True
print "\t\t%i,bar" % x
for factor in result:
print "\t\t%i %% %i = %i" % (x,factor,x % factor)
if x % factor == 0:
isPrime = False
print "\t\t\t%i,foobar" % x
subFactors = factors(x)
result.extend(subFactors)
if isPrime:
result.append(x)
print ""
return result
def main():
factor = dict()
for i in xrange(1,100):
factor[i] = factors(i)
factor[i].insert(0,1)
factor[i].append(i)
print "%i: %s" % (i,factor[i])
if __name__ == "__main__":
main()
那代码是无限循环!具体而言,重复输出以下内容:
2,foo
2,bar
3,foo
4 % 2 = 0
4,foobar
请注意,在第二次迭代中,它不打印“bar”打印语句,x
的值从“bar”打印语句更改为“mod”打印语句
我无法向作者解释这种行为。你们当中能有一个善良的人吗?问题是,在迭代列表的内容时,您正在扩展
结果。以下是两条关键线路,周围没有其他干扰点:
for factor in result:
result.extend(subFactors)
根据python规范,这有未定义的行为。我很确定这是无限循环的原因。这也可以解释为什么“bar”级别的print语句在第二次出现时没有出现?可能是这样。“foo”位由于递归而重复,“foobar”位由于扩展列表而重复。我怀疑解决方法是完全忽略非素数因子,因为在外循环的前一个周期中,您总是已经添加了它们的所有子因子。