鱼C论坛

 找回密码
 立即注册
查看: 1355|回复: 18

三元操作符问题

[复制链接]
发表于 2018-4-2 21:15:21 | 显示全部楼层 |阅读模式

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

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

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是怎么来的呀?其他两个判断可以知道,从原语块里来的。这个基础三元操作符和有点变形的三元操作符的差距太大了,不太好找到变化规律啊。理解三元操作符的亲朋好友们帮帮忙啊,这个对我来说太关键了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-4-2 21:20:17 | 显示全部楼层
还有,补充问题,这个变形的三元操作符语法和基础三元操作符语法(语法:x if 条件 else y),怎么匹配啊,如果能匹配上了,我就好理解了。谢谢,这样解释一下就更好了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 08:49:28 | 显示全部楼层
我也卡在这一题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 08:53:31 | 显示全部楼层
small = x if x<y and y<z else z 不知这样对不对,好像缺了一个y判断
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-5 09:51:49 | 显示全部楼层

我已经解决了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-5 09:59:13 | 显示全部楼层

但是我还得得要用的地方多用用,这样才更加熟练,什么情况下可以用,什么情况下不可以用。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 10:49:57 | 显示全部楼层
金刚 发表于 2018-4-5 09:59
但是我还得得要用的地方多用用,这样才更加熟练,什么情况下可以用,什么情况下不可以用。

你怎么解决的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-5 11:00:17 | 显示全部楼层
金刚 发表于 2018-4-5 09:59
但是我还得得要用的地方多用用,这样才更加熟练,什么情况下可以用,什么情况下不可以用。

但是我还是我理解的方式给你说一下吧。

原条件分支和三元运算的关系:
   1.可以说,条件分支和三元运算没有直接关系,但是结果是一样的。
   2.从三元运算直接转换过来的条件分支结构和原条件分支可能不一样,但是这两个条件分支的结果是达到一个目的的。例如:
  1. #小甲鱼课后题目 第7,8课动动手第一题
  2. #原条件分支结构
  3. '''
  4. x, y, z = 6, 5, 4
  5. if x < y:
  6.     small = x
  7.     if z < small:
  8.         small = z
  9. elif y < z:
  10.     small = y
  11. else:
  12.     small = z
  13. print(small)
  14. '''
  15. #变为三元运算
  16. '''
  17. x, y, z = 6, 5, 4
  18. small = x if (x < y and x < z) else(y if y < z else z)
  19. print(small)

  20. '''
  21. #改变原条件分支结构
  22. '''

  23. x, y, z = 6, 5, 4
  24. if x < y:
  25.     if x < z:
  26.         small = x
  27. elif y < z:
  28.     small = y
  29. else:
  30.     small = z
  31. print(small)
  32. '''
复制代码


你看看原条件分支和直接转换过来的条件分支是不一样的。(说明,三元运算的上面的是原条件分支,三元下面的是直接从三元运算转换过来的条件分支)
    3.以上可以说,你不用总是原条件分支和三元运算之间转换的想法。你就单个的理解吧。但是熟练之后再相互之间转换练习一下。(转换正确的唯一标准是结果一样就行。如果你能多找到一样结果的条件分支就更好了呗。)
    4.在上面的总结上漏掉的再补补吧。你完全透彻的理解了条件分支和三元运算的情况下,程序上到底用哪个比较好,你自己选择,可能用三元容易解决问题,也有可能条件分支容易解决。如果条件分支杂乱复杂,你就不用转换成三元运算,别人看了也会晕。主要是if语句里的语块简短,这样用三元表达更加好看一点。


现在谈谈理解三元操作符的问题:

x, y, z = 6, 5, 4
small = x if (x < y and x < z) else(y if y < z else z)
print(small)

三元基本公式:(to_ture) if (expression)else (to_faulse)   :如果表达式正确,等于if前面的值,否则else后面的值

在分析升级版的:

small = x if (x < y and x < z) else(y if y < z else z)  :三元运算里只有if_else关键字,你看原条件分支有多个elif关键字,是吧。所以呢三元和原条件分支考虑问题的思路是不一样的。三元只用用if_else来考虑问题。你看有两个大括号是吧,和基本公式对应的话,前面的大括号是expression,后面的大括号是to_faulse对应。但是和to_faulse对应的还是内部三元运算,所以else执行的应该是内部三元运算,内部三元运算执行过程是,如果y<z通过,就等于if前面的值,否则else后面的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-5 11:07:36 | 显示全部楼层

给你发了,如果有疑问随时问我,只要及我所能
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 11:18:31 | 显示全部楼层
金刚 发表于 2018-4-5 11:07
给你发了,如果有疑问随时问我,只要及我所能

感谢,我先研究一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 11:28:21 | 显示全部楼层
jbsjbs1982 发表于 2018-4-5 11:18
感谢,我先研究一下

大概理解了,第二个判断条件合并到第一个判断条件一起了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-5 11:34:54 | 显示全部楼层
jbsjbs1982 发表于 2018-4-5 11:28
大概理解了,第二个判断条件合并到第一个判断条件一起了

模糊的可以继续问我,因为以上说明,我觉得有点乱,你理清之后想到的问题可以提问
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-5 11:38:29 | 显示全部楼层
jbsjbs1982 发表于 2018-4-5 11:28
大概理解了,第二个判断条件合并到第一个判断条件一起了

就是说if如果不成立,就执行后面的else,else后面的也是个条件判断了,成立就y,不成立就是z了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 11:47:53 | 显示全部楼层
金刚 发表于 2018-4-5 11:38
就是说if如果不成立,就执行后面的else,else后面的也是个条件判断了,成立就y,不成立就是z了

这道三元运算的后段部分else (y if y<z else z),这里的y应该是赋值给small,如果条件满足的话,但是加括号是什么意思?取最后结果吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-5 12:19:59 | 显示全部楼层
jbsjbs1982 发表于 2018-4-5 11:47
这道三元运算的后段部分else (y if y

加括号当然是分界线呗,别人看了清楚呀,而且也不会出错。

基本公式:x if (x < y) else y

升级版:x if (x < y and x < z) else(y if y < z else z)


这回应该对号入座了吧?只不过升级版的else后面的不是值,而还是条件分支,把这个条件分支用三元来写了。条件成立就把y赋值给small,不成立就把z赋值给small。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 12:22:44 | 显示全部楼层
金刚 发表于 2018-4-5 12:19
加括号当然是分界线呗,别人看了清楚呀,而且也不会出错。

基本公式:x if (x < y) else y

明白了,就是为了给y取值时加一个判断条件,嘿嘿,强迫症太纠结与每一个符号了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-5 12:28:38 | 显示全部楼层
jbsjbs1982 发表于 2018-4-5 11:47
这道三元运算的后段部分else (y if y

small = x if (x < y and x < z) else (y if y < z else z)

用语言描述一下吧:

这个题的目的是得到三个值的最小值,x < y and x < z,是吧。从这个,if如果成立,表明x是最小的值,如果if不成立,当然知道了x不是最小值了。所以我们现在只比较y < z了,如果成立了结果就是y,不成立就是z。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-5 12:36:46 | 显示全部楼层
jbsjbs1982 发表于 2018-4-5 12:22
明白了,就是为了给y取值时加一个判断条件,嘿嘿,强迫症太纠结与每一个符号了

其实人人都是这样,不搞好心里不舒服,只要想开了就行了,容易了,可以用了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 17:03:24 | 显示全部楼层
金刚 发表于 2018-4-5 12:36
其实人人都是这样,不搞好心里不舒服,只要想开了就行了,容易了,可以用了

是的,不想还没搞透就跳过这里学下一课,感谢你抽出时间解惑
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-29 01:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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