大家好,欢迎来到 Crossin的编程教室 !
之前我们了解了如何用在 Python 中使用 if 语句,来根据不同的条件执行相应的代码。(《Python入门 | 假如……》)
下面我们看一个问题:
这个问题用 if 语句就可以解决,可以写 4 个 if 条件判断:
x = float(input('x:'))y = float(input('y:'))
if x > 0 and y > 0: print('第1象限')if x < 0 and y > 0: print('第2象限')if x < 0 and y < 0: print('第3象限')if x > 0 and y < 0: print('第4象限')
如果考虑上点在坐标轴上的情况,就再加上一个 if:
if x == 0 or y == 0:print('不属于任何象限')
运行效果:
x:1y:1第1象限
不过这里有更好的写法,用 elif 和 else 替代后面的4个 if:
if x > 0 and y > 0: print('第1象限')elif y > 0: print('第2象限')elif x < 0: print('第3象限')elif x > 0: print('第4象限')else: print('不属于任何象限')
elif 和 else 都是 if 语句的可选分支。
else 作用如下图所示:
if 的意思是「如果」,如果满足「条件1」,就往下执行「代码A」,不满足就不做,直接跳到后续代码;
else 的意思是「否则」,和 if 搭配起来,就是当「条件1」不满足时,不是直接跳过,而是去执行「代码B」,然后再回到后续代码。
elif 的作用如下图所示:
elif 的意思就是 else + if,在 else 的基础上增加了一次条件判断:
当「条件1」不满足时,会再判断「条件2」,和 if 一样,如果满足就执行其中的「代码B」,不满足就跳过。
if、elif、else 可以组合起来用,实现任意多种条件的判断。
要注意的是:第一条 if 必须要有,后面可以接任意多个 elif(也可以不加),最后可以加一个 else(也可以不加),表示所有没有覆盖到的情况。
上例中,用 elif 和 else 并不能减少判断条件的分支数,但是能简化条件、保证全覆盖,避免出现遗漏或重复判断的 bug。
另外,原来多个 if 的写法,每个条件判断是分别独立的,所以不管是什么值,都会判断多次;
而修改后的条件判断是一个整体,一旦发现符合条件的分支,就不需要再往下判断了。所以理论上执行效率更高。
不过,其实还有更好的写法。
if 语句可以嵌套使用,例如一个 if「条件1」的内部「代码块A」中,可以继续增加 if「条件1.1」,「条件1.1」只会在外部的「条件1」满足时才会执行。内层 if 的规则是一样的,满足「条件1.1」就执行再下一层的「代码块AA」。
if 条件1: 代码A if 条件1.1: 代码AAelif 条件2: 代码Belif 条件3: 代码Celse: 代码D
要注意,每一层代码块都要比上一层代码多增加一次缩进。
if x > 0: if y > 0: print('第1象限') else: print('第4象限')else: if y > 0: print('第2象限') else: print('第3象限')
这里用 2 层循环分别判断 x 和 y 的大小。
可以再加一层 if,判断点在坐标轴上的情况:
if x == 0 or y == 0: print('不属于任何象限')else: if x > 0: if y > 0: print('第1象限') else: print('第4象限') else: if y > 0: print('第2象限') else: print('第3象限')
最后,再分享一种奇葩的写法。
Python 里有种单行 if-else 的写法:
值1 if 条件 else 值2
如果「条件」满足,结果就是「值1」,否则就是「值2」。
并且这个语句也是可以嵌套的。所以上述问题就可以写成(右滑查看全部):
print((('第1象限' if y > 0 else '第4象限') if x > 0 else ('第2象限' if y > 0 else '第3象限')) if x*y else '不属于任何象限')
你看懂了吗?
领取专属 10元无门槛券
私享最新 技术干货