第004讲课后练习题,Python的 and 操作符 和C语言的 && 操作符 有何不同?
>>> 1 and 3 #两边都为真,为什么返回的是3,而不是1或者True?C语言里又为什么返回的是1?这里的逻辑是什么?不是很懂3
>>> 0 and 1
0
>>>
逻辑运算,一样呀。在【非零为真】的世界里,1 不会比 2 来得真,所以没有必要返回 1 或 True。当然可以返回 True,但还不够灵活。【and】被重载了,因为有短路逻辑,所以回最后一个为【真】或【假】的元素。 claws0n 发表于 2018-9-8 15:56
逻辑运算,一样呀。在【非零为真】的世界里,1 不会比 2 来得真,所以没有必要返回 1 或 True。当然可以返 ...
照你的逻辑,1不会比2来的真,那 3 and 1 返回的又怎么是 1 而不是3 呢? bluewind119 发表于 2018-9-8 16:22
照你的逻辑,1不会比2来的真,那 3 and 1 返回的又怎么是 1 而不是3 呢?
and 的短路是前面为假,所以要判断第二个
or 的短路是前面为真 自己解:
Python 中的and从左到右计算表达式,若所有值均为真,则返回最后一个值(即最右边的值),若存在假,返回第一个假值。
>>> 1 and 2 and 3
3
>>> 1 and '' and 0
''
>>> 1 and 2 and 0
0
or也是从左到有计算表达式,返回第一个为真的值。
#include<stdio.h>
int main()
{
printf("%d, %d\n",3 && 1, 0 && 1);
}
这里C语言中为啥第一个输出的是1,而不是3? 1. 在纯and语句中,如果每一个表达式都不是假的话,那么返回最后一个,因为需要一直匹配直到最后一个。如果有一个是假,那么返回假
2. 在纯or语句中,只要有一个表达式不是假的话,那么就返回这个表达式的值。只有所有都是假,才返回假
3. 在or和and语句比较难表达,总而言之,碰到and就往后匹配,碰到or如果or左边的为真,那么就返回or左边的那个值,如果or左边为假,继续匹配or右边的参数。
页:
[1]