我现在真的很困惑,在我的程序思维模型中,如果遇到像这样的表达式
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和or的真正含义 'e1和e2'表示如果结果为False,则评估e1返回False,否则返回e2 'e1或e2'表示如果结果为True则评估e1返回True否则返回e2
我能做对吗?
答案 0 :(得分:5)
这种行为本身并不与布尔逻辑有关。相反,它是Python特有的。而不是始终返回True
/ False
,and
和or
将返回两个操作数之一的值。
以下是一个很好的解释:The Peculiar Nature of and
and or
。
答案 1 :(得分:2)
这就是Python的工作原理,显然是为了增加opperand类型的灵活性。
来自Python文档5. Expressions:
表达式x和y首先计算x;如果x为false,则返回其值;否则,评估y并返回结果值。
表达式x或y首先计算x;如果x为真,则返回其值;否则,评估y并返回结果值。
答案 2 :(得分:2)
你不必学习“基础编程”;你必须研究Python中定义的and
和or
运算符。
您对布尔逻辑的真值表的想法是正确的,但在Python中,这些运算符不需要布尔参数,也不返回布尔值。
请参阅these truth tables,但请记住,x
和y
可以包含任何类型。查看this description of which values are considered false
也很有帮助。