2013-06-10 3 views
0

У меня проблема с некоторыми операторами if в цикле for. Вот мой код:Операторы if в цикле for

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, это должно дать М 1.8, но вместо того, чтобы его получает 0.

заранее спасибо за помощь

ответ

0

Вы должны сделать свой < < к =, чтобы покрыть случай точно 5.

if (0.05 <= mbv[i] < 0.1): 
    M.append(1.8) 
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.8 будет добавлен в зависимости от значения, а затем if (0.1 < mbv[i] < 0.2) сбой и блок else будет e перенаправлено на добавление 0.

Кроме того, как отмечено в ответе wagregg, вы должны убедиться в том, что крайние случаи покрыты с помощью <= так, что если значение именно 0.05 или 0.1 вы вводите соответствующий блок вместо отбрасывания к другой.

+0

Вы должны также включить ответ wagregg, так как случай точно «0,05» (например) будет отправлен на 'else' еще. – SethMMorton

Смежные вопросы