【发布时间】:2018-01-29 22:31:02
【问题描述】:
if 循环有问题。在脚本中,我需要检查i 和i+1 行之间的差异是否等于0.6,如果是,那么程序应该计算grad[i] 值。问题是在第三个循环中,即使满足条件,grad[i] 的计算也不会执行。
这是我的代码的一部分:
data = np.loadtxt(files[p])
N=len(data)
print "N: ", N, "\n"
for i in range(0,N-1):
print "i: ", i
j=i+1
Fi[i]=data[i,1]
errFi[i]=data[i,2]
Fj[j]=data[j,1]
errFj[j]=data[j,2]
t1=data[i,0]
t2=data[j,0]
dt=(t2-t1)
print "dt:", dt
print Fj[j]-Fi[i]
if dt == 0.6:
print " dt =", dt
if Fi[i] < Fj[j]:
r[i]=1
grad[i]=(Fj[j]-Fi[i]) / dt
else:
r[i]=-1
grad[i]=(Fi[i]-Fj[j]) / dt
print " grad[",i,"]=",grad[i]
控制台中的结果是:
i: 0
dt: 0.6
0.148645
dt = 0.6
grad[ 0 ]= 0.247741666667
i: 1
dt: 0.6
0.061069
dt = 0.6
grad[ 1 ]= 0.101781666667
i: 2
dt: 0.6
-0.009578
i: 3
dt: 0.6
0.078995
i: 4
dt: 0.6
0.069982
【问题讨论】:
-
浮点数是近似值。仅仅因为它打印为
0.6并不意味着它完全等于0.6。 -
尝试改用
round(dt, 1) == 0.6。就像@Barmar 所说,你的dt可能不会是0.6 锐度。另外,请阅读浮动,包括发布的链接。 -
非常感谢@Barmar 和@atru!
round()一切正常!
标签: python loops if-statement