1

我现在真的很困惑,在我的程序思维模型中,如果你遇到这样的表达

expr = expr1 和 expr2

这意味着 expr 的类型必须是布尔型,与“或”操作相同

请参阅下面的代码,假设三行将打印布尔值

print(1==1 and 3)
print(1==2 and 3)
print(1==2 and 3 or 4)

但结果是

3
False
4

我必须重新研究基本编程:

and and or 'e1 and e2' 的意思是如果结果为 False 则计算 e1 返回 False 否则返回 e2 'e1 or e2' 表示如果结果为 True 则计算 e1 返回 True 否则返回 e2

我做对了吗?

4

3 回答 3

5

这种行为实际上与布尔逻辑本身无关。相反,它是 Python 特有的。而不是总是返回True/ Falseand而是返回or两个操作数之一的值。

以下是一个很好的解释:的特殊性质andor

于 2012-11-28T10:13:28.137 回答
2

这就是 Python 的工作方式,显然是为了增加操作数类型的灵活性。

来自 Python 文档5. 表达式

表达式 x 和 y 首先计算 x;如果 x 为假,则返回其值;否则,评估 y 并返回结果值。

表达式 x 或 y 首先计算 x;如果 x 为真,则返回其值;否则,评估 y 并返回结果值。

于 2012-11-28T10:12:53.740 回答
2

您不必学习“基础编程”;您必须学习 Python 中定义的andand运算符。or

您对布尔逻辑真值表的想法是正确的,但在 Python 中,这些运算符不需要布尔参数,它们也不返回布尔值。

请参阅这些真值表,但请记住,它x可以y有任何类型。查看有关考虑哪些值的描述false也有帮助。

于 2012-11-28T10:13:57.913 回答