65655797 发表于 2022-3-3 21:15:43

零基础学习python第7、8讲动动手小疑问

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

其中在第二个if的情况下,不应该是:如果x<y则small=x,再进行判断z<small时,small=z,可是给出的答案里的判断是,当x<y并且x<z时为x,并没有使small=z这个情况
不知道是不是我的思维出错了,请大佬讲解一下

isdkz 发表于 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)

所以得把原来的代码化成这样:
x, y, z = 6, 5, 4
if x < y:
    small = x
    if z < small:
      small = z
    else:                  # 得补上结果表达式 2
      small = x
elif y < z:
    small = y
else:
    small = z

转化为三元表达式是:
small = (z if z < x else x) if x < y else y if y < z else z

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

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

原条件表达式中有嵌套的话不容易让人理解还易出错

65655797 发表于 2022-3-3 22:31:22

谢谢大佬

Python初学者8号 发表于 2022-3-3 22:38:30

就是说,这么理解哈:
先说答案奥
samll = x (if x < y and x <z) else (y if y < z else z)这里面,首先得要明白 a = b if 条件 elsec这个结构。

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

这个地方就是这么简单哈。好了,现在分析答案。既然如此,就将两个括号分别看为整体——就像数学题目一样。就是:
当条件成立时,samll = x ;
当条件不成立就是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了。

希望看的懂哦

65655797 发表于 2022-3-6 20:57:44

Python初学者8号 发表于 2022-3-3 22:38
就是说,这么理解哈:
先说答案奥
这里面,首先得要明白 a = b if 条件 elsec这个结构。


谢谢大佬细心讲解
页: [1]
查看完整版本: 零基础学习python第7、8讲动动手小疑问