Python流程控制
一、顺序执行
顺序执行
- Python代码在执行过程中,遵循下面的基本原则:
- 普通语句,直接执行;
- 碰到函数,将函数体载入内存,并不直接执行
- 碰到类,执行类内部的普通语句,但是类的方法只载入,不执行
- 碰到if、for等控制语句,按相应控制流程执行
- 碰到@,break,continue等,按规定语法执行
- 碰到函数、方法调用等,转而执行函数内部代码,执行完毕继续执行原有顺序代码
程序主入口
if __name__ == '__main__':
- 首先,
__name__
是所有模块都会有的一个内置属性,一个模块的__name__
值取决于你如何调用模块。假如你有一个test.py
文件,如果在a.py
文件中使用import导入这个模块import test.py
,那么test.py
模块的__name__
属性的值就是test
,不带路径或者文件扩展名。
- 其实顺序执行,简单来说就是代码按照从上到下的顺序来执行
二、条件判断
条件判断介绍
- 条件判断是通过一条或多条判断语句的执行结果(True或者False)来决定执行的代码块。
- 在Python语法中,使用if、elif和else三个关键字来进行条件判断。
- if语句的一般形式如下所示:
if condition1: # condition1为True 执行statement_block_1
statement_block_1
elif condition2: # condition2为True 执行statement_block_2
statement_block_2
else: # 都不是的话执行 statement_block_3
statement_block_3
使用原则
- 每个条件后面要使用冒号(:)作为判断行的结尾,表示接下来是满足条件(结果为True)后要执行的语句块。
- 除了if分支必须有,elif和else分支都可以根据情况省略。
- 使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
- 顺序判断每一个分支,任何一个分支首先被命中并执行,则其后面的所有分支被忽略,直接跳过!
- 在Python中没有switch – case语句。
练习
实现猜数字游戏:
number = 20
print("猜数字")
while True:
guess = int(input("请输入你猜的数字:"))
if guess == number:
print("恭喜,你猜对了")
break
elif guess<number:
print("猜的数字太小了")
elif guess>number:
print("猜的数字太大了")
if/else语句可以嵌套,也就是把 if…elif…else 结构放在另外一个 if…elif…else 结构中。形如下面的结构:
var = 100
if var < 200:
print("比200小!")
if var == 150:
print('这是150')
elif var == 100:
print('这是100')
elif var == 50:
print('这是50')
elif var < 50:
print("比50小!")
else:
print("无法判断正确的值!")
print("Good bye!")
三、循环控制
循环控制介绍
- 循环控制,就是让程序循环运行某一段代码直到满足退出的条件,才退出循环。
- Python用关键字for和while来进行循环控制,但是没有其它语言的do…while语句(在Java和PHP中都有do while)。
while循环
while循环表达式
当程序从上至下执行时,遇到while循环语句,则会判断表达式是否成立,当成立时则会进入while循环体内,执行循环体内部执行的代码块。直到判断表达式不成立时,则终止循环。
while 判断表达式:
内部执行代码块
控制结构图
while循环练习
- 打印3次hello world
# 定义该变量,记录循环次数
i = 1
while i<=5:
# 满足条件时执行该代码
print("hello amy")
# 计数器
i += 1 # i=i+1
- 求1-100之间的总和
num_sum = 0
n = 1
end_num = 100
while n<=end_num:
# num_sum = num_sum + n
num_sum += n
n += 1
print("1到%d之和为:%d"%(end_num,num_sum))
while的else从句
while循环还可以增加一个else从句。当while循环正常执行完毕,会执行else语句。注意else与while平级的缩进方式!
number = 10
i = 0
# i = 11
while i < number:
print(i)
i += 1
else:
print("执行完毕!")
如果是被break等机制强制提前终止的循环,不会执行else语句。
number = 10
i = 0
while i < number:
print(i)
i += 1
if i == 7:
break
else:
print("执行完毕!")
for循环
for循环表达式
虽然与while一样都是循环的关键字,但for循环通常用来遍历可迭代的对象,其一般格式如下:
for <variable> in <sequence>:
<statements>
注意:for ... in ....:
属于固定格式
比如将列表[1,2,3]中的每项元素打印输出
>>> for i in [1,2,3]:
... print(i)
...
1
2
3
循环的嵌套
if判断可以嵌套,while和for当然也可以嵌套。但是建议大家不要嵌套3层以上,那样的效率会很低。
练习:实现打印输出九九乘法表
for i in range(1,10):
for j in range(1,i+1):
# print(i,j)
print("{}*{}={}".format(j,i,(j*i)),end=' ')
print("")
break语句
不论是while循环体还是for循环体执行的过程中想要退出循环体,就可以使用到break语句。
举例如下:
- while循环,在输出1-100个数值时,当n为8时,退出循环体
>>> n = 1
>>> while n<=100:
... print(n)
... n += 1
... if n == 8:
... break
...
1
2
3
4
5
6
7
- for循环,遍历range(1,10)过程中,当元素为7时,退出循环体。
>>> for i in range(1,10):
... if i == 7:
... break
... print(i)
...
1
2
3
4
5
6
continue语句
continue语句与break语句不同,continue语句用于跳过当前循环体剩余部分的代码,直接开始下一轮循环。它不会退出和终止循环。
举例如下:
- while循环,在输出1-100个数值时,不打印输出8;
>>> while n<=100:
... # print(n) # 注:如果在这块打印输出,continue对整体打印并无影响
... n+=1
... if n == 8:
... continue
... print(n)
...
2
3
4
5
6
7
9
10
...
101
- for循环,遍历range(1,10)过程中,不打印元素7。
>>> for i in range(1,10):
... if i == 7:
... continue
... print(i)
...
1
2
3
4
5
6
8
9
注意:python中的break只能跳出当前层的循环,无法全部跳出。那如果需要退出双层循环如何做?
代码如下:
flag = False # 用于控制外层循环的标志
for i in range(10):
if flag: # 当flag被内层循环设置为True的时候,跳出外层循环
break
for j in range(10):
if j==7:
flag = True
break
print(i,j)