Python 流程控制
Python 流程控制
1. 流程控制
1.1 什么是流程控制
流程控制:是计算机运算领域的用语,意指在程序运行时,个别的指令(或是陈述、子程序)运行或求值的顺序。
流程控制有三种类型:
-
顺序结构
先执行第1条语句,然后是第2条、第3条……一直到最后一条语句,这称为顺序结构
-
分支结构
-
循环结构
2. 分支结构
2.1 单if分支
语法格式 | 执行流程 |
---|---|
if 表达式: 代码块 | |
if
条件:
条件成立之后执行的子代码块
示例:
age = input("input your are age:")
if age < '18':
print("未满十八周岁,请在家长陪同下观看")
2.2 if 与else连用
| if 表达式: 代码块 1 else: 代码块 2 |
) |
| ---------------------------------------- | ----------------------------------------------------- |
| | |
如果表达式成立,就执行 if 后面紧跟的代码块1;如果表达式不成立,就执行 else 后面紧跟的代码块2
示例:
age = input("input your are age:")
if age < '18':
print("未满十八周岁,请在家长陪同下观看")
else:
print("你已满十八周岁,可以观看,但请注意身体")
if与else连用 两者的子代码永远只会执行一个
2.3 多个分支:if,elif...else
| if 表达式 1: 代码块 1 elif 表达式 2: 代码块 2 elif 表达式 3: 代码块 3 ...//其它elif语句 else: 代码块 n |
|
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| | |
if...elif...elif...else
会从上到下逐个判断表达式是否成立,一旦遇到某个成立的表达式,就执行后面紧跟的语句块;此时,剩下的代码就不再执行了,不管后面的表达式是否成立。如果所有的表达式都不成立,就执行 else 后面的代码块
weight = float(input("Enter your weight(kg):"))
height = float(input("Enter your height(m)"))
BMI = weight/(height*height)
if BMI <= 18.5:
print("体重过轻")
elif BMI <= 25:
print("体重正常")
elif BMI <= 30:
print("体重过重")
else:
print("肥胖")
elif
可以有多个三者连用也是只会其中一个子代码块.
2.4 if 嵌套
if
条件语句之间可以相互嵌套。
drunk = int(input("请输入酒精含量:"))
if drunk < 20:
print("不属于酒驾")
else:
if drunk < 80:
print("你已经酒驾")
else:
print("你已经醉驾")
2.5 练习
#1.编写一个用户登录功能 用户名是hans 密码是123
username = input("please input your username:")
passwd = input("please input your password:")
name = 'hans'
password = '123'
if username == name and passwd == password:
print("登录")
else:
print("登录失败.")
# 2.根据用户名的不同打印不同的用户身份
username = input("please input your username:")
if username == 'root':
print("%s是管理员" % username)
elif username == 'tony':
print("%s是安保人员" % username)
elif username == 'rose':
print("%s是财务" % username)
elif username == 'jack':
print("%s是销售" % username)
else:
print("%s是普通员工" % username)
#方法二
name_list = {
"root": "管理员",
"tony": "安保人员",
"jack": "销售",
"rose": "财务"
}
username = input("please input your username:")
if username in name_list:
print("%s是%s" % (username,name_list[username]))
else:
print("%s是普通员工" % username)
2.6 必知
1.条件都会转成布尔值 从而决定子代码是否执行
2.在python中 使用缩进来表示代码的从属关系
3.并不是所有的代码都可以拥有子代码
4.同属于某个代码的多行子代码 必须要保持相同的缩进量
在python中推荐使用四个空格来缩进
ps:小技巧 上一行代码的结尾如果是冒号 那么下一行代码必缩进
3. 循环结构
3.1 while循环
while 循环和 if 条件分支语句类似,即在条件(表达式)为真的情况下,会执行相应的代码块。不同之处在于,只要条件为真,while 就会一直重复执行那段代码块。
while 条件:
条件成立之后循环执行的子代码块
示例:
#打印从1到10.
#方法1:
i = 1
while (i <= 10):
print(i)
i += 1
#方法2:
i = 0
while (i < 10):
i += 1
print(i)
3.2 跳出循环break
break
:结束本层循环。即还在满足循环条件的时候手动结束循环。
#打印从1到10,当打印到5时结束循环
#不使用break方法
i = 1
while (i <= 10):
print(i)
if i == 5:
i = 11
i += 1
#使用break
i = 1
while (i <= 10):
print(i)
if i == 5:
break
i += 1
break
结束本层循环,示例
i = 1
while (i <= 10):
print(i)
if i == 5: #如果i等于5,则进入里面的循环,会暂停打印i的值
while True:
num = input("Enter anything(q is exit.):")
if num == 'q': #当用户输入q时,则结束这个循环,然后继续打印i的值
break
print(num)
i += 1
运行结果:
1
2
3
4
5
Enter anything(q is exit.):1
1
Enter anything(q is exit.):2
2
Enter anything(q is exit.):3
3
Enter anything(q is exit.):45
45
Enter anything(q is exit.):q
6
7
8
9
10
全局标志位
#即利用标志位直接结束全部循环。
Flag = True
while Flag:
num = int(input("input a num:"))
print("The num is %d" % num)
if num == 5:
while Flag:
letter = input("Enter a letter:")
print("The letter is %s" % letter)
if letter == 'z':
print("exit")
Flag = False
#使用break实现同样的功能
while True:
num = int(input("input a num:"))
print("The num is %d" % num)
if num == 5:
while True:
letter = input("Enter a letter:")
print("The letter is %s" % letter)
if letter == 'z':
print("exit")
break
break
3.3 跳出本次循环continue
continue
跳出本次循环,继续下一次循环。continue
会让循环体代码直接回到条件判断处重新判断
示例:
#while 循环打印0到10,数字4不打印
count = 0
while count <= 10:
if count == 4:
count += 1
continue
print(count)
count += 1
#执行结果:
0
1
2
3
5
6
7
8
9
10
3.4 循环+else
无论是 while 循环还是 for 循环,其后都可以紧跟着一个 else 代码块,它的作用是当循环条件为 False 跳出循环时,程序会最先执行 else 代码块中的代码。
当while循环没有被人为中断(break)的情况下才会走else。
count = 0
while count < 5:
print(count)
count += 1
else: # 这时会执行else的代码。
print("HaHa")
#执行结果:
0
1
2
3
4
HaHa
#示例2:
count = 0
while count < 5:
if count == 3:
break
print(count)
count += 1
else:
print("HaHa")
0
1
2
3.5 无限循环(死循环)
无限环境即一直循环如果没有人为干预不会结束循环,又叫死循环
示例:
while True:
print(1)
**尽量不要写出有死循环的代码,死循环会让CPU极度繁忙 甚至奔溃
3.6 for循环
for
循环能做到的事情 while
循环都可以做到
for
它常用于遍历字符串、列表、元组、字典、集合等序列类型,逐个获取序列中的各个元素。
语法格式:
for 迭代变量 in 字符串|列表|元组|字典|集合:
代码块
流程图:
示例:
#1. 用for打0到10
for i in range(11):
print(i)
#执行结果:
0
1
2
3
4
5
6
7
8
9
10
//for遍历字符串、列表、元组、字典、集合等序列类型,但在遍历字典时只能遍历key.
# 2. 遍历字典
d = {'username': "Hans", 'age': 18, 'hobby': 'study'}
for i in d:
print(i)
#结果:
username
age
hobby
#如果还要循环打印value的值:
d = {'username': "Hans", 'age': 18, 'hobby': 'study'}
for i in d:
print(i,d[i])
#执行结果:
username Hans
age 18
hobby study
#3. 遍历列表
my_list = [1,2,3,4,5]
for i in my_list:
print(i)
#执行结果
1
2
3
4
5
3.7 for循环使用break、continue和else
在for
中使用break
、continue
和else
的方法与while
一样。
3.7.1 for循环中使用break
示例:
for i in range(10):
if i == 4: #等于4直接跳出循环
break
print(i)
#执行结果:
0
1
2
3
3.7.2 for循环中使用contiue
示例:
for i in range(10):
if i == 4:
continue
print(i)
#执行结果:
0
1
2
3
5
6
7
8
9
3.7.3 for循环中使用else
示例:
for i in range(5):
print(i)
else:
print("for")
#执行结果:
0
1
2
3
4
for
for i in range(5):
if i == 2:
break
print(i)
else:
print("for")
#执行结果:
0
1
#当for循环没有被人为中断(break)的情况下才会走else。
3.8 for循环的嵌套使用
示例:
#打印九九乘法表
for i in range(10):
for j in range(1, i + 1):
print("%s * %s = %s" % (i, j, i * j), end=" ")
print()
#执行结果:
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
3.9 range()方法使用介绍
range()
在不同版本的解释器中,本质不同:
- 在
python2.X
中创建一个整数列表 - 在
python3.X
中返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表
示例:
#python2.x
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#python3.x
>>> range(10)
range(0, 10)
使用方法:
range(stop)
range(start, stop[, step])
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
示例:
# 第一种:一个参数 从0开始 顾头不顾尾
>>> for i in range(5):
... print(i)
#执行结果
0
1
2
3
4
# 第二种:两个参数 自定义起始位置 顾头不顾尾
>>> for i in range(5,10):
... print(i)
#执行结果
5
6
7
8
9
# 第三种:三个参数 第三个数字用来控制步长
>>> for i in range(1,10,2):
... print(i)
#执行结果
1
3
5
7
9
4. 练习
4.1 猜年龄
#1. 用户可以有三次猜错的机会 如果过程中猜对了直接退出
count = 0
num = 20
while count < 3:
age = int(input("Please input your age:"))
if age == num:
print("Good")
break
else:
print("come on")
count += 1
#2. 三次机会用完之后提示用户是否继续尝试 如果是则再给三次机会 如果否则直接结束
count = 0
num = 20
while count < 3:
age = input("Please input your age:")
age = int(age)
count += 1
if age == num:
print("Good")
break
elif age < num:
print("too small")
elif age > num:
print("too big")
if count == 3:
is_yes = input("Do you want to try again[y/n]:")
if is_yes == 'y':
count = 0
else:
print("Bye Bye")
4.2 打印金字塔
for i in range(1,6):
for j in range(5-i):
print(" ", end=" ")
for k in range(2 * i - 1):
print("*", end=" ")
print()
执行结果:
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *