鱼C论坛

 找回密码
 立即注册
查看: 757|回复: 10

[已解决]三元操作符 分解步骤

[复制链接]
发表于 2019-11-12 10:14:29 | 显示全部楼层 |阅读模式

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

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

x

请将以下代码修改为三元操作符实现:
x, y, z = 6, 5, 4
if x < y:
    small = x
    if z < small:
        small = z
elif y < z:
    small = y
else:
    small = z
答案是:small = x if (x < y and x < z) else (y if y < z else z)  
可以给我个分解步骤吗   万分感谢  看了好久都看不懂ORZ
最佳答案
2019-11-12 23:55:40
咱们首先,把三元操作符的语句块确定下来:
  1. ('条件判断为真时的处理') if ('条件的表达式') else ('条件判断为假时的处理')
复制代码

那么,分析原来的长篇代码:
首先判断 x 是否小于 y ,
        如果小于,那么先认为 x 是最小的数,
        再判断 z 是不是比它还小,
                如果确实比他小,那么就可以确定最小的是 z
否则,判断 y 是否小于 z
        如果小于,那么可以肯定 y 是最小的数,因为 x 不可能比 y 大,而 y 又是剩下的相对小的那个
再不然,就只能是 z 最小了,因为别的不可能比它大

综上所述,在 x < y 并且 x < z 的时候,最小值为 x 。先打出最小值为 x 那部分:
  1. (x) if (x < y and x < z) else ()
复制代码

那么最小值不是 x 的时候呢?
无非两种情况,y 或者 z 是最小值,
按照字母表的顺序,接下来是 y ,那么这个时候,y 怎么能是最小值呢?
y < z 的时候。
于是得出:
  1. (x) if (x < y and x < z) else ((y) if (y < z) else ())  
复制代码

最后剩下个 z 添到后边:
  1. (x) if (x < y and x < z) else ((y) if (y < z) else (z))  
复制代码

把可以省去的括号,给它省去、删掉,就得了
  1. x if (x < y and x < z) else (y if y < z else z)
复制代码

如此,可以得到一个最小值,但仅仅是把数给找到了,并没有作答,相当于算个算数算半天,得到答案了,可是没写上,第二天交作业的时候,老师就问怎么没做作业啊?这时候多冤呐?
所以咱还得把该记的给写上,得赋值,于是就成了:
  1. small = x if (x < y and x < z) else (y if y < z else z)
复制代码

你要是一字一句,仔仔细细看完了,我相信你能看懂也有耐心,我也相信我写的明白。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-12 10:29:58 | 显示全部楼层
首先,这个问题是要找出x,y,z三个数字中最小的那一个。这里有3个数字,要找出最小的那一个,要进行一个俩俩比较的过程。

请将以下代码修改为三元操作符实现:
x, y, z = 6, 5, 4  #x=6, y=5, z=4
if x < y:            
    small = x       #如果x<y, 那么x就是x和y两个数字中最小的那个,所以把x放进small这个变量中
    if z < small:   
        small = z   #如果z<small,也就是z<上面的x,那么z就是最小的那个数字,所以把z代替x放进small这个变量中
elif y < z:         
    small = y       #或者如果以上条件不满足,也就是x不是<y,但是y<z,那么此时最小的数字就是y
else:
    small = z       #如果以上都不符合,那么就是z最小了
答案是:small = x if (x < y and x < z) else (y if y < z else z)
答案里面为,先判断第一个if括号里面的内容,如果x<y,并且x<z,那么x就是最小的。如果第一个if不满足,那么判断第二个,此时如果y<z,那么y就是最小的。如果以上两种都不符合,那么显然z就是最小的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-12 12:14:12 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-12 12:22 编辑
  1. small = x if (x < y and x < z) else (y if y < z else z)
复制代码

        完全解析如下:
  1. if x < y and x < z:  # 如果 x 最小
  2.     small = x
  3. else:                # 否则,x 不最小,最小的就是 y 或 z
  4.     if y < z:        # 如果 y 小
  5.         small = y    # 那就是 y
  6.     else:            # 否则
  7.         small = z    # 无疑是 z
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-12 23:55:40 | 显示全部楼层    本楼为最佳答案   
咱们首先,把三元操作符的语句块确定下来:
  1. ('条件判断为真时的处理') if ('条件的表达式') else ('条件判断为假时的处理')
复制代码

那么,分析原来的长篇代码:
首先判断 x 是否小于 y ,
        如果小于,那么先认为 x 是最小的数,
        再判断 z 是不是比它还小,
                如果确实比他小,那么就可以确定最小的是 z
否则,判断 y 是否小于 z
        如果小于,那么可以肯定 y 是最小的数,因为 x 不可能比 y 大,而 y 又是剩下的相对小的那个
再不然,就只能是 z 最小了,因为别的不可能比它大

综上所述,在 x < y 并且 x < z 的时候,最小值为 x 。先打出最小值为 x 那部分:
  1. (x) if (x < y and x < z) else ()
复制代码

那么最小值不是 x 的时候呢?
无非两种情况,y 或者 z 是最小值,
按照字母表的顺序,接下来是 y ,那么这个时候,y 怎么能是最小值呢?
y < z 的时候。
于是得出:
  1. (x) if (x < y and x < z) else ((y) if (y < z) else ())  
复制代码

最后剩下个 z 添到后边:
  1. (x) if (x < y and x < z) else ((y) if (y < z) else (z))  
复制代码

把可以省去的括号,给它省去、删掉,就得了
  1. x if (x < y and x < z) else (y if y < z else z)
复制代码

如此,可以得到一个最小值,但仅仅是把数给找到了,并没有作答,相当于算个算数算半天,得到答案了,可是没写上,第二天交作业的时候,老师就问怎么没做作业啊?这时候多冤呐?
所以咱还得把该记的给写上,得赋值,于是就成了:
  1. small = x if (x < y and x < z) else (y if y < z else z)
复制代码

你要是一字一句,仔仔细细看完了,我相信你能看懂也有耐心,我也相信我写的明白。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-11-13 00:05:31 | 显示全部楼层
  1. c = 6 if a > b else 10
复制代码
   
条件为真,返回前面,为假返回后面,有括号的优先,把括号里面的判出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-13 09:00:51 | 显示全部楼层
阴阳神万物主 发表于 2019-11-12 23:55
咱们首先,把三元操作符的语句块确定下来:

那么,分析原来的长篇代码:

谢谢你   我真的要慢慢看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-13 10:20:38 | 显示全部楼层

很谢谢你  还把循环还原了  我就是看不懂循环的匹配  谢谢  我自己慢慢去看  不行我再看多一次elif循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-14 12:50:55 | 显示全部楼层
我也是看不懂这个,感谢你先问了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-22 22:03:22 | 显示全部楼层
感谢感谢,看这个帖子看懂了!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 22:54:46 | 显示全部楼层
阴阳神万物主 发表于 2019-11-12 23:55
咱们首先,把三元操作符的语句块确定下来:

那么,分析原来的长篇代码:

谢谢大神!!! 困扰我好久 终于看懂了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-18 19:38:50 | 显示全部楼层
阴阳神万物主 发表于 2019-11-12 23:55
咱们首先,把三元操作符的语句块确定下来:

那么,分析原来的长篇代码:

感谢大佬的解答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 10:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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