bluewind119 发表于 2018-9-8 15:47:45

第004讲课后练习题,Python的 and 操作符 和C语言的 && 操作符 有何不同?

>>> 1 and 3                #两边都为真,为什么返回的是3,而不是1或者True?C语言里又为什么返回的是1?这里的逻辑是什么?不是很懂
3
>>> 0 and 1
0
>>>

claws0n 发表于 2018-9-8 15:56:26

逻辑运算,一样呀。在【非零为真】的世界里,1 不会比 2 来得真,所以没有必要返回 1 或 True。当然可以返回 True,但还不够灵活。【and】被重载了,因为有短路逻辑,所以回最后一个为【真】或【假】的元素。

bluewind119 发表于 2018-9-8 16:22:45

claws0n 发表于 2018-9-8 15:56
逻辑运算,一样呀。在【非零为真】的世界里,1 不会比 2 来得真,所以没有必要返回 1 或 True。当然可以返 ...

照你的逻辑,1不会比2来的真,那 3 and 1   返回的又怎么是 1 而不是3 呢?

claws0n 发表于 2018-9-8 16:48:46

bluewind119 发表于 2018-9-8 16:22
照你的逻辑,1不会比2来的真,那 3 and 1   返回的又怎么是 1 而不是3 呢?

and 的短路是前面为假,所以要判断第二个
or 的短路是前面为真

bluewind119 发表于 2018-9-8 17:40:58

自己解:

Python 中的and从左到右计算表达式,若所有值均为真,则返回最后一个值(即最右边的值),若存在假,返回第一个假值。
>>> 1 and 2 and 3
3
>>> 1 and '' and 0
''
>>> 1 and 2 and 0
0

or也是从左到有计算表达式,返回第一个为真的值。

小无趣 发表于 2019-12-25 16:18:06

#include<stdio.h>
int main()
{

        printf("%d, %d\n",3 && 1, 0 && 1);
}
这里C语言中为啥第一个输出的是1,而不是3?

Asuka_ash 发表于 2020-1-28 14:43:41

1. 在纯and语句中,如果每一个表达式都不是假的话,那么返回最后一个,因为需要一直匹配直到最后一个。如果有一个是假,那么返回假
2. 在纯or语句中,只要有一个表达式不是假的话,那么就返回这个表达式的值。只有所有都是假,才返回假
3. 在or和and语句比较难表达,总而言之,碰到and就往后匹配,碰到or如果or左边的为真,那么就返回or左边的那个值,如果or左边为假,继续匹配or右边的参数。
页: [1]
查看完整版本: 第004讲课后练习题,Python的 and 操作符 和C语言的 && 操作符 有何不同?