鱼C论坛

 找回密码
 立即注册
查看: 1709|回复: 17

[已解决]关于py逻辑运算符的问题

[复制链接]
发表于 2017-12-10 18:50:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
课后习题里面的问题,在C中,3 and 1,结果为1,但是在python中,为什么3 and 1结果为3,0 or 3结果也是3?不太理解,求解释
最佳答案
2017-12-10 20:32:08
°蓝鲤歌蓝 发表于 2017-12-10 19:02
在Python中,除了0以外的数都为True,3 and 1 都为True,它选择大数,0 or 3,0为False,3为True,选3.

不是选择大数,and:设a and b,如果a为真,则返回b,反之则返回a,or:设: a or b,如果a为真则返回a,反之则返回b。
Image 3.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-10 19:02:06 | 显示全部楼层
在Python中,除了0以外的数都为True,3 and 1 都为True,它选择大数,0 or 3,0为False,3为True,选3.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-10 19:08:00 | 显示全部楼层
短路逻辑,在小甲鱼的课后作业第六讲里面有
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-10 20:32:08 | 显示全部楼层    本楼为最佳答案   
°蓝鲤歌蓝 发表于 2017-12-10 19:02
在Python中,除了0以外的数都为True,3 and 1 都为True,它选择大数,0 or 3,0为False,3为True,选3.

不是选择大数,and:设a and b,如果a为真,则返回b,反之则返回a,or:设: a or b,如果a为真则返回a,反之则返回b。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-10 20:41:33 | 显示全部楼层
timeislife 发表于 2017-12-10 20:32
不是选择大数,and:设a and b,如果a为真,则返回b,反之则返回a,or:设: a or b,如果a为真则返回a,反 ...

你说的对,选择的是逻辑运算符不进行操作时的那个数。你问题里说3 and 1不是返回3哦,是返回1吧,刚刚把我搞混了,现在才想起来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-10 20:45:01 | 显示全部楼层
°蓝鲤歌蓝 发表于 2017-12-10 20:41
你说的对,选择的是逻辑运算符不进行操作时的那个数。你问题里说3 and 1不是返回3哦,是返回1吧,刚刚把 ...

逻辑操作符有个特性:在不需要求值的时候不进行操作。例:
x and y  x 与 y都为真(true)时,结果才为真。如果当x 为假时,表达式就会返回false,此时返回x 的值,而不去管
y 变量的值。
这种行为叫短路逻辑(short-circuit logic)或惰性求值。(lazy evaluation)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-10 21:23:20 | 显示全部楼层
本帖最后由 东哥阿 于 2017-12-10 22:05 编辑
°蓝鲤歌蓝 发表于 2017-12-10 20:45
逻辑操作符有个特性:在不需要求值的时候不进行操作。例:
x and y  x 与 y都为真(true)时,结果才为真 ...


测试了下,确实是短路逻辑。
3 and 1  1
1 and 3  3
a and b   a为真则返回b,反之返回false;
1 or 0  1
0 or 1  1
a or b  a为真则返回a,反之返回b;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-10 21:25:45 | 显示全部楼层
timeislife 发表于 2017-12-10 20:32
不是选择大数,and:设a and b,如果a为真,则返回b,反之则返回a,or:设: a or b,如果a为真则返回a,反 ...

a and b,如果a为真,则返回b,反之则返回a

这句话应该不对,0 and 3,返回值为0,说明a不为真则返回false,即a。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-10 21:46:21 | 显示全部楼层
东哥阿 发表于 2017-12-10 21:23
测试了下,确实是短路逻辑。
3 and 1  3
1 and 3  1

是的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-10 21:51:13 | 显示全部楼层
你确定 在python里 3 and 1 返回3??????
你去print(3 and 1)试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-10 22:06:54 | 显示全部楼层
yjsx86 发表于 2017-12-10 21:51
你确定 在python里 3 and 1 返回3??????
你去print(3 and 1)试试

说错了 3 and 1 返回1, 1 and 3 返回3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-10 22:09:31 | 显示全部楼层
东哥阿 发表于 2017-12-10 22:06
说错了 3 and 1 返回1, 1 and 3 返回3

反正我是这样记的
or 左右全部为假时 返回最后一个假 0 or None 返回None,有真时返回第一个真1 or 2 返回1
and 左右全为真时 返回最后一个真 1 and 2 返回2 ,有假时返回第一个假 0 and None 返回0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-11 06:46:22 | 显示全部楼层
东哥阿 发表于 2017-12-10 21:25
a and b,如果a为真,则返回b,反之则返回a

这句话应该不对,0 and 3,返回值为0,说明a不为真则返回fa ...

对呀,a为假就返回a
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-11 11:46:18 | 显示全部楼层
timeislife 发表于 2017-12-11 06:46
对呀,a为假就返回a

主要是a不为真则false
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-11 13:18:39 | 显示全部楼层
楼上的兄弟 答得都挺好的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-11 17:34:26 | 显示全部楼层
东哥阿 发表于 2017-12-11 11:46
主要是a不为真则false

你确定a不是false但为假的情况下返回false?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-12 11:28:43 | 显示全部楼层
timeislife 发表于 2017-12-11 17:34
你确定a不是false但为假的情况下返回false?

不是false但为假是什么情况啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-12 17:06:26 | 显示全部楼层
本帖最后由 timeislife 于 2017-12-12 17:28 编辑
东哥阿 发表于 2017-12-12 11:28
不是false但为假是什么情况啊


在py中,声明一个0,None,空的容器在调用bool()的时候就是false
代码:
  1. >>> if 0:
  2.         print('1')

  3.        
  4. >>> #因为0在调用bool()


  5. >>> #上面没打完


  6. >>> #因为0在调用bool()的时候会返回false


  7. >>> #None也是这样
  8. >>> if None:
  9.         print('1')

  10.        
  11. >>> #空的容器也是如此
  12. >>> if [] or () or {} or set():
  13.         print('1')

  14.        
  15. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-27 19:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表