我在for循环中遇到了一些if语句的问题。下面是我的代码:
import numpy as np
mv = []
mb = []
mbv = []
M = []
for i in range (0,25):
mv.append(10.1 - 2.5 * np.log10(fv[i]/1220000))
mb.append(11.0 - 2.5 * np.log10(fb[i]/339368))
mbv.append(mb[i]-mv[i])
if ( 0.00 < mbv[i] < 0.05):
M.append(1.1)
if ( 0.05 < mbv[i] < 0.1):
M.append(1.8)
if ( 0.1 < mbv[i] < 0.2):
M.append(2.2)
else:
M.append(0)
print i+1, mbv[i], M[i]这是我得到的结果:
1 0.117517744922 2.2
2 0.105291760392 2.2
3 0.0414704330434 1.1
4 0.709631736921 0
5 0.0634562921955 0
6 0.9 1.8
7 0.123732441181 0
8 0.332213182737 0
9 0.0783116509167 2.2
10 0.109696428387 0
11 0.812457966075 1.8
12 0.0796972381532 0
13 0.0933833026562 2.2
14 0.0448112197058 0
15 0.107871295045 1.8
16 0.072180255058 0
17 0.134980217798 1.8
18 0.453454266409 0
19 0.0498332192697 1.1
20 0.141914194517 0
21 0.0712870748016 2.2
22 0.622521992135 1.8
23 0.176515236738 0
24 0.607814524935 2.2
25 0.0521329729172 0
0如你所见,数字5的mbv为0.0634,这应该给出的M是1.8,但它得到的却是0。
提前感谢您的帮助
发布于 2013-06-11 01:12:56
您需要使用elif,否则,如果mbv[i]不在0.1和0.2之间,则始终会追加0
if ( 0.00 <= mbv[i] < 0.05):
M.append(1.1)
elif ( 0.05 <= mbv[i] < 0.1):
M.append(1.8)
elif ( 0.1 <= mbv[i] < 0.2):
M.append(2.2)
else:
M.append(0)当mbv[i]小于0.1时,您当前的代码会导致向M添加多个值,首先将根据值添加1.1或1.8,然后if ( 0.1 < mbv[i] < 0.2)将失败,并输入else块以附加0。
另外,正如wagregg的答案中所指出的,您应该确保使用<=覆盖边缘情况,以便如果某个值恰好是0.05或0.1,则可以输入适当的块,而不是放到else块中。
发布于 2013-06-11 01:12:26
您应该使用< to <=来恰好涵盖5的情况。
if ( 0.05 <= mbv[i] < 0.1):
M.append(1.8)https://stackoverflow.com/questions/17029278
复制相似问题