鱼C论坛

 找回密码
 立即注册
查看: 1356|回复: 4

[已解决]三元操作符问题

[复制链接]
发表于 2018-4-3 06:35:33 | 显示全部楼层 |阅读模式

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

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

x
  1. x, y, z = 6, 5, 4
  2. if x < y:
  3.     small = x
  4.     if z < small:
  5.         small = z
  6. elif y < z:
  7.     small = y
  8. else:
  9.     small = z
复制代码



改成三元操作符:


  1. small = x if (x < y and x < z) else (y if y < z else z)
复制代码



这是小甲鱼第7,8课课后题的动动手第一题,我对三元操作符不太了解,基础的很容易,但是有多个判断条件就不清楚了。

原语块里明明是有三个这样的判断条件(x < y,z < small,y < z, ),三元操作符这里就变成了(x < y,x < z,y<z)了,这是怎么变回来的,真是看不清楚。三元操作符的x < z是怎么来的呀?其他两个判断可以知道,从原语块里来的。这个基础三元操作符和有点变形的三元操作符的差距太大了,不太好找到变化规律啊。理解三元操作符的亲朋好友们帮帮忙啊,这个对我来说太关键了。



还有,补充问题,这个变形的三元操作符语法和基础三元操作符语法(语法:x if 条件 else y),怎么匹配啊,如果能匹配上了,我就好理解了。谢谢,这样解释一下就更好了。
最佳答案
2018-4-3 11:55:45
這個例子作用是取  x, y, z 最小值(small) ,也就是x, y, z 哪個值最小,
第一個條件判斷 if 可以理解成 x < y and x < z  small=x
x < y and z < x  small=z ,如果第一個if不成立代表 x 不是最小的。

所以下來判斷 elif 跟 else ,因為 x 已經知道不是最小,所以判斷 y 跟 z 哪個小,如果 y < zsmall=y
如果 x 跟 y 不是最小,那 small=z

三元操作符语法(语法:x if 条件 else y)
條件為true返回前面,否則返回後嘛

代入例子變成---x if ( 確定x為最小的條件) else (y if (確定y跟z哪個最小) else z)

所以你的問題"判断条件(x < y,z < small,y < z, ),三元操作符这里就变成了(x < y,x < z,y<z)了"
的原因在於  確定x為最小的條件  要 x < y and x < z
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-4-3 08:17:23 | 显示全部楼层
像这种函数式编程时科学家们为了研究学术上的课题发明了,为了体现自己的高大上。向我们程序员只知道简单的就行了不用了解的太深。其实这种方式用多了让其他人也很难理解

small = x if (x < y and x < z) else (y if y < z else z) 其实这就是个if else语句x y和 z 分别是3个返回值,如果x的条件达到了就会返回x为small的值,否则y条件达到了就返回y,否则就是z
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-3 09:17:18 | 显示全部楼层
用语言翻译一下这一句
x if (x < y and x < z) else (y if y < z else z)
如果x小于y而且x小于z,那么取x
否则说明x肯定不是最小的,只需要比较y和z,如果y小于z那么取y
否则说明xy都不是最小,取z
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-3 11:55:45 | 显示全部楼层    本楼为最佳答案   
這個例子作用是取  x, y, z 最小值(small) ,也就是x, y, z 哪個值最小,
第一個條件判斷 if 可以理解成 x < y and x < z  small=x
x < y and z < x  small=z ,如果第一個if不成立代表 x 不是最小的。

所以下來判斷 elif 跟 else ,因為 x 已經知道不是最小,所以判斷 y 跟 z 哪個小,如果 y < zsmall=y
如果 x 跟 y 不是最小,那 small=z

三元操作符语法(语法:x if 条件 else y)
條件為true返回前面,否則返回後嘛

代入例子變成---x if ( 確定x為最小的條件) else (y if (確定y跟z哪個最小) else z)

所以你的問題"判断条件(x < y,z < small,y < z, ),三元操作符这里就变成了(x < y,x < z,y<z)了"
的原因在於  確定x為最小的條件  要 x < y and x < z
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-3 12:17:47 | 显示全部楼层
谢谢大家的详细回复,我得要慢慢分析了,要不然一下子想不通。这个三元操作符,实际编成开发中用的多吗?但是我觉得还是得要理解的深刻一点,要不然,别人程序里写进了三元操作符我就不会了,也浪费时间。所以我想这次多看一下呢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-2 02:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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