当前位置: 代码迷 >> python >> 当第一个Arg为0时Python生成无限循环
  详细解决方案

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

热度:74   发布时间:2023-06-20 19:23:20.0

我不明白为什么当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)
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

在外部(while)循环中,len(range(start,stop)是一个常量(11)。在内部(for)循环中,j取值为0到10(根据range的帮助:

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

为什么不取出外部while循环?

假设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循环永不终止。

range函数返回一个不包含最终值的列表:

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