Python的流程控制

说明

.py 文件中的每条语句都是顺序执行的,从第一条语句开始逐行执行。实际上函数、方法调用或控制结构都可以使控制流转向,比如条件分支或循环语句。有意外产生时控制流也会被转向

布尔表达式实际上就是对某对象进行布尔运算,并可以产生一个布尔值结果( TrueFalse )。在 Python 中,预定义为常量 False 的布尔表达式、特殊对象 None 、空序列或集合(比如空字符串、列表或元组)、值为 0 的数值型数据项等的布尔结果为 False, 其他的则为 True。创建自定义数据类型时,我们可以自己决定这些自定义数据类型在布尔上下文中的返回值

在 Python 中,一块代码,也就是说一条或多条语句组成的序列称为 suite 。由于 Python 中的某些语法要求存在一个 suite,Python 就提供了关键字 passpass 实际上是一条空语句,不进行任何操作,可以用在需要 suite (或者需要指明我们己经考虑了特殊情况)但又不需要进行处理的地方

选择语句 if

Python 常规的 if 语法如下

1
2
3
4
5
6
7
if boolean_expression 1: 
suite1
elif boolean一expression2:
suite2
elif boolean_expressionN:
suiteN
else_suite

示例:实现一个猜年龄的游戏

1
2
3
4
5
6
7
8
9
10
11
# -*- coding:utf-8 -*-
my_age = 18

input_age = int(input("请猜一猜我的年龄:"))

if input_age == my_age:
print("猜对了!")
elif input_age < my_age:
print("猜的太大了")
else:
print("猜的太小了")

循环语句

  • 有限循环:有次数限制的循环
  • 无限循环:没有次数限制的循环,即死循环
  • 流程控制
    • continue:结束本次循环,继续进行下一次循环
    • break:跳出当前的循环
  • for 循环只能是有限循环,while 循环可以是有限循环也可以是无限循环

while

while 语句用于0次或多次执行某个 suite ,循环执行的次数取决于 while 循环中布尔表达式的状态

1
2
while boolean_expression:
suite

只有条件不成立时退出循环,如果条件为真则循环就没有停止的时候,成为一个死循环

1
2
3
4
5
while True: 
item = get_next_item()
if not item:
break
process_item(item)

while 循环具有非常典型的结构,只要还存在需要处理的数据项,就一直循环 ( get_next_item()process_item() 都是在某处定义的自定义函数)。在上面的实例中, while 语句的 suite 中包含了一条 if 语句,该 if 语句本身又包含了自己的 suite,因此在这一实例中必须包含一条 break 语句

上面的猜年龄游戏,每执行一次用户就输入一次数字,程序就会判断一个结果,之后程序就结束了。然而这样并不好,程序应该是一直让用户输入数字,一直到用户输入的数字正确:

1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding:utf-8 -*-

my_age = 18

input_age = int(input("请猜一猜我的年龄:"))

while input_age != my_age:
if input_age < my_age:
print("猜的太小了")
else:
print("猜的太大了")
input_age = int(input("请猜一猜我的年龄:"))
print("猜对了!")

break

结束当前的循环,不支持接收参数。在死循环中,也可以通过设置一定的条件来结束循环

例如:输出 1 到 10,但是当输出到 5 时不再执行循环

1
2
3
4
5
6
7
8
9
# -*- coding:utf-8 -*-

num = 1
while num <= 10:
print("当前数字是", num)
if num == 5:
break
num = num + 1
print("现在数字变成了:", num)

continue

结束本次循环,进行下一次循环

例如:输出1-100之间的所有奇数

1
2
3
4
5
6
7
8
# -*- coding:utf-8 -*-

num = 0
while num < 100:
num = num + 1
if num % 2 == 0:
continue
print(num)

while中的else

while循环中的 else 语句比较特殊,这里的 else 语句,只有在循环正常结束的时候才会执行,什么意思呢?意思就是说如果我们的 while 循环在执行过程中中断了,也就是说执行了break语句,这里的 else 语句就不会被执行

1
2
3
4
5
# while循环结构
while 判断条件:
执行语句……
else:
执行语句……

示例

循环没有被中断

1
2
3
4
5
6
7
8
num = 0
while num < 10:
num = num + 1
if num % 2 == 0:
continue
print(num)
else:
print("else-----")

循环被中断

1
2
3
4
5
6
7
8
num = 0
while num < 10:
num = num + 1
if num % 2 == 0:
break
print(num)
else:
print("else-----")

序列

  • 序列就是按照一定的顺序排列起来的一组元素,range() 语句用来生成一组数字
1
2
3
4
5
6
7
8
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 就像队伍一样,还是有按照顺序来排列的,每个元素不是在其他元素之前就是在其之后

>>> range(1,10) # range()生成的数字默认从0开始,也可以是指定起始值。
[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(1,10,2) # 还可以指定步长
[1, 3, 5, 7, 9]
  • rang() 的用法:
1
2
3
4
5
6
range(stop) 
#stop为结束位置,列出从0到stop之前的所有整数

range(start, stop[, step])
#start表示起始数字,stop表示结束数字,stop表示每两个相邻数字之间的差,也叫步长
#列出从start开始,到stop之前所有的数字

for

Python 的 for 循环语句重用了关键字 in ,与 while 循环类似,for 循环也支持 break 语句与 continue 语句,也包含可选的 else 分支

  • 循环结构
1
2
for var in sequence:
statements(s)
  • 示例
1
2
for i in range(10):
print(i)
  • 九九乘法表
1
2
3
4
5
for row in range(1, 10):
for col in range(1, 10):
if col <= row:
print('%s x %s = %-2s' % (col, row, col * row), end=' ')
print()

练习

输入用户名和密码做认证,如果输错三次则退出,正确则输出欢迎登录

  • 版本一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -*- coding: utf-8 -*-

username = 'root'
password = '123456'

true_or_false = False # 标志位

for i in range(3):
input_username = input("Username : ")
input_password = input("Password : ")
if input_username == username and input_password == password:
print("Welcome %s login in " % username)
true_or_false = True
break
else:
print("Invalid username or password !")

if not true_or_false:
print("Too many failures ")
  • 版本二
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# -*- coding: utf-8 -*-

username = 'root'
password = '123456'

for i in range(3):
input_username = input("Username : ")
input_password = input("Password : ")
if input_username == username and input_password == password:
print("Welcome %s login in " % username)
true_or_false = True
break # 跳出,中断。break for 过后就不会执行最后面的 else
else:
print("Invalid username or password !")
else: # 只要上面的 for 循环正常执行完毕,中间没有被打断,就会执行 else
print("Too many failures ")
  • 版本三
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# -*- coding: utf-8 -*-

username = 'root'
password = '123456'

counter = 0
while counter < 3: # 当条件成立(True),才会执行循环体中的代码
input_username = input("Username : ")
input_password = input("Password : ")
if input_username == username and input_password == password:
print("Welcome %s login in " % username)
break
else:
print("Invalid username or password !")
counter += 1
else:
print("Too many failures ")
有钱任性,请我吃包辣条
0%