问题描述
我不明白为什么当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)
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
2楼
在外部(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循环?
3楼
假设start=0
和stop=11
。
然后len(range(start,stop))
为11,即[0,1,2,3,4,5,6,7,8,9,10]
的长度。
在while
循环内, j
遍历0到10的值。如您所见, j
从不超过11??,因此while
循环永不终止。
4楼
range函数返回一个不包含最终值的列表:
>> range(5)
[0, 1, 2, 3, 4]