7

我不明白这一行q.append(p[i] * (hit * pHit + (1-hit) * pMiss)),因为变量hit是一个布尔值。该布尔值来自hit = (Z == world[i])

那里发生了什么事?我对Python只有一个基本的了解......

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)
4

3 回答 3

13

在算术中,布尔值被视为整数。True被视为1False被视为0

>>> True + 1
    2
>>> False * 20
    0
>>> True * 20
    20
于 2012-11-11T14:45:52.810 回答
10

在 python 中,布尔值是 int 的子类:

>>> isinstance(True, int)
True

它们基本上是 1 和 0:

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

请参阅为什么 bool 是 int 的子类?

于 2012-11-11T14:45:58.627 回答
5

正如其他人所回答的那样,True is1和 False is 。0所以基本上,它的作用(以及应该写的)是:

p[i] * (pHit if hit else pMiss)
于 2012-11-11T14:48:11.330 回答