这里来介绍一种重要的程序控制语句:条件判断语句。
到目前为止,我们所学习的Python都是采取一条语句接着一条语句的方式来组织,代码的执行也是按照书写的次序依次进行,这种代码语句的组织方法可以称为顺序语句。
而所谓控制语句,是指一些改变传统顺序执行方式的代码组织方法,比如有时我们希望有些语句不一定会被执行,甚至允许在条件允许时被多次执行。具体包括条件判断语句和循环语句,实践和理论已经证明,借助于顺序语句、条件判断语句和循环语句,我们可以表达出任何可以表达的运算逻辑和应用功能。
代码就是按照语句的先后次序一条一条的被执行。但是有时候,我们需要更为灵活的执行代码方式。比如在数据分析时,我们常常要根据数据的类型来选择不同的处理方法,这些处理代码在每次运行时都不必全部被执行,而是有选择的被执行。这就是条件判断的意义。条件判断可以让我们具有选择执行代码的能力,使得不同的代码在不同的条件下被执行。就像火车经过铁路,有时走这边,有时走那边,但是一次只走一条道。
我们通过一个例子的讲解,来看看如何实现条件判断。
这里最终要完成一个练习,对一个班所有学生的平均成绩做出五级评分认定,比如按照90、80、70、60四个分数点,分别划分为优、良、中、及格和不及格五个分数段。
为了使得大家能够上手,我们先从一个最简单的例子开始。比如允许用户输入一个成绩,判断是否及格。
grade = int(input())
输入很简单,这里使用了grade变量存储这个成绩。
如何判断呢?在Python语言中,可以通过if这个语句来进行,if就是如果的意思,想想看,如果把接下来的程序写成汉字版本,应该是:
编程其实就是将我们解决问题的思路进行计算机化,只要你把思路理清楚了,就可以按照计算机所理解的格式重新表达。比如上述全部思路写成Python代码就是:
grade = int(input())
if grade >= 60:
print('及格')
if grade < 60:
print('不及格')
此时如果输入大于等于60分的整数,就会输出“及格”,小于60分就会输出“不及格”。
由于Python语言区分大小写,所以请大家不要随意大写。if如果后面就是条件,比如大于等于60分,注意这个大于等于的写法,同样也要注意下面那个小于的写法。条件不管怎么写,无非两个结果,一个是对的,即真,一个是错的,即假,因此条件的结果将产生一个布尔型的数值。如果是对的话,就执行下面语句块中的内容。最后不要忘记,那个必须的冒号需要作为条件的结束符。
在这里,Python采用了代码缩进的方式来表示满足条件后需要执行的语句,具体缩进可以使用多个空格(一般在PyCharm中为4个)或者Tab。因此,我们在书写其他Python代码时,不要轻易在代码前面缩进,否则会产生意外缩进(unexpected indent)的错误,比如:
同时,该需要缩进的地方也不能省略缩进,错误提示为需要一个缩进:
不过大家想一想,如果一个成绩已经判断是及格的话,是否还有必要再次判断是否小于60分?显然没有必要。事实上,这两个条件是互补的,在这种情况下,我们可以将思路写成:
此时对应的代码可以写成:
grade = int(input())
if grade >= 60:
print('及格')
else:
print('不及格')
这个else可以理解为“否则”的意思。这样更简单,而且效率更高,一旦if条件满足了,执行完相应的语句块输出及格后,就不会再次进行不必要的判断了。
再次请注意else最后的那个必须的冒号。可能大家会认为这些冒号似乎没用,其实它主要用于分割条件和相应的执行语句,比如写成下面的形式也可以:
grade = int(input())
if grade >= 60: print('及格')
else: print('不及格')
代码功能一样,此时冒号的分割作用非常明显。甚至可以采用一种将if语句放置在其他语句中间的方法来实现同样的效果:
grade = int(input())
print('及格' if grade >= 60 else '不及格')
代码功能仍然一样,相当于把判断和所在的输出合并起来,大家可以对照着写出其他类似的语句。当然我们不建议初学者这样书写,必要的换行常常可以增强代码的可读性。
再次强调下代码缩进的用法。我们不妨来看个练习:
grade = int(input())
if grade >= 60:
print('及格')
print('!')
else:
print('不及格')
当我们输入61时,你会发现输出有“及格”和“!”两个内容。原因在于当grade大于等于60时,会执行下面多条缩进的语句。
如果此时将输出“!”的语句删除缩进而顶格书写:
grade = int(input())
if grade >= 60:
print('及格')
print('!')
else:
print('不及格')
代码将报错,错误是无效的语法(invalid syntax),原因在于这个顶头开始的“!”输出语句表示上面的if语句已经结束,因此该语句和if语句是并列顺序执行的关系。这个确实没有问题,但是下面的else将缺乏对应的if而产生错误。因此,虽然缩进是输出感叹号的语句,但是真正产生错误的确实下面的else,这需要我们在排查错误时往往要全局看才能准确了解出错的地方和原因。
配套学习资源、慕课视频: