我不明白为什么当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)
答案 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=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
循环永远不会终止。
答案 3 :(得分:0)
range函数返回一个不包含结束值的列表:
>> range(5)
[0, 1, 2, 3, 4]