鱼C论坛

 找回密码
 立即注册
查看: 2668|回复: 8

[已解决]课后练习题第八课三元题目疑惑不解,看了答案也不懂,求解答

[复制链接]
发表于 2020-10-12 16:31:12 | 显示全部楼层 |阅读模式

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

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

x
x, y, z = 6, 5, 4
if x < y:
&#160; &#160; small = x
&#160; &#160; if z < small:
&#160; &#160;&#160; &#160;&#160;&#160;small = z
elif y < z:
&#160; &#160; small = y
else:
&#160; &#160; small = z

如题,1、首先第一个问题:xyz都给定义了数值,下面那些条件判断是干啥的,small不就直接等于4了吗?

                 分析: if x<y,  这里是大前提
                 x = small , if z < samll ,  small = z,
                 这里用了两个if,
                 第二个if是在第一个if条件限制下进行的,y最大,X次之,Z最小,不成立就进行下个判断

           2、 elif没有缩进,这是另一种情况    ,即是x >= y 为前提,
                          elif y < z ,这时候 small = y,
                 问题二:这里若是x=y,那么系统不会判定 small = x = y?

三元操作符:三元操作符格式:i =(成立) if (条件) else (不成立)
                     当条件成立时,变量i=左边,当条件不成立时,变量i=右边。
填入以上逻辑,
             3、 small = x if (x < y and x < z) else (y if y < z else z)
                   这里的else z,为什么可以直接写进去,它不是属于第三种情况吗,和 y if y < z之间为什么不需要 or 或者and
最佳答案
2020-10-12 16:43:00
本帖最后由 昨非 于 2020-10-12 16:44 编辑

答案里:
small = x if (x < y and x < z) else (y if y < z else z)
后面小括号存在一个嵌套的三元运算,
其实不用考虑这么多的,这道题的本意是让small 等于三者的最小值,
小甲鱼老师举的例子里直接给出xyz了,所以下面的代码显得有些“多此一举”的样子
不用想这么多,分析下答案中的逻辑:
如果x小于y且小于z,small = x,没问题
当()里的东西不成立时(即:x大于y或x大于z,x直接被排除),下面就看嵌套的部分:
所以:如果y<z成立,small = y,否则等于z,完成
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-12 16:32:16 | 显示全部楼层
本帖最后由 cyrusking 于 2020-10-12 16:35 编辑

&#160; &#160;这个乱码不知道哪里来的,各位大佬忽略它
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-12 16:34:06 | 显示全部楼层
x, y, z = 6, 5, 4
if x < y:
    small = x
    if z < small:
        small = z
elif y < z:
     small = y
else:
     small = z
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 16:43:00 | 显示全部楼层    本楼为最佳答案   
本帖最后由 昨非 于 2020-10-12 16:44 编辑

答案里:
small = x if (x < y and x < z) else (y if y < z else z)
后面小括号存在一个嵌套的三元运算,
其实不用考虑这么多的,这道题的本意是让small 等于三者的最小值,
小甲鱼老师举的例子里直接给出xyz了,所以下面的代码显得有些“多此一举”的样子
不用想这么多,分析下答案中的逻辑:
如果x小于y且小于z,small = x,没问题
当()里的东西不成立时(即:x大于y或x大于z,x直接被排除),下面就看嵌套的部分:
所以:如果y<z成立,small = y,否则等于z,完成
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-12 17:25:24 | 显示全部楼层
昨非 发表于 2020-10-12 16:43
答案里:
后面小括号存在一个嵌套的三元运算,
其实不用考虑这么多的,这道题的本意是让small 等于三者的 ...

大佬你的答案很简洁明了,我就差最后一点不明白了,就最后那:
当()里的东西不成立时(即:x大于y或x大于z,x直接被排除)
不成立时,如果出现(即:X等于Y,那如果这时候X=Y>Z, 第一个括号里的结果不是为Z了吗)
难道说这道题不存在相等的情况?前面那个条件时明示呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 17:29:06 | 显示全部楼层
cyrusking 发表于 2020-10-12 17:25
大佬你的答案很简洁明了,我就差最后一点不明白了,就最后那:
当()里的东西不成立时(即:x大于y或x ...

临界条件可以把大于号改成大于等于号避免
小甲鱼老师这里没有加是因为xyz给定了
正常情况时要用到大于等于号的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 18:41:04 | 显示全部楼层
楼主人呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-13 16:03:16 | 显示全部楼层

彻底明白了,真心感谢!昨天忙其他事情了,抱歉!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-13 16:04:30 From FishC Mobile | 显示全部楼层
cyrusking 发表于 2020-10-13 16:03
彻底明白了,真心感谢!昨天忙其他事情了,抱歉!

没事的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 23:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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