大家好,今天我们要学习的语法知识,称之为“流程控制语句”。
回顾前几期的课程,关于python语法,我们已经学习了常量和变量、运算符和表达式,甚至接触过几个内置函数(input()和print()),虽然我们还没有正式介绍函数的概念。前后算起来,我们已经写出不少的python代码了,并且,它们都能运行,感觉还不错吧?!
但是,我们始终会有一个疑问,因为,到目前为止,我们的程序貌似还只能原地踏步,解决一些赋值问题、运算问题,也就是解决一个表达式所能企及的范围内的问题,在宏观上,它依然只是在一个点的范畴内,就“闪耀”出那么一点小火花。当我们遇到复杂问题的时候,比如面对一个事务流程中的连续的问题,该如何解决呢?
因此,我们的语法体系,或者说我们的知识结构还需要继续丰富和完善。除了这些基本的语法定义,还要具备处理相对复杂问题的能力,这就需要引入程序的流程控制语句。
没错,这节课,我们就重点介绍python的:
一、判断语句
这个图显示的是判断语句(也成if语句)逻辑过程的一个流程图。
if 语句的基本语法结构是这样的:
if 条件判断:
语句块1
else:
语句块2
说明:看到这个语句结构,我们能想到什么?反正,我最先想到的是小学语文里学到的一个汉语语法结构:如果 ... 就 ... 否则就 ...。其实,它本来也就是这个意思,没什么深奥的东西。
# 例:6-1
将屏幕输入的字符串赋值给a变量,然后判断是否等于3,如果是,就显示“测试合格”,否则,就显示“测试结束”。
a = input('请输入:')
if a=='3':
print('测试合格!')
else:
print('测试结束!')
归纳其特点有三:
二、分支语句
if语句的变种,多重条件判断语句
if 条件判断1:
语句块1
elif 条件判断2:
语句块2
elif 条件判断3:
语句块3
else:
语句块4
说明:这个语法结构跟上一个判断语句比较,其实就是增加了几种可能性,也就是语句执行的流程增加了几个分支。其逻辑思想和逻辑关系完全一样。
# 例:6-2
将屏幕输入的字符串赋值给a变量,然后分别判断a的值是否等于1、2、3,如果是,则分别显示“入门级”、“普通级”、“精英级”,否则(如果都不是)则显示“测试结束”。
a = input (“请输入:”)
if a=='1':
print (“入门级!”)
elif a=='2':
print (“普通级!”)
elif a=='3':
print (“精英级!”)
else:
print (“测试结束!”)
归纳其特点如下:
三、循环内语句
循环语句允许我们反复执行一个语句或语句组。
(1)、while 循环
while 条件判断:
语句块1
(break)
else:
语句块2
说明:while循环语句执行的流程是这样的,当设置的条件成立时,语句块1将反复被执行。每执行一次,会检查一次条件是否继续成立?如果条件不成立了,将执行else后面的语句。在语句块1中,我们还可以设置循环终止的附加条件,如果附加条件成立,则执行(break)跳出循环,此时,语句块2也不会再执行。
# 例:6-3
这是个猜数字游戏,屏幕提示你输入字符串(将赋值给a变量),然后判断输入的(a)是否不等于‘9’,如果不等于,将继续提醒用户输入新的字符串,否则,屏幕显示“恭喜!你猜对了。”
a = input('请输入:')
while a! = '9':
print("请重新输入!")
a = input('请输入:')
else:
print("恭喜!你猜对了。")
归纳while循环语句,其特点如下:
(2)、for循环
for i_var in 序列:
语句块1
else:
语句块2
说明:for循环将遍历一个序列,从0位开始,每循环一次,取其中一个值,然后循环执行语句块1,直到序列的末尾,结束循环,再执行语句块2。
我们需要特别注意:
for循环与while循环,在循环条件的设置上,具有本质的区别。while循环的条件是一个真正的关系表达式,也就是一个逻辑判断式,它的结果只有true或false两种可能,并以此决定循环是否继续。但是,for循环很特别,它的条件判断是一个“遍历的过程”,也就是说,for循环总是将一个序列的对象拿来进行遍历(检查构成这个序列的每一个元素),直到遍历结束(检查完毕),循环才能结束。当然,在循环体内的可执行语句块中也可以包含break的跳出条件,条件成立,也可以提前终止循环,并跳出。正因为for循环这个遍历序列对象的特点,我们很多时候也把它称之为“迭代语句”,遍历的过程也成为了“迭代”的过程。
PS:除了字符串是一种序列类型的数据,今后我们还会遇到更多序列类型的数据结构。序列类型的数据有三个重要特征:(1)索引(即顺序号,并从0开始计数),(2)值:对应每一个索引序号的值,(3)长度:构成序列元素的总个数,它总是比最大索引值大1(因为索引是从0开始计数的)。例如“abc”,索引为0的是a,索引为1的是b,索引为2的是c,长度是3。
下面的示例,检查一个字符串序列,看看其中都包含哪些字符,并把它显示出来。下面例6-4直接显示出迭代过程中拿到的每一个字符,例6-5通过对索引的遍历,循环显示序列的索引和索引对应的值。
# 例:6-4
a = ”abcde”
for x in a:
print(x)
else:
print("结束了!")
# 例:6-5
a = "abcde"
for index in range(len(a)):
print(index,a[index])
else:
print("索引结束!")
PS:例6-5中用到了两个内置函数,解释如下
(1)、len()是python的一个内置函数,用于获取某序列对象的长度。
(2)、range()也是python的一个内置函数,用于创建一个从0开始的连续整数序列,该序列直到指定数字的前面那个值为止。
例如:range(6)会得到一个“0,1,2,3,4,5”的数字序列。
归纳其特点如下:
小结
这一节,我们了解了三种流程控制语句(判断、分支和循环):if ,while 和 for,及其相关的 break 与 continue 语句。这些是 Python 中最常用的语句,语法格式都很简单。
需要特别提醒,有其他语言经验的同学,python的这些流程控制语句,与其他语言(如C/C++)相比,有明显的差异。
归纳起来有如下区别:
(1)、主句(父级语句)的末尾多了一个冒号。
(2)、所有语句的末尾都没有分号。
(3)、所有的条件判断没有括号。