当第一个Arg为0时,Python生成无限循环

时间:2014-03-10 19:16:07

标签: python while-loop infinite-loop

我不明白为什么当totalArea的'start'参数为0时,下面的代码会陷入无限循环。我一直在观察Python Tutor中运行的代码,并且j通过Stop -1的值执行,但是然后重置为0而不转移到Stop的值。

import math
def totalArea(start, stop, step):
    def f(x):
        return 10*math.e**(math.log(0.5)/5.27 * x)

    area = 0.0
    j = start

    while j <= len(range(start, stop)):

        for j in range(start, stop):
            area += float(step) * f(j)

    print area

totalArea(0, 11, 1)

4 个答案:

答案 0 :(得分:3)

while j <= len(range(start, stop)):
    for j in range(start, stop):

每次for循环结束时,j = 10

len(range(start, stop))11

永远j <= len(range(start, stop))

while循环似乎完全是多余的。尝试完全删除它:

def totalArea(start, stop, step):
    def f(x):
        return 10*math.e**(math.log(0.5)/5.27 * x)

    area = 0.0
    j = start

    for j in range(start, stop):
        area += float(step) * f(j)

    print area

答案 1 :(得分:0)

在外部(while)循环中,len(范围(开始,停止)是常量(11)。在内部(for)循环中,j取值0到10(根据范围的帮助:< / p>

Return a list containing an arithmetic progression of integers.
    range(i, j) returns [i, i+1, i+2, ..., j-1]

为什么不取出外循环?

答案 2 :(得分:0)

我们说start=0stop=11。然后len(range(start,stop))为11,[0,1,2,3,4,5,6,7,8,9,10]的长度。在while循环内,j遍历值0到10.如您所见,j永远不会超过11,因此while循环永远不会终止。

答案 3 :(得分:0)

range函数返回一个不包含结束值的列表:

>> range(5)
[0, 1, 2, 3, 4]