TypeError:“tuple”和“bool”的操作数类型不受支持

2024-09-23 14:31:31 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图在if和tuple中使用“|”运算符时,出现了一个奇怪的错误。在

#example
Myset = ((1, 3), (4, 6), (3, 1), (2, 2), (3, 5), (2, 4), (3, 3))
courd = (4,6)
if(courd[0] - 1 ,courd[1] - 1 in d ):
    isSafe = True # work as expected

但如果我想试试这样的方法:

^{pr2}$

我得到了

Traceback (most recent call last):
  File "<pyshell#87>", line 1, in <module>
    if((courd[0] - 1 ,courd[1] - 1 in d )| (2 == 2)):
TypeError: unsupported operand type(s) for |: 'tuple' and 'bool'

Tags: 方法intrueifexampleas错误运算符
1条回答
网友
1楼 · 发布于 2024-09-23 14:31:31

你需要使用parens,就像这样

if((courd[0] - 1, courd[1] - 1) in d):
    pass

现在,它将创建一个元组(courd[0] - 1, courd[1] - 1),并检查它是否在d中。在下一个案例中

^{pr2}$

将首先计算(courd[0] - 1, courd[1] - 1 in d),这将创建一个元组。然后2 == 2将被求值(因为|的优先级低于==),这基本上是一个布尔值。所以,你正在有效地

tuple | boolean

这就是为什么你会得到那个错误。在

注意:|在Python中称为按位或。如果您指的是逻辑OR,那么您需要这样写它

if(((courd[0] - 1, courd[1] - 1) in d) or (2 == 2)):
    pass

现在,(courd[0] - 1, courd[1] - 1)将首先求值以创建一个元组,然后检查该元组是否存在于d(这将返回True或{},一个布尔值),然后对{}求值,返回{}。现在逻辑or可以很好地使用两个布尔函数。在

相关问题 更多 >