if-elif-else语句
题目概述:按照 100 分制,90 分以上成绩为 A,80 到 90 为 B,60 到 80 为 C,60 以下为 D,写一个程序,当用户输入分数,自动转换为ABCD 的形式打印。
首先我们先使用嵌套 if 语句来实现:
if(条件): …else:…语句用于控制程序的执行。
当(判断条件)成立时(非零),执行后面的语句。else 为可选语句,当条件不成立时则执行其他语句。
i = int(input('请输入分数:'))
if 90 <= i <= 100:
print('A')
else:
if 80 <= i < 90:
print('B')
else:
if 60 <= i < 80:
print('C')
else:
if 0 <= i < 60 :
print('D')
else:
print('输入错误')
这样写是完全没有问题的,但是随着条件的增加,这种缩进只会越来越多,极其影响代码的可读性与美观性,而且初学者极易因为缩进问题而产生错误。
python的代码用缩进表示从属(一般缩进为四个空格),所以python对缩进非常的敏感,对代码格式要求非常严格。
报错信息:IndentationError: unexpected indent;IndentationError: expected an indented block。
如果遇到这类报错,就可能是代码里tab和空格缩进的问题,你需要检查下tab和空格了”。
我们不妨把代码简化一下:
i = int(input('请输入分数:'))
if 90 <= i <= 100:
print('A')
if 80 <= i < 90:
print('B')
if 60 <= i < 80:
print('C')
if 0 <= i < 60 :
print('D')
if i < 0 or i > 100:
print('输入错误')
这样的写法的确美观了很多,但是由于所有的if都是并列关系,所以系统要把所有条件判断完了才会反馈答案给我们,这样的机制会极其消耗系统资源。
(当我输入100时,即使已经满足第一个if条件了,但系统并不会马上反馈A,而是把所有if条件都判断后才进行反馈)
如果使用if-elif-else语句,上面这些问题就可以迎刃而解啦。
elif 等同于 else if。
要避免嵌套结构的 if … else …,我们可以用 if … 多个elif … else … 的结构,一次写完所有的规则:
while 1: #可以循环输入
i = int(input('请输入分数:'))
if 60 <= i < 80 : #为提高效率,把平均成绩放第一
print('C') #(输入得比较多)
elif 80 <= i < 90 :
print('B')
elif 90 <= i <= 100 :
print('A')
elif 0 <= i < 60 :
print('D')
else:
print('输入错误,',end = '')
三元操作符
Python 的作者在很长一段时间不肯加入三元操作符就是怕跟 C 语言一样搞出国际乱码大赛,蛋疼的复杂度让初学者望而生畏,不过,如果你一旦搞清楚了三元操作符的使用技巧,或许一些比较复杂的问题反而迎刃而解。
请将以下代码修改为三元操作符实现:
x, y, z = 6, 5, 4
if x < y:
small = x
if z < small:
small = z
elif y < z:
small = y
else:
small = z
完成这道题之前,我们先来重温一下三元操作符。
三元操作符格式:i =(成立) if (条件) else (不成立)
当条件成立时,变量i=左边,当条件不成立时,变量i=右边。
接着我们来看一下题目:
当第一个if条件满足时,要判断第二个if(有缩进)是否满足。
if x < y:
small = x
if z < small:
small = z
到这里我们可以得出:当 x < y时=x,当 x < y且x > z时=z
当第一个if条件不满足,则要判断elif是否满足,否则执行最后语句。
elif y < z:
small = y
else:
small = z
到这里我们可以得出:当y < z时=y否则=z
我们把这几个不等式代入 i =(成立) if (条件) else (不成立)中
得出:small = x if ( x < y and x < z ) else ( y if y < z else z )
注意:x > z时=z,反推得x > z时=x,如果两个都成立则=x,反之其中一个不成立都交给下一个条件判断。