1-流程控制语句
前言
流程控制语句在Python中包括三个部分。顺序执行语句、分支执行语句(或称条件语句if/else)和循环语句(for/while),如下图所示:
条件语句
条件语句,即通过一个或多个条件的成立与否(true或false)决定执行哪些代码块。
Python中if语句用于控制程序的执行,基本形式为if/else:
if 判断条件:
执行的代码块1
else:
执行的代码块2
执行的流程是:当表达式的布尔值为真时,执行代码块1,为假时执行代码块2。
注意,冒号的下一行的缩进(四个空格)必须存在,用来标识执行代码的归属,两个代码块只能有一个被执行,这取决于哪个分支的条件成立。
示例:
score = input("enter score:")
if score > '60':
print('成绩合格')
else:
print('成绩不合格')
注意,if语句,可以单独使用,无论if条件执行与否,程序都会往下继续执行,如果if条件成立,执行其中的代码块,执行完毕,继续往下执行,如果if条件不成立,则程序直接往下执行。
但上例并不完美,如果输入一个超出范围的数字怎么办(如输入1000,-5)?所以,仅靠两个判断肯定不够,我们还要增加其他的条件来限制,使程序更加丰满。
if/elif/else
语句完美的解决了这个问题。先来了解该语句的基本形式。
if 表达式1:
执行的代码块1
elif 表达式2:
执行的代码块2
elif 表达式3:
执行的代码块3
......
else:
执行的代码块n
这种多分支语句的功能,即在多个条件下的不同分支中选择一个分支代码块来执行。
执行流程:若表达式1为真,则执行代码块1,若为假,则继续判断表达式2、判断表达式3,为真则执行其中一个代码块,若都为假,则执行最后的else语句的代码块。
让我们完善上面的成绩的例子:
score = int(input("enter score:"))
if score > 100 or score < 0:
print('你可能输入了一个来自火星的成绩 %s'%score)
elif score >= 90:
print('成绩优秀')
elif score >= 75:
print('成绩良好')
elif score >= 60:
print('马马虎虎吧')
else:
print('成绩不合格')
注意,为什么input函数要放在int函数内,还记得之前讲input的时候,说过input函数返回的是str类型么?因此,这里要转换为int类型,不然无法和int类型的成绩做判断。但这就限制了input的输入类型了,比如你输入你的名字就不行了,因为int函数无法转换。
if语句支持很多运算符来丰富条件语句,如比较运算符、成员运算符、逻辑运算符、算数运算符等。
if 3 + 2 == 5:
print('ok')
if 'a' in 'abc':
print('ok')
if嵌套
再来看if语句的嵌套形式。
有时候,一个条件成立无法满足需求,那么就要用到if 的嵌套语句了,先看基本形式。
if 今天下雨: # 代码块1,其内部的if语句无论多复杂,都属于代码块1
if 下小雨: # 分支条件
骑车回家 # 如果该分支条件成立,执行的代码块
else:
打车回家 # 分支条件不成立执行的代码块
else: # 代码块2,当代码块1条件不成立时执行的代码块
走回家
执行过程:上述逻辑就是根据今天是否下雨判断,如果今天不下雨,则执行第6行的else。而如果今天下雨这个条件成立,程序就进入代码块1中,此时,程序会再次判断根据子条件作出判断,是否是下小雨,如果是下小雨,则骑车回家,否则无论什么什么情况都是打车回家。执行过程如图2.15所示。
注意:if语句的嵌套不易过多,这样会降低代码的可读性。
我们通过示例来进一步理解if的嵌套形式,首先来看示例1:
num = int(input(">>>"))
if num < 10:
if num == 3:
print('输入正确')
else:
print('再接再厉')
else:
print('输入错误')
上例中,首先在第1行获取用户的输入,为了后续判断,直接将字符串类型的值转换为整数类型。当用户在输入数字后,程序执行第2行的if判断,如果输入的数值小于10,程序执行该if语句中的代码块,进入子条件判断,如果输入的值等于3,打印“输入正确”,否则打印“再接再厉”。如果输入的值大于10,则直接执行第7行的语句,打印“输入错误”。
再来看示例2:
num = int(input('请输入一个数字:'))
if num < 10:
if num < 5:
print('你输入的 %s 比 5 小' % num)
elif num > 5:
print('你输入的是 %s 比 5 大' % num)
else:
print('good,输入正确 %s' % num)
else:
print('老铁别乱来:%s' % num)
上例中,在第一个示例的基础上,增加了子条件判断,如果输入的数值小于10,进入第3~8行的子条件判断语句块。如果这个值小于5提示“你输入的值比5小”,至于“%s”会将你输入的值填入到打印的句子中,后续章节会详细讲解。如果输入的值大于5则提示“你输入的值比5大”。只有当输入的值是5的时候,才会提示“good,输入正确”。如果最开始输入的值比10大,程序执行第9行的语句块,提示“老铁别乱来”。
接下来,我们再了解一种不推荐的写法:
num = int(input(">>>"))
if num == 3: print('输入正确')
我们不推荐这种写法,因为在一个物理行上写多个逻辑行代码,这样会降低代码的可读性。
循环语句之while循环
循环语句,顾名思义,就是一个语句可以被重复执行多次,Python为循环语句提供两种循环方式:while循环和for循环。先来看while循环,其语法基本形式如下。
while 表达式:
循环体
示例,我们打印oldboy三次:
>>> count = 0
>>> while count < 3:
... print('oldboy')
... count += 1
...
oldboy
oldboy
oldboy
执行流程:
count的初始值为0,进入while循环,第一次判断表达式成立,执行循环体:
print('oldboy')
count += 1
执行完毕,count=1。再次进入循环,条件仍为真(count<3),继续执行,每次count的值都会加1,直到第三次,count=3,进入循环判断,此时表达式条件为假,直接退出循环,程序往下运行(由于后面没代码,所以程序结束)。
接下来我们先试着通过while循环计算1+2+3+……+100的值:
count = 0 # 循环中的变量
sum = 0 # 用于求和
while count < 100: # 当count小于100的时候,while循环执行
count = count + 1
# print(count) # 每次count值都会加一
sum = sum + count # sum都会加上count值
print(sum)
# 或者简写为下面这种方式
count = 0
sum = 0
while count < 100:
count += 1
sum += count
print(sum)
上例,首先定义两个变量,初始值都为0,第一次循环,首先执行第4行的count加1操作,然后第5行的sum加上此次循环count值等于1。第二次count值为2,sum值为1,执行第4~5行的赋值操作,此时sum在原来的基础上加上count值为3。在每次循环中,count都加上1,而sum则都加上count值,最后当count等于100的时候,while循环结束。执行第7行的打印,我们就能得出最终的sum值。
循环还有一种形式,我们称为死循环(或无限循环)。例如,while的布尔值不变,程序就会陷入死循环。
while True:
print('ok')
注意:如果运行上例代码,就会发现程序是不是停不下来了?没错,这就是死循环。我们在编写代码的时候后,如无必要,应注意避免死循环的产生。
循环语句之for循环
Python的for循环可以遍历任何序列类型,如下一章我们重点讲的列表、字典、字符串,而不是像while一样通过条件判断实现的循环。
for循环的基本形式为:
for 变量(i) in 可迭代对象:
循环体
执行过程:
将迭代对象的第一个元素赋值给变量i
,然后执行一次循环体;执行结束后,再将迭代对象的第二个元素赋值给变量i
,再执行一次循环体.....直到取出迭代对象的所有元素。
关键点:循环次数取决于迭代对象内有多少元素。
有了for循环,我们在处理序列类型的数据就方便多了,比如循环打印一串字符串的每个字符。
str1 = 'oldboyisstrongman'
for i in str1:
print(i)
执行流程:
在for循环的时候,先将可迭代对象,即字符串中的第一个字符o
赋值给变量i
,然后执行循环体,打印这个字符,然后进入第二次循环,将字符串中的第二个字符l
再次赋值给变量i
,再执行打印,以此类推,循环打印整个字符串。
关于for循环的更多细节,我们会在后续的章节中展开讲解。我们暂时会用即可。
循环嵌套
在Python中,我们可以在while循环中嵌套while循环,也可嵌套for循环。反之,我们也可以在for循环中嵌套for循环,也可以嵌套while循环。
count = 0
while count < 3:
num = 0
while num <= 3:
print('*' * num)
num += 1
count += 1
break语句
break语句用来终止循环语句,即使循环条件依然成立,碰到break语句也会终止循环。
break语句用在for和while循环中,如果当前的循环是嵌套类型的循环,break语句将停止执行包含break语句的循环。
示例,打印字符串,遇到h
时终止循环。
for i in 'python':
if i == 'h':
print(i)
break
print(i)
执行流程:
for循环字符串,拿到第一个字符赋值给i拿去和if做判断,条件为假,不执行if内的代码块,而是往下执行,输出这个字符,程序进入第二次循环,依次作比较,当拿到的字符符合if的条件时,执行if内的代码块,打印这个字符,然后遇到break语句,结束循环,程序也随之结束,不执行后面的代码。
来看break在嵌套循环中的应用:
count = 0
while count < 3:
for i in 'python':
if i == 'h':
print(i)
break
print(i)
if count == 2:
break
count += 1
"""
p
y
t
h
p
y
t
h
p
y
t
h
"""
正如上例所示,在while循环中的for循环内,每次打印到h
的时候,for循环都会结束,但此时的while循环不会结束,也就是说,当执行打印到h
的时候,break结束的是包含它的for循环,而不会结束最外层循环的while循环。而在while循环中,当count等于2的时候,break结束的是while循环,而不是for循环。
所以说,在嵌套循环中break结束的是包含break语句的循环。说白了,break结束的是它所属的上一层代码块。
continue语句
break语句结束所在循环,而continue语句则是结束当前循环执行的剩下的代码,继续执行下次循环。continue语句在for和while循环中都适用。
for i in 'python':
if i == 'h':
continue
print(i)
执行流程:
for循环字符串,拿到第一个字符赋值给i拿去和if做判断,条件为假,不执行if内的代码块,而是往下执行,输出这个字符,程序进入第二次循环,依次作比较,当拿到的字符符合if的条件时,执行if内的代码块,continue跳出本次循环,结束了本次循环,程序继续往下执行,循环打印剩下的字符。
小结:通过两个例子,对比学习break语句和continue语句的区别,一句话总结两个语句,break语句跳出整个循环,程序结束执行后续的代码,跳出循环;而continue语句只结束当前循环执行的代码,但程序会继续往下执行,并不会结束。
pass语句
pass语句意为正在等待完成的任务或功能。就是说pass是空的语句,不执行具体的功能,只是为了保持程序的完整性,比如我们要实现一个登录登出的功能,是不是先定义有这两个功能的程序,我们着手写登录的功能,把登出的功能先放那,不完善具体的登出细节,就用到了pass语句了,后面我们在程序中会用到pass语句。记住一句话,pass是空语句,保证程序的完整性,我们有这个功能,但这个功能的细节,我们先不做描述。
i = 0
while i < 10:
if i == 3:
pass
print(i)
i += 1
上面的代码示例中,pass语句这个代码块,意思就是我还没想好要干啥,但什么都不写程序不完整,无法执行,所以用到了pass空语句。
欢迎斧正,that's all