鱼C论坛

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

[已解决]零基础学习python第7、8讲动动手小疑问

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

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

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

x
动动手中第1题有点疑惑
请将以下代码修改为三元操作符实现:
  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 )
复制代码


其中在第二个if的情况下,不应该是:如果x<y则small=x,再进行判断z<small时,small=z,可是给出的答案里的判断是,当x<y并且x<z时为x,并没有使small=z这个情况
不知道是不是我的思维出错了,请大佬讲解一下
最佳答案
2022-3-3 22:02:44
本帖最后由 isdkz 于 2022-3-3 22:06 编辑

答案那种是将
if x < y:
    small = x
    if z < small:
        small = z
化为 if x < y and ! (z < x) 即 if x < y and x < z

而按你的想法:(首先三元表达式得有三要素,条件表达式,结果表达式 1,结果表达式2)

所以得把原来的代码化成这样:
  1. x, y, z = 6, 5, 4
  2. if x < y:
  3.     small = x
  4.     if z < small:
  5.         small = z
  6.     else:                  # 得补上结果表达式 2
  7.         small = x
  8. elif y < z:
  9.     small = y
  10. else:
  11.     small = z
复制代码


转化为三元表达式是:
  1. small = (z if z < x else x) if x < y else y if y < z else z
复制代码


所以你可以先化简原条件语句再转成三元表达式,也可以补全三元表达式中所需的两个结果表达式来转成三元表达式,

这两种方法都是没有问题的,不过很明显事先化简再转更不容易出错,

原条件表达式中有嵌套的话不容易让人理解还易出错
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-3 22:02:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2022-3-3 22:06 编辑

答案那种是将
if x < y:
    small = x
    if z < small:
        small = z
化为 if x < y and ! (z < x) 即 if x < y and x < z

而按你的想法:(首先三元表达式得有三要素,条件表达式,结果表达式 1,结果表达式2)

所以得把原来的代码化成这样:
  1. x, y, z = 6, 5, 4
  2. if x < y:
  3.     small = x
  4.     if z < small:
  5.         small = z
  6.     else:                  # 得补上结果表达式 2
  7.         small = x
  8. elif y < z:
  9.     small = y
  10. else:
  11.     small = z
复制代码


转化为三元表达式是:
  1. small = (z if z < x else x) if x < y else y if y < z else z
复制代码


所以你可以先化简原条件语句再转成三元表达式,也可以补全三元表达式中所需的两个结果表达式来转成三元表达式,

这两种方法都是没有问题的,不过很明显事先化简再转更不容易出错,

原条件表达式中有嵌套的话不容易让人理解还易出错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-3 22:31:22 | 显示全部楼层
谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-3 22:38:30 | 显示全部楼层
就是说,这么理解哈:
先说答案奥
  1. samll = x (if x < y and x <z) else (y if y < z else z)
复制代码
这里面,首先得要明白 a = b if 条件 else  c这个结构。

明显的是,当if成立的时候,a是赋值b,当a不成立就赋值c。这个结构就是:
  1. if 条件 :a=b
  2. else:a =c 。
复制代码


这个地方就是这么简单哈。好了,现在分析答案。既然如此,就将两个括号分别看为整体——就像数学题目一样。就是:
  1. 当条件成立时,samll = x ;
  2. 当条件不成立就是samll = y
复制代码


1  再看条件哈,当条件成立,就是x同时小于y和z,很明显是x最小啊,没毛病

2  然后当条件不成立的时候,就是要么x<y判断失效——y更小点,要么就是x <z判断失效,z更小点。好了此时,x不是最小的了吧,那咋办?那就是肯定在y和z中间选一个啊,所以在判断y和z的大小,就来到了else后面的条件,所以当y更小就是y赋值给small,反之就是z给small了。

希望看的懂哦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-6 20:57:44 | 显示全部楼层
Python初学者8号 发表于 2022-3-3 22:38
就是说,这么理解哈:
先说答案奥
这里面,首先得要明白 a = b if 条件 else  c这个结构。

谢谢大佬细心讲解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 03:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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