遗留的问题
有个问题?我们怎么通过Python代码找到李四的索引是多少?
字典,元组,集合,分支,循环,函数
- 2、Python面向对象:类,对象,方法,继承
- 3、FastAPI
- 4、MySQL8
- 5、SQLModel,和FastAPI框架是同一个作者,两者结合比较好用,但是学习成本较高,使用难度稍大
- 6、Vue3
- 7、Tailwindcss
- 8、Ant Design Vue,UI组件库
- 9、数据同步:有一个API,这个API提供了一些数据,需要在ERP系统中进行展示。
- 10、登录注册需要吗?需要
- 11、第三方平台管理:对接哪些接口平台飞书,钉钉,聚水潭等等
- 12、用户管理
- 13、Docker
- 14、Linux
- 15、Nginx
- 16、项目部署实战
练习:查找数组元素的索引
假设我有一个数组,[1,2,3,33,44,55],想要找到33的索引是多少?
编写Python代码实现?
arr = [1, 2, 3, 33, 44, 55]
target = 33
index = 0
for v in arr:
print(v)
if v == target:
print("找到了索引:", index)
break
index += 1
print(arr[index])
这个代码虽然能够实现查找索引的功能,但是代码比较冗余。
- 1、其实我们遍历的时候,就可以直接获取数组的索引,而不需要额外定义一个变量
- 2、我们查找索引的功能非常的通用,可以封装为一个方法
- 3、列表本身是否有查找元素索引的方法?
数组查找索引的内置方法
arr = [1, 2, 3, 33, 44, 55]
target = 33
print(arr.index(target))
这个方法虽然便捷,但是也有局限性。比如,如果我存储的元素是一个字典的话,还能不能查找呢?
元素是字典的列表
arr = [{"name": "张三"}, {"name": "李四"}, {"name": "王五"}]
target = {"name": "李四"}
print(arr.index(target))
这种方法确实是能够查询出结果的,但是当元素变得更加复杂以后,就不行了。
更复杂的案例
arr = [
{"name": "张三", "age": 13},
{"name": "李四", "age": 23},
{"name": "王五", "age": 33},
]
target_name = "李四"
这个时候,我们只知道name,不知道age,就没法使用index去进行查找了,还是得用我们的老办法。
arr = [
{"name": "张三", "age": 13},
{"name": "李四", "age": 23},
{"name": "王五", "age": 33},
]
target_name = "李四"
index = 0
for v in arr:
print(v)
if v["name"] == target_name:
print("找到了索引:", index)
break
index += 1
print(arr[index])
上面使用我们自己写的方法找到了索引,但是依旧存在代码冗余的情况,实际上我们有更简洁的代码能够直接找到索引。
切片回顾
- 1、切片能从一个数组中截取一个片段,得到的是一组数据
- 2、切片有三个参数:开始索引,结束索引,步长
- 3、开始索引的默认值0,结束索引默认值数组长度,步长默认值1
range内置函数
range类似于一个切片,也有三个参数:
- 开始值,默认0
- 结束值,必传,没有默认值
- 步长,默认1
和切片不同的是,结束值不能为空,也就是没有默认值。
range一般用来和for进行配合,得到固定次数的循环,比如循环1-10。
for i in range(1, 11):
print(i)
通过range可以遍历数组的索引
因为range的开始值默认是0,索引也是从0开始的。而结束值如果是数组长度的话,刚好遍历出来的就是数组的索引。
arr = ["a", "b", "c"]
for i in range(len(arr)):
print(i, arr[i])
练习:找李四的索引
要求使用 for i in range
arr = [
{"name": "张三", "age": 13},
{"name": "李四", "age": 23},
{"name": "王五", "age": 33},
]
target_name = "李四"
for i in range(len(arr)):
print(i, arr[i])
if arr[i]["name"] == target_name:
print("找到了索引:", i)
break
元组
元组可以理解为长度固定的数组。
元组一旦被声明,元素就不可用增加和删除,只能访问。
元组的基本用法:
# 空元组
t = tuple()
print(t, type(t))
# 有元素的元组
t2 = (1, 2, 3)
print(t2, type(t2))
# 直接遍历元组
for v in t2:
print(v)
# 通过索引访问元组
for i in range(len(t2)):
print(t2[i])
元组一般用于数据结构明确,长度的固定的数据结构。
在真实的开发中,我们会使用MySQL数据库,在Python,我们把数据从MySQL中查询出来,实际上第一时间得到的数据结构,就是一个元组。
还有就是我们后面会学习函数,函数的参数,本质上也是一个元组。
集合
集合是和元组差不多简单的一种结构。
集合也是一种特殊的数组,只不过集合的元素是不可以的重复,而且集合拥有自动去重的功能。
在真实的开发中,一旦数据需要去重,我们一般都回考虑将数据转换为集合,实现自动去重。
举一个简单的例子。
arr = [11, 11, 22, 22, 333, 333]
s = set(arr)
print(s)
使用集合一定要注意,集合这种数据结构是无序的,哪怕你是一个本来有序的数组,转换为集合以后也会变成无序的。
所以,如果你需要的是一个有序的数据结构,使用集合时一定要慎重。
集合求交集
交集指的是两个集合中共有的部分。
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 & s2
print(s3)
集合求并集
并集指的是两个集合中,只要有一个集合有的数据。
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 | s2
print(s3)
集合求差集
差集指的是一个集合中,去除另一个集合有的数据之后的数据。
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 - s2
print(s3)
if语句格式1
if 条件:
语句
如果条件成立则执行语句,否则不执行任何代码。
if True:
print("打印。。。")
if False:
print("不打印。。。")
if语句格式2
if 条件:
语句1
else:
语句2
如果条件成立,则执行语句1,否则执行语句2,语句1和语句2一定会且只有一个被执行。
if True:
print("打印。。。")
else:
print("不打印。。。")
if False:
print("不打印。。。")
else:
print("打印了。。。")
if语句格式3
if 条件1:
语句1
elif 条件2:
语句2
else:
语句3
如果条件1成立则执行语句1,如果条件2成立则执行语句2,中间可以有任意多个条件,如果所有条件都不成立,则执行语句3。
weekday = 3 # 一周的第三天,星期三
if weekday == 1:
print("星期一")
elif weekday == 2:
print("星期二")
elif weekday == 3:
print("星期三")
elif weekday == 4:
print("星期四")
elif weekday == 5:
print("星期五")
elif weekday == 6:
print("星期六")
elif weekday == 7:
print("星期天")
else:
print("错误的数字")
练习:判断月份
从控制台录入一个1-12的整数,通过整数,判断是几月。比如1是一月,3是三月,12是十二月。
month = input("请输入1-12的整数:")
month = int(month)
if month == 1:
print("一月")
elif month == 2:
print("二月")
elif month == 3:
print("三月")
elif month == 4:
print("四月")
elif month == 5:
print("五月")
elif month == 6:
print("六月")
elif month == 7:
print("七月")
elif month == 8:
print("八月")
elif month == 4:
print("九月")
elif month == 5:
print("十月")
elif month == 6:
print("十一月")
elif month == 7:
print("十二月")
else:
print("错误的数字")
总结
- 1、元组,固定长度的数组,不能增加元素和删除元素
- 2、集合,无序的数组,且元素不可以重复,具有自动去重功能
- 3、if语句,有三种分支,单分支if,双分支if-else,多分支if-elif-else
- 4、一些练习
假设我们现在想要根据输入月份,判断是哪个季节,怎么做呀?
- 输入1:一月,12月,1月,2月是冬季
- 输入8:八月,夏季
作为思考题,有时间就做一下,下节课开始我们先讲这个。
遗留的问题
循环,函数
- 2、Python面向对象:类,对象,方法,继承
- 3、FastAPI
- 4、MySQL8
- 5、SQLModel,和FastAPI框架是同一个作者,两者结合比较好用,但是学习成本较高,使用难度稍大
- 6、Vue3
- 7、Tailwindcss
- 8、Ant Design Vue,UI组件库
- 9、数据同步:有一个API,这个API提供了一些数据,需要在ERP系统中进行展示。
- 10、登录注册需要吗?需要
- 11、第三方平台管理:对接哪些接口平台飞书,钉钉,聚水潭等等
- 12、用户管理
- 13、Docker
- 14、Linux
- 15、Nginx
- 16、项目部署实战