python中的流程控制语句
一 顺序结构
概述
程序按照顺序执行
特点
从上向下, 从左向右, 依次逐行执行(程序默认顺序执行)
二 分支结构
概述/作用
满足条件才执行 (一次) 的代码
单分支if...
格式:
if 条件表达式:
语句体
执行流程:
1. 先执行条件表达式, 看是否成立. 2. 如果成立, 则执行相应的语句题 3. 如果不成立, 则什么都不执行
案例:
需求:
键盘录入年龄, 并接收, 判断是否 不小于18岁, 如果满足则输出: 已成年
代码:
print('start') # 定义变量接受用户输入信息 age = eval(input('请输入你的年龄:')) # 判断年龄是否符合要求 if age >= 18: # 条件成立执行的语句 print('看清楚,成年了') print('end')
比较和逻辑运算符
比较运算符
相等: == 不等: != 大于等于: >= 小于等于: <=
连续赋值: a = b = c => a = c , b = c
逻辑运算符
或: or 非: not 与: and(并且)
双分支if...else...用法
格式:
if 条件表达式:
语句体
else:
语句体(条件不成立时执行else内的语句)
执行流程:
-
先执行条件表达式, 看是否成立.
-
如果成立, 则执行相应的语句题
-
如果不成立, 则什么都不执行
案例:
需求:
键盘录入身高, 如果没有超过150cm, 则输出: 进入动物园不需要买票, 否则提示: 进入动物园需要买票.
代码:
# 定义变量接收用户输入的身高信息 height = eval(input('请输入身高信息(cm):')) # 判断升高是否低于150cm if height <= 150: # 低于则打印免费进入 print('免费进入') # 否则打印要买票 else: print('要买票')
多分支if...elif...else...
格式:
if 条件表达式1:
语句体1
elif 条件表达式2:
语句体2
elif 条件表达式3:
语句体3
......
else:
语句体n
执行流程:
-
先执行条件表达式1 , 成立则执行语句体1
-
条件1表达式不成立, 判断条件表达式2 ,成立则执行语句体2
-
条件2表达式不成立, 判断条件表达式3 ,成立则执行语句体3
-
..........(重复执行上述内容)
-
都不成立执行else内的语句体
案例:
需求:
代码:
充分利用if-else中else默认的反条件
# 最终版: 推荐写法, 比普通版效率高, 充分运用else反条件 grade = eval(input('请输入成绩:')) if grade < 0 or grade > 100: print('成绩不合法') elif grade >= 90: # 在区间(0, 100)中判断大于90的 print('奖励: 游乐场通票一张') elif grade >= 80: # 在区间(0, 90)中判断大于80的 print('奖励: 自助餐一次') elif grade >= 70: # 在区间(0, 80)中判断大于70的 print('奖励: 玩具一个') elif grade >= 60: # 在区间(0, 70)中判断大于60的 print('奖励: 练习册一本') else: # 在区间(0, 60) print('奖励: 男女混双')
if嵌套
格式:
if 语句嵌套是指: if语句的语句体 还是if 语句.
无论何时嵌套不要超过三层
案例:
需求:
公交车刷卡上车就坐, 卡内余额大于等于2元可以上车, 否则无法上车; 上车后座位大于0可以就坐, 否则无法就坐.
代码:
m = eval(input('请输入卡内余额:')) if m >= 2: print('上车成功') sit = eval(input('请输入车内作为数量:')) if sit > 0: print('可以坐下') else: print('没有座位') else: print('上车失败')
三元表达式
格式:
值1 if 条件 else 值2
将三元表达式结果赋值给变量
变量名 = 值1 if 条件 else 值2
案例:
需求:
比较两个数的大小
代码:
a = 10 b = 3 # 方式1:if...else...写法 if a > b: max_num = a else: max_num = b a1 = 10 b1 = 45 # 方式2:三元表达式 max_num1 = a1 if a1 > b1 else b1 print(max_num) print(max_num1)
if综合案例-剪刀石头布
需求:
键盘录入玩家出的手势, 且和 电脑人的手势(随机生成), 进行比较, 打印结果.
代码:
老师代码:
# 铺垫知识, 如何获取一个指定范围内的随机数. # 1. 导包, 即: 通过第三方的包来实现. import random # 2. 通过 random.randint(a, b) 函数实现 获取随机数. print(random.randint(1, 3)) # 包左包右, 生成 1 ~ 3之间的随机数. print('-' * 28) # 具体的完成 猜拳游戏案例, 规则: 石头 -> 1, 剪刀 -> 2, 布 -> 3. # 1. 键盘录入玩家的手势编号, 并接收. 记得转成数值. player = int(input('请输入您的手势编号, 规则: 石头(1), 剪刀(2), 布(3) => ')) # 2. 随机生成 电脑人的 手势编号. pc = random.randint(1, 3) # print(f'电脑人的手势编号为: {pc}') # 3. 比较 玩家 和 电脑人的手势编号, 并打印结果. # 情况1: 玩家胜利. 玩家:石头, 电脑: 剪刀, 玩家:剪刀, 电脑:布, 玩家: 布, 电脑: 石头 if (player == 1 and pc == 2) or (player == 2 and pc == 3) or (player==3 and pc == 1): print('玩家 获得胜利') elif pc == player: # 情况2: 平局. print('哎呀, 平局了!') elif (player == 1 and pc == 3) or (player == 2 and pc == 1) or (player==3 and pc == 2): # 情况3: 电脑人 胜利 print('电脑人 获得胜利!') else: print('手势编号有误, 该轮无成绩!')
自己代码:
# 引入随机函数用来生成电脑玩家的出拳数字代码 import random computer = random.randint(0, 2) # 定义变量接受玩家出拳数字代码 player = int(input('请输入出拳结果(剪刀:0|石头:1|布:2):')) # 判断玩家和电脑的出拳数字, 决定输赢 if player != 0 and player != 1 and player != 2: print('输入不合法') elif computer == player: print('平局') elif (computer == 0 and player == 1) or (computer == 1 and player == 2) or (computer == 2 and player == 0): print('玩家获胜') else: print('电脑获胜')
三 循环结构
概述
满足特定条件 , 才会循环执行的语句
语法:
while 循环: 更适用于 循环次数不固定的情况
for 循环: 更适用于循环次数固定的情况
循环语法的四个核心部分
1.初始化条件:
表示循环从哪里开始, 一般写成 i = 0 , 或者 i = 1
2.判断条件:
表示循环什么时候结束, 即: 判断条件成立, 则循环执行, 不成立则循环结束
3.循环体:
表示条件满足的时候, 重复执行的语句
4.控制条件:
用于控制初始条件变化的, 例如: i += 1
while循环
格式
初始条件1 i = 0
while 判断条件2: while i < 5:
循环体3 循环执行的语句
控制条件4 i += 1
执行流程
执行流程: 第1次循环: 1, 2, 3, 4 假设: 判断条件成立. 重复循环: 2, 3, 4 假设: 判断条件成立. 最后1次循环: 2 判断条件不成立, 循环结束.
案例-计算数字和
需求:
计算1-100的数字和
计算1-100的偶数和
计算1-100的质数和
代码:
# 计算1-100之间的数字和 # 方式1: i = 1 cnt = 0 while i <= 100: cnt += i i += 1 print(cnt) # 方式2: j = 1 k = 100 cnt2 = 0 while j <= 50 <= k: cnt2 += j + k j += 1 k -= 1 print(cnt2) # 计算1-100间所有偶数和 # 方式1: # 初始条件 i = 1 # 定义数字和变量 sum_dau = 0 # 定义循环 while i <= 100: # 判断是否为偶数 if i % 2 == 0: # 是则和变量加该数字 sum_dau += i # 定义循环控制条件 i += 1 # 输出结果 print(sum_dau) # 方式2: i = 2 sum_dau2 = 0 while i <= 100: sum_dau2 += i i += 2 print(sum_dau2) # 计算1-100间所有奇数和 # 方式1: # 初始条件 i = 1 # 定义数字和变量 sum_dau3 = 0 # 定义循环 while i <= 100: # 判断是否为偶数 if i % 2 != 0: # 是则和变量加该数字 sum_dau3 += i # 定义循环控制条件 i += 1 # 输出结果 print(sum_dau3) # 方式2: i = 1 sum_dau4 = 0 while i <= 100: sum_dau4 += i i += 2 print(sum_dau4)
while嵌套
概念: 一个循环的循环体是 另一个循环
精髓: 外循环执行一次, 内循环执行一圈
细节: 执行次数 = 内循环此数 * 外循环此数
概述: 循环嵌套指的是 1个循环的 循环体 是 另1个循环语句, 这种写法就称之为: 循环嵌套.格式:
while 条件: ... 循环体 ... while 条件: ... 循环体 ...
细节: 1. 执行总次数 = 外循环执行次数 * 内循环执行次数. 2. 外循环执行一次, 内循环执行一圈(一轮). 3. 在如下的打印图形案例中, 外循环控制的是: 行数, 内循环控制的是: 每行的列数.
案例-打印图形
需求:
打印图形
代码:
# 正方形 # 方式1:for循环 for i in range(5): for j in range(5): print('*', end='\t') print('') print('-' * 30) # 方式2:while循环 i = 0 while i < 5: j = 0 while j < 5: print('*', end='\t') j += 1 i += 1 print('') print('-' * 30) # 正直角三角形 # 方式1:for循环 for i in range(5): for j in range(i + 1): print('*', end='\t') print('') print('-' * 30) # 方式2:while循环 i = 0 while i < 5: j = 0 while j < i + 1: print('*', end='\t') j += 1 i += 1 print('') print('-' * 30) # 倒直角三角形 # 方式1:for循环 for i in range(5): for j in range(5 - i): print('*', end='\t') print('') print('-' * 30) # 方式2:while循环 i = 0 while i < 5: j = 5 - i while j > 0: print('*', end='\t') j -= 1 print('') i += 1 print('-' * 30)
案例-打印乘法表
需求:
打印九九乘法表
代码:
# 方式1: while 循环 i = 1 while i <= 9: j = 1 while j <= i: print(f'{j} * {i} = {i * j}', end='\t') j += 1 print('') i += 1 print('-' * 130) # 方式2: for 循环 for i in range(1, 10): for j in range(1, i + 1): print(f'{j} * {i} = {i * j}', end='\t') print('')
for循环
介绍
概述: 它和while循环类似, 都属于循环结构的一种, 一般适用于: 固定次数 的场景.格式:
for 变量名 in 容器类型: 循环体 else: 未遇到break执行的语句
小技巧: 因为 for循环的格式, 远比while要简单, 所以以后使用循环的时候, 优先考虑用for循环, 搞不定才会考虑用while循环.
案例
遍历字符串
案例1: for循环, 遍历字符串.
# 1. 定义变量, 记录字符串值. s1 = 'abc' # 2. 遍历字符串. for i in s1: # 变量i 就是字符串中的每个字母. print(i)
遍历字符串,判断是否有指定字母
案例2: for循环, 遍历字符串, 判断是否有字母b, 如果有就打印'hello world'
# 1. 定义变量, 记录字符串值. s1 = 'abc' # 2. 遍历字符串. for i in s1: # 变量i 就是字符串中的每个字母. print(i) # 判断是否是 字母b, 如果是: 就打印 hello world if i == 'b': print('hello world')
计算数字和
案例3: for循环, 求 1 - 100之间的 偶数和.
扩展: range(start, end, step) 生成指定区间的数字序列, 包左不包右. step表示步长, 默认的步长是: 1
# 1. 定义求和变量. sum = 0 # 2. 获取 1 - 100之间所有的偶数. for i in range(2, 101, 2): # range(2, 101, 2) 获取 2 - 101之间, 包左不包右, 步长为2的数字序列, 即: 2, 4, 6, 8, 10... # print(i) # 3.具体的求和动作. sum += i # 4. 打印结果. print(f'sum: {sum}')
打印九九乘法表
案例4: for循环, 打印99乘法表.
for i in range(1, 10): # 外循环, 控制: 行数. i的值: 1 - 10, 包左不包右. for j in range(1, i + 1): print(f'{j} * {i} = {i * j}', end='\t') print() # 每行打印完之后, 记得: 换行.
循环中断
break
终止循环, 循环结束, 不再往下执行
continue
终止本次循环, 开始下次循环
案例解释
需求:
观察如下代码, 在指定位置填充内容, 使其分别打印 2次, 7次, 13次 Hello World!
图解:
代码:
print('----- start -----') for i in range(1, 11): # i的值: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 包左不包右. if i % 3 == 0: # 在这里填充内容. # break # 终止循环. 打印两次 # continue # 结束本次循环的, 继续下次循环. 打印7次 print(f'hello world! {i}') # 打印两次: 3, 6, 9 | 共计13次 print(f'hello world! {i}') # 打印10次 print('----- end -----')
扩展:
统计数字各个位置的数字
当前位上的数字 = 数字 // 当前数字所在位 % 10
1-100之间质数规律
1-100之间质数不能被2, 3, 5, 7整除, 或者就是2, 3, 5, 7本身.