【问题标题】:Multiplying boolean with float?将布尔值与浮点数相乘?
【发布时间】:2023-08-06 13:04:01
【问题描述】:

我不明白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)

【问题讨论】:

    标签: python type-conversion boolean


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      >>> isinstance(True, int)
      True
      

      它们基本上是 1 和 0:

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

      Why is bool a subclass of int?

      【讨论】:

        【解决方案3】:

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

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

        【讨论】: