Python控制流程
像大多数编程语言一样,Python中的程序结构可以分为3种基本程序结构:顺序结构、选择(分支)结构和循环结构;
顺序结构即按照代码行自然顺序从头到尾执行一遍;
选择分支结构即在某一段程序的执行路径有多条,根据实际条件会选择其中对应的路径执行;
循环结构即在满足给定条件时在某一段程序内重复执行某段代码,当不满足条件或循环体内有主动跳出循环的语句执行时结束循环;
除开选择结构和循环结构外程序整体均为顺序结构;
这里重点分析选择结构和循环结构,这两种结构都需要条件语句或一定的逻辑判断;可能会涉及到一些运算操作,关于python3的运算符,
可以参考菜鸟教程python运算符:https://www.runoob.com/python/python-operators.html
1.选择分支结构
Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false。
Python中的选择结构关键字和其他语言略有不同,但功能一致:
python中if-elif...-else相当于C语言中的if-else if...-else结构
另外需要注意,python中没有switch语句,所以只能使用if-elif...-else来进行多条件分支选择;
1.1.一般形式:
if 判断条件1:
执行语句1……
elif 判断条件2:
执行语句2……
elif 判断条件3:
执行语句3……
else:
执行语句4……
1.2.实例:
# 一个简单的成绩分段处理程序
score = float(input('请输入分数:'))
if score > 100:
print('输入异常,分数上限为100!')
elif score >= 85: # [85, 100]
print('优秀!')
elif score >= 75: # [75, 80)
print('良好!')
elif score >= 60: # [60, 75)
print('及格!')
elif score >= 0: # [0, 60)
print('不及格!')
else:
print('输入异常,请输入0~100的正数!')
# 一个输入实例:
>>> 请输入分数:78
>>> 良好!
1.3.python中的三元式:
格式:A if B else C
含义:如果B为真则取A,否则结果为C,类似于C语言的问号表达式
举例:x = 1 if a>0 else -1 # 执行时当a为1时x=1当a为-2时x=-1
注意:if-else中间不能嵌套elif
1.4.选择分支结构的嵌套:
向其他语言一样,python的if-elif...-else结构也可以嵌套,但是由于python没有像C语言和Java那样用'{}'作为分界符,
而是通过缩进确定程序结构,因此一定要注意同级分支的缩进值相同。实例:
# 对1.2实例进行了简单改造,外层条件先判断分数输入是否合法,内层再判断实际分数的结果
score = float(input('请输入分数:'))
if 0 <= score <= 100:
if score >= 85: # [85, 100]
print('优秀!')
elif score >= 75: # [75, 80)
print('良好!')
elif score >= 60: # [60, 75)
print('及格!')
else: # [0, 60)
print('不及格!')
else:
print('输入异常,请输入0~100的数字!')
2.循环结构
循环结构允许在特定条件下重复执行同一段程序多次,python中提供了while和for两种基本循环语句;
像其他语言一样,python中也可以使用break和continue两条语句控制循环的跳出和跳过本次循环;
2.1.while循环:
# 一般格式:
while 判断条件(condition):
执行语句(statements)……
即当满足判断条件时,执行循环体内的语句块,直到条件不满足退出,当然也可以通过break和continue语句控制循环的进行;
一般来说不建议使用无限循环,即 while True: 循环语句块
但是某些特定情况下又需要使用无限循环来解决问题,例如一般的游戏流程:主菜单==>游戏中==>本局游戏结束==>回到游戏主菜单
循环往复,其本质就是一个无限循环,直到选择了退出游戏或关闭了游戏窗口。
又或者服务器与客户端的一种通信策略,就是使用无限循环,接收消息==>处理消息==>回复消息==>等待接收下一条消息或关闭连接。
2.2.for循环:
# 一般格式:
for iterating_var in sequence:
statements(s)
# 通过range(start,stop,step)方法控制循环次数:
for i in range(5):
print(f'我是:{i}')
输出:
我是:0
我是:1
我是:2
我是:3
我是:4
python中的for循环不像C语言和Java那样一般依赖于循环控制变量,
python中的for循环主要是用来进行遍历可迭代序列,例如列表、字符串等;
虽然从视觉上可能有人觉得python的for循环功能弱一点,但实际像C语言中的for循环,从其应用的本质上无非就是遍历可迭代序列或者
进行重复操作;python中的for循环可以说本身就是为了进行迭代操作,而且python中提供了range方法,可以用来控制for循环的次数,
所以从本质上来讲,python的for循环与C语言的for循环功能并不差什么,反而写起来更加简洁。
应当注意:range方法的区间是前闭后开的,默认为从0开始,例如range(5)相当于区间[0,5);而range(-1, 2)相当于[-1,2)
2.3.循环嵌套
循环结构也可以进行嵌套,而且while和for两种循环可以相互嵌套,
也就是说 while可以嵌套while也可以嵌套for;for可以嵌套for,也可以嵌套while;
但要注意的是缩进问题,同级缩进值必须相同,否则可能引起程序执行逻辑与预期不符甚至出错。
2.4.循环语句的else语句
其实在python中,循环也可以使用else语句,只是我基本没怎么用过;使用时需要注意缩进,例如
while A:
语句块1
else:
语句块2
或者:
for i in range(5):
语句块1
else:
语句块1
即当循环条件不满足,即循环自然执行结束时,会首先执行else语句中的语句块2,然后再顺序向下执行
所以当使用break语句时,属于主动跳出循环,而不是循环自然执行结束,此时不会执行else子句
因此个人感觉循环的else操作使用场景有限,且作用不大,本人一般都用不到。
3.一点补充:
实际编程中,循环语句也可以嵌套条件语句,条件语句也可以嵌套循环语句,在实际编程中,应当灵活运用不同的程序结构,
先以解决问题为标准,再考虑进行优化,当然过程中遇到可以优化的点,在不影响结果的前提之下也要去考虑优化。
3.1.对于break、continue、pass的补充
在python中break、continue和pass三条语句的虽然很简单,但是却十分常用。
break和continue可以用来跳出循环和跳过本次循环,pass则是可以用来进行占位,相当于一条空语句。
有时候,必须要有一条条件分支,或者有一个预期的函数,但是暂时又不确定其应当执行的程序段,不写又无法保持程序结构的完整性。
使用pass就适用于这类情况,用于临时占位或表示什么也不做。