Skip to main content
 首页 » 编程设计

python之Python 中奇怪的循环行为

2025年05月04日18zhwl

代码:

total = 0 
 
for number in xrange(10000): 
    divisors = 0 
    divisors2 = 0 
 
    for dividend in xrange(1, number/2): 
        if number % dividend == 0: 
            divisors = divisors + dividend 
 
    for dividend2 in xrange(1, divisors/2): 
        if divisors % dividend2 == 0: 
            divisors2 = divisors2 + dividend2 
 
    if number == divisors2: 
        total = total + number + divisors 
 
print total  

代码应该生成低于 10,000 的友好数字(即小于自身的除数总数等于另一个除数总数等于原始数的数字,请参阅 Project Euler, problem 21 )并在找到它们时添加它们。它产生 48,这太低了。

程序运行速度比我预期的要快得多:我正在运行大量数字,我知道这不是获得正确除数的快速方法,所以我怀疑有什么问题结束循环,要么是 Python 意外停止,要么是循环运行无序。如果我在下一个循环开始之前发出打印除数的命令,它将永远持续下去,并且倾向于打印相同数字的长行。这里肯定发生了一些奇怪的事情。我用谷歌搜索“奇怪的循环行为”,并在这里搜索,但无济于事。我也检查了[这里]。 2

这是怎么回事,我应该怎么做?

提前谢谢你。

请您参考如下方法:

这里有几个问题:

应该是

total = total + number 

而且,range(1,x) 只运行到 x-1。所以,你需要指定 range(1, n/2 + 1)