0
我在调试此代码片段时遇到问题。不要紧,它实际上并没有回报作者想要的东西,我已经解释说,我的问题是不同的。迭代器意外增加自己?
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
注意,在第二次迭代它不打印“栏中的”打印语句,以及x
变化从“栏中的” print语句“国防部”的价值打印声明。
我无法向作者解释此行为。你们中的一个人能够善待人吗?
这是否也可以解释为什么“酒吧”级别的打印语句不会第二次出现? – rsegal
也许。由于递归,“foo”位被重复,而由于扩展列表,“foo”位被重复。我怀疑修正是完全忽略非主要因素,因为您将始终在外循环的上一个循环中添加其所有子因子。 – Blckknght