如果for循环中的语句

时间:2013-06-10 17:10:24

标签: python loops if-statement for-loop

我在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.

提前感谢您的帮助

2 个答案:

答案 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.11.8取决于值,然后if ( 0.1 < mbv[i] < 0.2)将失败,并输入else块以附加0

同样如wagregg的回答所述,您应该确保使用<=覆盖边缘情况,这样如果值恰好是0.050.1,则输入相应的块代替掉到别的地方。

答案 1 :(得分:0)

你应该让你的&lt; to&lt; =以覆盖5的情况。

if ( 0.05 <= mbv[i] < 0.1):
    M.append(1.8)