我在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.
提前感谢您的帮助
答案 0 :(得分:2)
您需要使用elif
否则如果0
不在mbv[i]
和0.1
之间,您将始终追加0.2
:
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)
当M
小于mbv[i]
时,您的当前代码会导致多个值被添加到0.1
,首先会添加1.1
或1.8
取决于值,然后if ( 0.1 < mbv[i] < 0.2)
将失败,并输入else
块以附加0
。
同样如wagregg的回答所述,您应该确保使用<=
覆盖边缘情况,这样如果值恰好是0.05
或0.1
,则输入相应的块代替掉到别的地方。
答案 1 :(得分:0)
你应该让你的&lt; to&lt; =以覆盖5的情况。
if ( 0.05 <= mbv[i] < 0.1):
M.append(1.8)