我正在编写一个有两个嵌套for循环的程序,并且我在纸上写下了我的想法并绘制了一个图表并认为我的逻辑很好。但是当我执行时,我得到的东西与我想要的完全不同。 然后我创建了一个只有这两个循环的程序的小版本,但问题仍然存在。所以这是我正在测试的较小版本
lopt = 0
dwl = 0.04
Dt = 0.01
for i in numpy.arange(0, 5):
for t in numpy.arange(lopt, dwl, Dt): #Inner loop (time)
print 't = ', t, 'row = ', i
lopt = t + 0.001
我得到的输出是
t = 0.0 row = 0
t = 0.01 row = 0
t = 0.02 row = 0
t = 0.03 row = 0
t = 0.031 row = 1
t = 0.032 row = 2
t = 0.033 row = 3
t = 0.034 row = 4
但我想要的是
t = 0.0 row = 0
t = 0.01 row = 0
t = 0.02 row = 0
t = 0.03 row = 0
t = 0.04 row = 0
t = 0.041 row = 1
t = 0.051 row = 1
t = 0.061 row = 1
t = 0.071 row = 1
t = 0.081 row = 1
t = 0.082 row = 2
t = 0.092 row = 2
t = 0.102 row = 2
t = 0.112 row = 2
t = 0.122 row = 2
t = 0.123 row = 3
t = 0.133 row = 3
t = 0.143 row = 3
t = 0.153 row = 3
t = 0.163 row = 3
t = 0.164 row = 4
t = 0.174 row = 4
t = 0.184 row = 4
t = 0.194 row = 4
t = 0.204 row = 4
t = 0.205 row = 5
t = 0.215 row = 5
t = 0.225 row = 5
t = 0.265 row = 5
t = 0.275 row = 5
我的逻辑是: 外循环从0开始,然后内循环从0-0.04开始 然后通过将变量lopt增加0.001来回到外循环的最后一步。然后返回并再次执行外循环的一步。现在我们再次获得内循环,并以0.041到0.081的时间开始。这将继续重复,直到外循环执行6次。
我的另一个问题是,至少在我当前的输出中,内循环似乎在第一步中成功执行,但它只到0.03。由于我的范围从0到0.04,增量为0.01,因此循环不应该为0-0.01-0.02-0.03-0.04吗?也适用于外循环,不应该运行0-1-2-3-4-5?
如果我对这个问题烦恼,我很抱歉,但老实说,我为这个问题绘制了8个图表,并用我的手做了,并认为它应该按预期运行。我感到很愚蠢,因为当我手工完成时,我无法捕捉逻辑中的任何流程
答案 0 :(得分:0)
首先,numpy.arange
返回的范围不包括在内,所以
for i in numpy.arange(0, 5):
print i
将打印0
1
2
3
4
,但不会5
。为了让它打印5
,您希望通过步骤递增它,在外循环的情况下为1
(默认情况下),在此情况下为0.01
内在的。
首次执行内循环后,lopt
为0.03
,这意味着内部numpy.arange
的参数为(0.03, 0.04, 0.01)
,这导致只有一个循环。你真正想要的是
lopt = 0
dwl = 0.04
Dt = 0.01
for i in numpy.arange(0, 5):
for t in numpy.arange(lopt, dwl + lopt + Dt, Dt):
print 't = ', t, 'row = ', i
lopt = t + 0.001
因为这样,内部numpy.arange
的第二次评估将包含(0.041, 0.09, 0.01)
的参数,第三次评估将为(0.082, 0.131, 0.01)
,依此类推。