零基础学习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: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
所以你可以先化简原条件语句再转成三元表达式,也可以补全三元表达式中所需的两个结果表达式来转成三元表达式,
这两种方法都是没有问题的,不过很明显事先化简再转更不容易出错,
原条件表达式中有嵌套的话不容易让人理解还易出错 谢谢大佬 就是说,这么理解哈:
先说答案奥
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了。
希望看的懂哦 Python初学者8号 发表于 2022-3-3 22:38
就是说,这么理解哈:
先说答案奥
这里面,首先得要明白 a = b if 条件 elsec这个结构。
谢谢大佬细心讲解
页:
[1]