流程控制语句
前言
流程控制语句介绍:
- 它就是用来控制Python代码执行的, 先执行谁, 后执行谁, 不执行谁, 重复执行谁等…
一、顺序结构
- 默认结构
- 代码会按照 从上往下, 从左往右, 依次逐行 执行.
二、分支结构(if 语句)
1、if 单分支
"""
1、作用:
它适用于条件的判断, 即: 满足特定条件的情况下, 才会去执行对应的代码.
2、格式:
if 条件表达式:
语句体
3、执行流程:
3.1. 先执行条件表达式, 看其是否成立.
3.2. 如果成立, 则: 执行对应的语句体.
3.3. 如果不成立, 则: 什么都不做.
"""
# 例1: if格式演示.
a = 10
# if a > 3:
if a < 5:
print('if 语句体1')
print('if 语句体2')
print('因为我和if是对齐的, 所以我们是平级, 无论if判断条件是否成立, 我都会执行!')
# 例2:键盘录入数字,如果比18大,就输出你已经成年
# 1.键盘录入年龄, 并接收
# age = input('请录入您的年龄: ') # 接收到的是: 字符串
# 所以我们要转成整数
age = int(input('请录入您的年龄: ')) # 字符串值 => 整数值
# 2.判断年龄是否 不小于18岁
if age >= 18:
# 3.如果满足就输出: 你已经成年!
# 走到这里, 说明条件满足.
print('你已经成年!')
2、if 双分支
1、概述:
属于if语句的一种写法, 主要用于 两种情况的判断, 即: 要么A, 否则B.
2、格式:
if 判断条件:
语句体1
else:
语句体2
执行流程:
1. 先执行判断条件, 看其是否成立.
2. 如果成立(True), 则执行: 语句体1, 然后整个if语句结束.
3. 如果不成立(False), 则执行: 语句体2, 然后整个if语句结束.
3、要注意
else 默认有 if 条件的 反条件. 在以后做题的时候可以更灵活一些
# 需求: 键盘录入身高(cm), 如果没有超过150cm, 进动物园不用买票, 否则要买票.
# 1. 键盘录入身高, 并接收, 记得转成: int.
height = int(input('请录入您的身高: '))
# 2. 判断是否 超过 150cm, 如果没有超过, 无需买票.
if height <= 150:
print('可以进动物园了, 无需买票')
else:
# 3. 否则, 需要买票.
print('您太高了, 需要买票才能进入动物园!')
3、if 多分支
"""
1、概述:
它是分支结构if语句的一种写法, 适用于 多情况 的判断.
2、格式:
if 条件1:
语句体1
elif 条件2:
语句体2
elif 条件3:
语句体3
......
else:
语句体n
3、执行流程:
3.1. 先执行条件1, 看其是否成立, 成立则执行语句体1, 然后整个if语句结束.
3.2. 如果条件1不成立, 则执行条件2, 看其是否成立, 成立则执行语句体2, 然后整个if语句结束.
3.3. 如果条件2不成立, 则执行条件3, 看其是否成立, 成立则执行语句体3, 然后整个if语句结束.
3.4. 重复上述的步骤, 如果所有的判断条件都不成立, 则执行 最后1个else的 语句体n, 至此, if语句结束.
4、细节:
4.1. 根据需求 elif 可以写多个.
4.2. 最后的else语句可以省略不写, 但是它代表着所有条件都不成立的情况, 所以建议加上.
4.3. 以后测试数据的时候, 建议测试三种值:
和法值.
边界值.
非法值.
"""
# 需求: 根据考试成立, 发放奖励.
"""
成绩 奖励
90 ~ 100 奖励: 游乐场套票一张
80 ~ 89 奖励: 游乐场半天游
70 ~ 79 奖励: 博物馆全天游
60 ~ 69 奖励: 全套练习题
0 ~ 59 奖励: 口头激励
"""
# 1. 提示用户录入他/她的考试成绩, 并接收, 记得转成: 整数.
score = eval(input('请录入您的考试成绩: '))
# 2. 根据考试成立发放奖励.
# 写法1: 普通版.
if score >= 90 and score <= 100:
print('奖励: 游乐场套票一张')
elif score >= 80 and score < 90:
print('奖励: 游乐场半天游')
elif score >= 70 and score < 80:
print('奖励: 博物馆全天游')
elif score >= 60 and score < 70:
print('奖励: 全套练习题')
else:
print('奖励: 口头激励')
print('-' * 28)
# 写法2: Python独有版.
if 90 <= score <= 100:
print('奖励: 游乐场套票一张')
elif 80 <= score < 90:
print('奖励: 游乐场半天游')
elif 70 <= score < 80:
print('奖励: 博物馆全天游')
elif 60 <= score < 70:
print('奖励: 全套练习题')
elif 00 <= score < 60:
print('奖励: 口头激励')
else:
print('成绩无效, 男女混打 + 扫帚棒法!')
print('-' * 28)
# 写法3: 实际开发版, 能看懂即可.
if score < 0 or score > 100: # 非法值校验
print('成绩无效, 男女混打 + 扫帚棒法!')
elif score >= 90: # else的默认条件: score >= 0 and score <= 100
print('奖励: 游乐场套票一张')
elif score >= 80: # else的默认条件: score >= 0 and score < 90
print('奖励: 游乐场半天游')
elif score >= 70: # else的默认条件: score >= 0 and score < 80
print('奖励: 博物馆全天游')
elif score >= 60: # else的默认条件: score >= 0 and score < 70
print('奖励: 全套练习题')
else: # else的默认条件: score >= 0 and score < 60
print('奖励: 口头激励')
4、if 嵌套
"""
1、概述:
它指的是 1个if语句的 语句体 是 另1个if语句.
2、 格式:
if 条件1:
语句体1
if 条件:
语句体
......
else:
语句体2
if 条件:
语句体
......
"""
# 需求: 坐公交车, 有座位可以坐下.
# 要求: 输入公交卡当前的余额, 只要够2元, 就可以上公交车. 如果车上有空座位, 就可以坐下.
# 1. 提示用户录入公交卡的余额, 并接收, 记得转成: 整数.
money = eval(input('请录入公交卡的余额: '))
# 2. 判断公交卡的余额是否 够2元, 如果够: 则可以上车.
if money >= 2:
print('滴, 刷卡成功, 请上车!')
# 4. 提示用户录入空座位的情况, 并接收.
seat = int(input('请录入空座位数量: '))
# 5. 判断是否有空座位, 如果有, 则可以坐下.
if seat > 0:
print('有空座位, 可以坐下了!')
else:
# 6. 如果没有, 则: 需要站着.
print(' 没位置了, 站一会儿吧!')
# 3. 如果不够, 则不允许上车.
else:
print('滴, 余额不足, 请充值, 本次无法乘车!')
5、三元表达式
"""
1、概述/作用:
它可以用来简化if...else语句, 相对也比较常用.
2、格式:
值1 if 条件 else 值2
如果你需要把三元的执行结果赋值给变量, 则上述的写法还可以改成:
变量名 = 值1 if 条件 else 值2
"""
# 需求: 比较两个整数, 获取其最大值, 并打印结果.
# 1. 定义变量, 记录要比较的两个整数.
a, b = 10, 30
# 2. 具体的比较过程.
# 方式1: if.else语法搞定.
if a > b:
max = a
else:
max = b
# 方式2: 三元表达式搞定.
max2 = a if a > b else b
# 3. 打印结果.
print(f'最大值为: {max}')
print(f'最大值为: {max2}')
import random
num = random.randint(1, 3) # 随机成1 到 3之间的随机数, 包左包右.
print(num)
三、循环结构(for、while 语句)
1、while循环
1.1、循环入门
"""
1、概述:
它属于流程控制语句的一种, 表示: 周而复始, 即: 满足某些条件的情况下, 重复的做某些事儿.
2、分类:
while循环 更适用于 循环次数不固定的情况.
for循环 更适用于 循环次数固定的情况.
循环的要素:
1. 初始化条件. 表示 循环从哪里开始执行.
2. 判断条件. 表示 循环什么时候终止, 只要判断条件满足, 循环就一直执行.
3. 循环体. 表示 判断条件成立的情况下, 重复做的事儿.
4. 控制条件. 表示 控制初始化条件变化的.
3、while循环详解:
格式:
初始化条件1
while 判断条件2:
循环体3
控制条件4
4、执行流程:
第1次循环: 1, 2, 3, 4 假设: 判断条件成立.
重复循环: 2, 3, 4 假设: 判断条件成立.
最后1次循环: 2 判断条件不成立, 循环结束.
"""
# 需求: 打印 5次 HellWorld.
i = 1 # 初始化条件, 表示循环从 1 开始
while i <= 5: # i的值: 1, 2, 3, 4, 5 # 判断条件, 成立则循环继续向下执行.
# 走这里, 说明 判断条件成立, 执行循环体.
print(f'Hello World! {i}') # 循环体, 表示判断条件满足的情况下, 重复的做某些事儿.
# 循环执行一次, i 就 + 1
# i = i + 1
i += 1 # 控制条件, 控制变量(初始化条件)变化的.
1.2、while循环-求和思想
"""
需求1: while循环 计算 1 ~ 100之间的数字和. 5050
需求2: while循环 计算 1 ~ 100之间的偶数和. 2550 奇数和: 2500
循环求和思路, 细节如下:
1. 求和变量 要定义到循环的 外边.
2. 循环内部是具体的 计算过程.
3. 计算完毕后, 在循环外打印结果即可
"""
# 需求1: while循环 计算 1 ~ 100之间的数字和.
# 1. 定义求和变量sum, 记录数字的累加和.
sum = 0
# 2. 定义变量i, 表示 while循环的 初始化条件, 且 i是从1开始获取的.
i = 1
# 3. 通过 while循环, 获取到 1 ~ 100之间所有的数字.
while i <= 100: # i的值: 1, 2, 3, 4, 5......
# 4. 具体的累加(求和)动作, 将获取到的数字 累加给 sum
# print(i)
sum = sum + i
# 5. 每次操作完毕后, 记得 修改初始化条件的值, 即: 这步是 控制条件.
i += 1
# 6. 循环执行结束后, 打印结果即可.
print(f'1 ~ 100之间的数字和为: {sum}')
print('-' * 28)
# 需求2: while循环 计算 1 ~ 100之间的偶数和.
# 思路1: 加入if判断.
# 1. 定义求和变量sum, 记录数字的累加和.
sum = 0
# 2. 定义变量i, 表示 while循环的 初始化条件, 且 i是从1开始获取的.
i = 1
# 3. 通过 while循环, 获取到 1 ~ 100之间所有的数字.
while i <= 100: # i的值: 1, 2, 3, 4, 5......
# 4. 具体的累加(求和)动作, 判断是否是偶数, 如果是, 将获取到的数字 累加给 sum
if i % 2 == 0:
sum = sum + i
# 5. 每次操作完毕后, 记得 修改初始化条件的值, 即: 这步是 控制条件.
i += 1
# 6. 循环执行结束后, 打印结果即可.
print(f'1 ~ 100之间的数字和为: {sum}')
# 思路2: 初始化值从0开始数, 每次加 += 2
# 1. 定义求和变量sum, 记录数字的累加和.
sum = 0
# 2. 定义变量i, 表示 while循环的 初始化条件, 且 i是从0开始获取的.
i = 2
# 3. 通过 while循环, 获取到 1 ~ 100之间所有的数字.
while i <= 100: # i的值: 1, 2, 3, 4, 5......
# 4. 具体的累加(求和)动作.
sum = sum + i
# 5. 每次操作完毕后, 记得 修改初始化条件的值, 即: 用于更新 判断条件的结果.
i += 2
# 6. 循环执行结束后, 打印结果即可.
print(f'1 ~ 100之间的数字和为: {sum}')
1.3、while循环-统计思想
"""
关于循环, 另一种比较重要的就是 统计思想了, 例如: 统计水仙花数的个数.
需求1: 打印所有的水仙花数.
需求2: 统计水仙花数的个数.
水仙花数解释:
1. 它是1个三位数.
2. 它的各个位数的立方和相加 = 它本身.
3. 例如: 153 = 1*1*1 + 5*5*5 + 3*3*3 = 153, 所以 153就是水仙花数.
"""
# 需求1: 打印所有的水仙花数
# 1. 定义初始化值, 从 100 开始.
i = 100
# 2. while循环, 获取到 100 ~ 1000之间所有的值, 包左不包右.
while i < 1000: # 假设: i = 2153
# 3. 获取该数字的各个位数 数字.
ge = i // 1 % 10
shi = i // 10 % 10
bai = i // 100 % 10
# 4. 判断是否是水仙花数, 如果是, 就打印.
if ge * ge * ge + shi * shi * shi + bai * bai * bai == i:
# 走这里, 是水仙花数.
print(i)
# 5. 控制条件, 记得: i += 1
i += 1
print('-' * 28)
# 需求2: 统计水仙花数的个数.
# 定义求和变量count, 用于记录 水仙花数的个数.
count = 0
# 1. 定义初始化值, 从 100 开始.
i = 100
# 2. while循环, 获取到 100 ~ 1000之间所有的值, 包左不包右.
while i < 1000: # 假设: i = 2153
# 3. 获取该数字的各个位数 数字.
ge = i // 1 % 10
shi = i // 10 % 10
bai = i // 100 % 10
# 4. 判断是否是水仙花数, 如果是, 就打印.
if ge * ge * ge + shi * shi * shi + bai * bai * bai == i:
# 走这里, 是水仙花数. 计数器 + 1
count += 1
# 5. 控制条件, 记得: i += 1
i += 1
# 6. 循环结束后, 打印程序的运行结果即可.
print(f'水仙花数的个数为: {count}')
1.4、循环嵌套-打印矩形
"""
1、概述:
循环嵌套指的是 1个循环的 循环体 是另1个循环语句.
2、特点:
外循环执行1次, 内循环执行一圈(一轮).
3、案例:
1. 打印矩形
*****
*****
*****
*****
*****
2. 打印正三角.
3. 打印倒三角
4. 打印99乘法表.
"""
# 需求1: 打印矩形, 5行5列. 要求每次只能打印1个*
# 方式1: 最Low版, 看看就行了.
print('*****')
print('*****')
print('*****')
print('*****')
print('*****')
print("-" * 30)
# 方式2: 分解版. 循环变量起名一般用: i, j, k. x, y, z, a, b, c
# 打印第 1 行
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print() # 表示换行.
# 打印第 2 行
j = 1
while j <= 5:
print('*', end='')
j += 1
print() # 表示换行.
# 打印第 3 行
j = 1
while j <= 5:
print('*', end='')
j += 1
print() # 表示换行.
# 打印第 4 行
j = 1
while j <= 5:
print('*', end='')
j += 1
print() # 表示换行.
# 打印第 5 行
j = 1
while j <= 5:
print('*', end='')
j += 1
print() # 表示换行.
print('-' * 30)
# 方式3: 合并版, 即: 循环嵌套实现, 这个是需要你掌握的.
i = 1
while i <= 5: # i的值: 1, 2, 3, 4, 5 外循环控制: 行数
# print(f'第 {i} 行')
# 如下是具体的 打印 1行的 完整代码.
j = 1
while j <= 5: # j的值: 1, 2, 3, 4, 5 内循环控制: 每行的列数
print('*', end='')
j += 1 # 内循环的 控制条件
print() # 表示换行.
i += 1 # 外循环的 控制条件.
1.5、循环嵌套-打印正三角
"""
1、概述:
循环嵌套指的是 1个循环的 循环体 是另1个循环语句.
2、特点:
外循环执行1次, 内循环执行一圈(一轮).
3、案例:
1. 打印矩形
2. 打印正三角.
*
**
***
****
*****
3. 打印倒三角
4. 打印99乘法表.
记忆:
打印正三角和打印矩形相比, 内循环的 判断条件 发生改变.
打印倒三角和打印矩形相比, 内循环的 ** 发生改变.
"""
"""
# 需求1: 打印正三角形, 5行5列. 要求每次只能打印1个*
# 方式1: 最Low版, 看看就行了.
print('*')
print('**')
print('***')
print('****')
print('*****')
print("-" * 30)
# 方式2: 分解版. 循环变量起名一般用: i, j, k. x, y, z, a, b, c
# 打印第 1 行
j = 1
while j <= 1: # j的值: 1
print('*', end='')
j += 1
print() # 表示换行.
# 打印第 2 行
j = 1
while j <= 2: # j的值: 1, 2
print('*', end='')
j += 1
print() # 表示换行.
# 打印第 3 行
j = 1
while j <= 3: # j的值: 1, 2, 3
print('*', end='')
j += 1
print() # 表示换行.
# 打印第 4 行
j = 1
while j <= 4: # j的值: 1, 2, 3, 4
print('*', end='')
j += 1
print() # 表示换行.
# 打印第 5 行
j = 1
while j <= 5: # j的值: 1, 2, 3, 4, 5
print('*', end='')
j += 1
print() # 表示换行.
print('-' * 30)
# 方式3: 合并版, 即: 循环嵌套实现, 这个是需要你掌握的.
i = 1
while i <= 5: # 外循环控制: 行数 i的值: 1, 2, 3, 4, 5
# print(f'第 {i} 行')
# 如下是具体的 打印 1行的 完整代码.
j = 1
while j <= i: # 内循环控制: 每行的列数 j的值: 1, 1,2 1,2,3 1,2,3,4 1,2,3,4,5
print('*', end='')
j += 1 # 内循环的 控制条件
print() # 表示换行.
i += 1 # 外循环的 控制条件.
1.6、循环嵌套-打印倒三角
"""
1、概述:
循环嵌套指的是 1个循环的 循环体 是另1个循环语句.
2、特点:
外循环执行1次, 内循环执行一圈(一轮).
3、案例:
1. 打印矩形
2. 打印正三角.
3. 打印倒三角
*****
****
***
**
*
4. 打印99乘法表.
4、记忆:
打印正三角和打印矩形相比, 内循环的 判断条件 发生改变.
打印倒三角和打印矩形相比, 内循环的 初始化条件 发生改变.
"""
# 需求2: 打印正三角形, 5行5列. 要求每次只能打印1个*
# 方式1: 最Low版, 看看就行了.
print('*****')
print('****')
print('***')
print('**')
print('*')
print("-" * 30)
# 方式2: 分解版. 循环变量起名一般用: i, j, k. x, y, z, a, b, c
# 打印第 1 行
j = 1
while j <= 5: # j的值: 1,2,3,4,5
print('*', end='')
j += 1
print() # 表示换行.
# 打印第 2 行
j = 2
while j <= 5: # j的值: 2, 3, 4, 5
print('*', end='')
j += 1
print() # 表示换行.
# 打印第 3 行
j = 3
while j <= 5: # j的值: 3, 4, 5
print('*', end='')
j += 1
print() # 表示换行.
# 打印第 4 行
j = 4
while j <= 5: # j的值: 4, 5
print('*', end='')
j += 1
print() # 表示换行.
# 打印第 5 行
j = 5
while j <= 5: # j的值: 5
print('*', end='')
j += 1
print() # 表示换行.
print('-' * 30)
# 方式3: 合并版, 即: 循环嵌套实现, 这个是需要你掌握的.
i = 1
while i <= 5: # 外循环控制: 行数 i的值: 1, 2, 3, 4, 5
# print(f'第 {i} 行')
# 如下是具体的 打印 1行的 完整代码.
j = i
while j <= 5: # 内循环控制: 每行的列数 j的值: 12345 2345 345 45 5
print('*', end='')
j += 1 # 内循环的 控制条件
print() # 表示换行.
i += 1 # 外循环的 控制条件.
1.7、循环嵌套-99乘法表
"""
需求: 打印99乘法表, 具体如下:
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
......
思路: 学会拆解.
1. 打印9行9列的矩形 *
2. 把上述的图形改为 正三角形.
3. 用 1 * 3 = 3 的格式, 来替换上述的 *
4. 用 i 和 j 这两个变量, 来填充 乘法公式, 即: 1 * 3 = 3 => {j} * {i} = {i * j}
"""
# Step1: 打印9行9列的矩形 *
# i = 1
# while i <= 9: # 外循环控制 行数
#
# j = 1
# while j <= 9: # 内循环控制: 每行的列数
# print('*', end='')
# j += 1 # 内循环的 控制条件.
# print() # 核心代码, 换行.
#
# i += 1 # 外循环的 控制条件.
# Step2: 把上述的图形改为 正三角形. 修改内循环的 判断条件.
# i = 1
# while i <= 9: # 外循环控制 行数
#
# j = 1
# while j <= i: # 内循环控制: 每行的列数
# print('*', end='\t')
# j += 1 # 内循环的 控制条件.
# print() # 核心代码, 换行.
#
# i += 1 # 外循环的 控制条件.
# Step3: 用 1 * 3 = 3 的格式, 来替换上述的 *
# i = 1
# while i <= 9: # 外循环控制 行数
#
# j = 1
# while j <= i: # 内循环控制: 每行的列数
# print('1 * 3 = 3', end='\t')
# j += 1 # 内循环的 控制条件.
# print() # 核心代码, 换行.
#
# i += 1 # 外循环的 控制条件.
# Step4: 用 i 和 j 这两个变量, 来填充 乘法公式, 即: 1 * 3 = 3 => {j} * {i} = {i * j}
i = 1
while i <= 9: # 外循环控制 行数 假设 i = 3
j = 1
while j <= i: # 内循环控制: 每行的列数 此时 j = 1, 2, 3
print(f'{j} * {i} = {i * j}', end='\t')
j += 1 # 内循环的 控制条件.
print() # 核心代码, 换行.
i += 1 # 外循环的 控制条件.
总结
- 例如:以上就是今天要讲的内容。