目录
流程控制语句
条件判断
if语句基本格式
案例:
if语句进阶
课后作业:
if...elif...else
案例:
课后作业:
案例
课后作业:
Extra:断点
模式匹配(match)
案例:简易计算器
课后作业:简单游戏指令系统
小结:
循环
while循环
案例:
for循环
小结:
range语句
案例:
小结:
嵌套循环
案例
课后作业:
案例
本案例新增知识点:
流程控制语句
- 条件判断
- 模式匹配
- 循环
条件判断
- if语句基本格式
- if语句进阶
- 案例
if语句基本格式
- 场景:只有满足指定条件,才会执行对应的代码逻辑
# if条件判断基本格式
if 要判断的条件:
条件成立时,要执行对应的操作
score = 200 if score >= 680: print("欢迎你,来清华读书") else: print("欢迎你,来家里蹲读书")补充说明:类似if下的缩进通常是四个空格的长度,也就是一个Tab键的距离
案例:
- 需求:完成B站登录功能的实现(正确账号为1112,密码为0000)
if语句进阶
# if...else 结构 if 条件: 条件成立,执行此操作 else: 条件不成立,执行此操作
- 需求:根据用户输入年份,判断这一年是闰年还是平年.
- 非整百年份,且能被4整除的年份是闰年
- 整百年份(例如1900 2000年)必须能被400整除才是闰年
课后作业:
- 根据用户输入的数字,判定为奇数还是偶数
- 根据用户输入的年龄,判定该用户是否成年
- 根据用户输入的数字,判断该数字是正数还是负数(不考虑0)
- 根据用户输入的考试分数,判断该分数是否及格了(大于60即为及格)
if...elif...else
elif可以看作为第二个if,当一个条件不足以满足需求,elif便会应运而来
注意:满足第一个条件时候,就会跳过elif中的条件,反之则会继续向下判定elif中的条件
(其实在我看来if和elif就是俩代码块,一个胡同里的街坊,两家该咋过咋过谁也不掺和谁生活)
案例:
- 输入用户名和密码进行登录
- 用户名,密码为 admin/6688 或 root/1112 再或者 zhangsan/123456,则登录成功,反之失败
课后作业:
1.根据输入的成绩,判定成绩等级
- 大于等于85为优秀
- 60-85为及格
- 否则不及格
2.购物折扣计算:根据输入的购物车的商品总额,以及如下折扣规则,计算实际应支付的金额
- 金额 >= 500:8折
- 300 <= 金额 <=500:9折
- 100 <= 金额 <300:95折
- 金额 < 100:无折扣
案例
- 根据输入的三个边的边长(正整数),判定是等边三角形 等腰三角形 普通三角形 还是不能构成三角形
三角形判定流程
能否构成三角形:任意两边之和大于第三边(且边长均为正整数,已符合)
等边三角形:
a == b == c等腰三角形:
a == b或b == c或a == c(且满足三角形条件)普通三角形:满足三角形条件,但三边互不相等
课后作业:
- 根据用电度数计算电费
- 第一档:2880度以下,电费单价为0.4883元/度
- 第二档:2880-4800度,电费单价为0.5383元/度
- 第三档:4800度以上,电费单价为0.7883元/度
Extra:断点
在这个小案例中老师讲到了断点功能的使用
断点需要与调试功能进行配合使用
,其功能就像是将轨道截取一段下来,代码走到了断点处就不会自动运行,此时需要使用者一步步手动进行下一步的操作
如果想要取消断点,再次点击一次红色的断点即可
模式匹配(match)
- 结构模式匹配就是用一个清晰的 模板 去精准的匹配数据的结构和内容,匹配成功则执行相应操作
match...case匹配范例:
#原版本: day = 6 if day == 1: print('周一') if day == 2: print('周二') if day == 3: print('周三') if day == 4: print('周四') if day == 5: print('周五') if day == 6 or day == 7: print('休息')#新版本 day = 8 match day: case 1: print('周一') case 2: print('周二') case 3: print('周三') case 4: print('周四') case 5: print('周五') case 6 | 7: # |这个玩意是or的意思 print('休息') case _: # _这个玩意是else的意思 print('其他情况下执行')案例:简易计算器
课后作业:简单游戏指令系统
| 玩家输入 | 对应操作 |
| w/W | 角色向上移动 |
| s/S | 角色向下移动 |
| a/A | 角色向左移动 |
| d/D | 角色向右移动 |
| ' '(空格) | 角色跳跃 |
| j/J | 角色进攻 |
| esc/ESC | 退出游戏 |
小结:
1.match...case语法
match 表达式: case 值1: 操作1 case 值2 if 条件表达式: 操作2 case 值3 | 值4: 操作4 case _: 默认操作2.match...case应用场景
- match:基于某个变量的多个固定值进行分支判断时,可以使用match模式匹配
- if:条件判断涉及复杂的逻辑判定,范围比较及组合条件时使用
循环
- while循环
- for循环
- 嵌套循环
- 案例
while循环
# while语法结构 while 条件表达式: 循环体语句1 循环体语句2 ...# while语法结构 while 条件表达式: 循环体语句1 循环体语句2 ... else: 条件为false,循环正常结束时执行案例:
打印十遍"人生苦短,我学Python"
i = 0 while i < 10: i += 1 print('人生苦短,我学Python') else: print('任务执行完毕')计算1-100所有数字的和
i = 1 total = 0 while i<=100: total += i i += 1 else: print(f'1-100的和为 {total}')计算1-100所有偶数的和
i = 0 total = 0 while i<=100: if i%2==0: total += i i += 1 print(f'1-100所有偶数的和为 {total}')for循环
- while循环是通过条件表达式来控制是否要进行下一次循环的
而for循环,本质上是一种轮询遍历机制,对一批内容进行逐个处理
# for循环结构 for 元素 in 待处理数据集: 循环体代码(对元素进行处理) else: 循环结束时,执行的代码小结:
1.for循环的语法格式
for 元素 in 待处理数据集 循环体代码(对元素进行处理) else: 不满足循环条件时,执行的操作2.for循环与while循环的场景
- while循环:用于在某个条件满足时一直循环,循环的次数通常是未知的,只知道循环开始/结束的条件.(关注的是循环的条件)
- for循环:用于对“可迭代对象”(比如列表、字符串、或者
range)进行遍历或已知次数的循环.(关注的是遍历每一个元素)用人话讲:看得到尽头(例如循环完一张表上的内容)的用for,
看不到尽头(例如需要外部其他条件进行插手否则永不停歇)的用while
range语句
- 作用:生成制定规则的数字序列
- 用法1:range(end) -> 获取一个从零开始到end结束的数字序列(不含end本身从0开始)
# range(5)获取的数据就是 0 1 2 3 4
- 用法2:range(start,end) -> 获取一个从start开始,到end结束的数字序列(不含end本身)
# range(2,8) 获取的数据就是 2 3 4 5 6 7
- 用法3:range(start,end,step) -> 获取一个从start开始,到end结束的数字序列,step步长(不含end本身)
# range(0,10,2)获取的数据就是 0 2 4 6 8
案例:
1.计算1-100之间所有奇数之和
2.计算100-500之间所有3的倍数的数字之和
# 计算1-100之间所有奇数之和 total = 0 for i in range(1,101): if i%2!=0: total += i print(f'1-100的所有奇数和为{total}')# 简化版 total = 0 for i in range(1,101,2): total += i print(f'1加到100的奇数总额为{total}')# 2.计算100-500之间所有3的倍数的数字之和 total = 0 for i in range(100,501): if i%3==0: total += i print(f'100-500之间所有3倍数的数字之和为{total}')小提示:range是一个很双标的玩意,左侧是闭区间,右侧是开区间,所以以后要养成右侧多加1个数的习惯
小结:
1.range(..)语句的作用是什么?
- 生成指定规则的数字序列
- 用法:
range(end)
range(start,end)
range(strat,end,step)
嵌套循环
- 语法:
# for循环结构 for 元素 in 待处理的数据集1: 循环体的代码1 循环体的代码2 ... for 元素 in 待处理数据集2: 循环体的代码1 循环体的代码2 ... ...
⬆外层循环一次,内层循环N次 就像是一块钟表,时针挪动一个数字分针就得跟着转动一圈
案例
打印一个长度为m宽为n的长方形
# 打印一个长为9宽为4的长方形 for i in range(4): print('* * * * * * * * *') print('打印完毕')案例:
打印乘法口诀表:
for i in range(1,10): for j in range(1,i+1): print(f'{j}*{i}={i*j}',end='\t') print('')课后作业:
1.根据输入的直角边的边长,打印等腰直角三角形
2.根据输入的数字,打印对应的数字金字塔
# 2.根据输入的数字,打印对应的数字金字塔 num = int(input('请输入数字:')) for i in range(1,num+1): # 确定行数 for j in range(1,num-i+1): # 确定空行 print(' ',end=' ') for k in range(1,i+1): print('*',end=' ') print('')3.打印国际象棋棋盘
# 打印国际象棋 for i in range(8): #一共多少行 for j in range(8): #黑白判断输出 if (i+j)%2==0: print('⬜',end=' ') else: print('⬛',end=' ') print('')案例
需求:根据输入的用户名密码执行登陆操作,具体要求如下: 1.正确输入为admin/6688 zhangsan/123456 qhc/8866 2.输入用户名和密码进行登录,直到登陆成功,程序结束运行,如若登陆失败,则继续输入用户名和密码进行登录 3.输入的用户名和密码不能为空 4.登录成功,输入"登陆成功,进入B站首页" 5.登录失败:输入"用户名或密码错误,请重新输入"
while True: user = input('请输入您的用户名:') password = input('请输入您的密码:') if user=='' or password == '': print('用户名或密码不可为空') continue if user == 'admin' and password == '6688': print('登录成功,进入B站首页') break elif user == 'zhangsan' and password == '123456': print('登录成功,进入B站首页') break elif user == 'qhc' and password == '8866': print('登录成功,进入B站首页') break else: print('用户名或密码错误,请重新输入')本案例新增知识点:
在while循环内,可使用while True的语法进行无限循环
当我前置条件满足不想要继续向下执行其他代码时用continue
当条件满足需要跳出循环时,用break进行跳出
import random random_number = random.randint(1,100) while True: num = int(input('请输入你所猜想的数字:')) if num=='': print('数字不可为空!') continue elif num>random_number: print('你输的数字大了') elif num<random_number: print('你输入的数字小了') elif num==random_number: print('恭喜你,输入正确') break需求1:将1-1000之间(含1000)所有的5的倍数的数字累加起来
total = 0 for i in range(1,1001): #遍历划分范围 if i%5==0: total += i print(f'1-1000之内所有5的倍数数字加起来是{total}')需求2:统计字符串"asdfuhasoidhnoiasoisahn"字符串中有多少a和d
zfc = 'asdfuhasoidhnoiasoisahn' a_total = 0 d_total = 0 for i in zfc: #限制遍历范围 if i=='a': a_total += 1 elif i=='d': d_total += 1 print(f'字符串中一共有{a_total}个a') print(f'字符串中一共有{d_total}个d')