2012-11-11 52 views
4

我不明白行q.append(p[i] * (hit * pHit + (1-hit) * pMiss)),因爲變量hit是一個布爾值。該布爾值來自hit = (Z == world[i]) 那裏發生了什麼?我只對Python有一個基本的理解......仍在學習它的構造。不理解這個Python代碼塊。 boolean與float相乘?

p=[0.2, 0.2, 0.2, 0.2, 0.2] 

world=['green', 'red', 'red', 'green', 'green'] 
Z = 'red' 
pHit = 0.6 
pMiss = 0.2 

def sense(p, Z): 
    q=[] 
    for i in range(len(p)): 
     hit = (Z == world[i]) 
     q.append(p[i] * (hit * pHit + (1-hit) * pMiss)) 
     s = sum(q) 
     for i in range(len(p)): 
      q[i]=q[i]/s 


    return q 

print sense(p,Z) 
+0

pMiss = 0.2還是0.4? –

回答

1

True時,1和False是0,正如其他人已經回答。所以基本上,它所做的(以及應該寫的)是:

p[i] * (pHit if hit else pMiss) 
+0

謝謝,這使得它在我的腦海中點擊 – user836087

7

在算術中,布爾值被視爲整數。 True被視爲1並且False被視爲0

>>> True + 1 
    2 
>>> False * 20 
    0 
>>> True * 20 
    20 
4

在Python中,布爾值是int型的子類:

>>> isinstance(True, int) 
True 

他們基本上是1和0:

>>> True * 1 
1 
>>> False * 1 
0 

Why is bool a subclass of int?