版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
复合数据类型学习目标/Target熟练掌握列表、元组、字典、集合的定义与创建方法掌握元组的不可变特性及操作方法,学会使用元组保存固定结构的数据精通字典的键值对存储模式,熟练使用字典实现数据的高效检索与更新
灵活运用列表的增删改查、排序等基本操作及常用方法学习目标/Target熟悉集合的去重、交集、并集等操作,能够解决数据筛选与对比问题
能够综合运用多种核心数据类型,编写逻辑清晰、功能完备的Python程序章节概述/Summary复合数据类型是Python数据组织的核心载体。本章聚焦列表、元组、字典、集合等类型,解析其存储结构、操作特性及适用场景:列表的动态灵活、元组的不可变性、字典的键值映射逻辑、集合的去重与交集运算等。通过案例演示数据的增删改查及嵌套使用,帮助掌握复杂数据的结构化管理能力,为高效处理批量数据与业务逻辑搭建基础框架。目录/Contents010203【案例4-1】城市空气质量监测系统【案例4-2】新能源汽车销量分析【案例4-3】商品库存管理04【案例4-4】“戏曲研习社”活动管理【案例4-1】城市空气质量监测系统01案例分析在工业化与城市化的快速发展下,环境污染加剧,空气质量成为公众关注焦点。为掌握各地区空气质量,本案例以列表形式存储不同城市AQI数据。以城市为索引,记录每日AQI数值、污染物浓度、采集时间与地点等信息。通过菜单驱动的交互界面,用户可以对空气质量数据进行查看、添加、筛选、排序等操作。知识储备列表基本操作常用列表方法列表推导式知识储备知识储备—常见复合数据类型Python中常用的序列类型主要有3种:字符串(str)、列表(list)和元组(tuple),其中字符串和元组是不可变的序列类型,一旦创建以后其内部的元素无法被修改,列表是可变的序列类型。知识储备—常见复合数据类型Python中的集合类型与数学中的集合概念一致,也具备以上3个特性,它用于存储一组元素,元素必须唯一,元素可以是无序的。另外,Python要求放入集合中的元素必须是不可变的数据类型,例如整型、浮点型、复数类型、布尔类型、字符串类型和元组类型,列表、字典及集合类型都属于可变的数据类型,这些类型的数据都不能存放到集合中。知识储备—常见复合数据类型映射类型以键值对的形式存储元素,键值对中的键与值之间存在映射关系。在数学中,设A、B是两个非空集合,若按某个确定的对应法则f,可使集合A中的任意一个元素x在集合B中都有唯一确定的对应元素y,则称f为从集合A到集合B的一个映射。字典(dict)是Python唯一的映射类型,字典的键必须遵循以下两个原则。(1)每个键只能对应一个值,不允许重复出现。(2)字典中的键是不可变的数据类型。知识储备—列表基本操作(1)使用中括号“[]”创建列表使用中括号“[]”可以直接创建一个空列表,示例代码如下:list1=[]#创建空列表,没有任何元素在中括号中可以添加一个或多个元素,多个元素之间使用英文逗号分隔。列表的元素不仅可以为整型、浮点型等数字类型的数据,而且可以是字符串、列表、元组、字典等组合数据类型的数据,还可以是用户自定义的数据类型。示例代码如下:list2=['Alice','Bob','Charlie'] #创建包含元素的列表print(list2)list3=[1,'hello',True] #列表中元素可以是不同的数据类型print(list3)1.创建列表知识储备—列表基本操作(2)使用list()函数创建列表list()函数需要接收一个可迭代对象,并根据可迭代对象创建一个列表。如果该函数没有接收任何可迭代对象,那么会创建一个空列表。示例代码如下:list4=list() #list()用于创建空列表print(list4)list5=list('Python') #字符串转换为列表print(list5)list6=list((1,2,3)) #元组转换为列表print(list6)知识储备—列表基本操作2.访问列表元素(1)通过索引访问列表元素索引就像图书的目录,阅读时我们可以借助目录快速定位到书籍的指定内容。索引是Python中最基本和常用的列表访问方法。通过索引访问列表中的元素,可以直接获取或修改列表中的特定元素。通过索引访问列表元素的语法格式如下:列表名[索引值]使用格式列表的索引支持双向索引,其中正向索引从0开始,自左向右依次递增;反向索引从-1开始,自右向左依次递增。知识储备—列表基本操作无缝衔接单元测试my_list=['apple','banana','cherry']print(my_list[1]) #正向索引print(my_list[-2]) #反向索引示例2输出索引值为1和-2的元素。知识储备—列表基本操作(2)以切片方式访问列表元素列表切片用于获取列表中指定范围内的元素,通过指定起始和结束索引来实现。语法格式如下:列表名[start:stop:step]使用格式其中start表示起始索引(包含该位置元素,默认值为0),stop表示结束索引(不包含该位置元素,默认值最后一个元素的索引值),step表示步长(默认值为1)。知识储备—列表基本操作无缝衔接单元测试#初始化列表students=['Alice','Bob','Charlie']#索引操作print("索引为0的元素:",students[0])students[1]='David'print("修改后的列表:",students)#切片操作students=['Alice','Bob','Charlie','David','Eve']print("切片[1:3]的结果:",students[1:3])print("间隔为2切片的结果:",students[::2])示例3将students列表中的“Bob”修改为“David”,利用列表的切片规则获取students列表中第1至第3个的元素。知识储备—列表基本操作(3)在循环中依次访问元素列表是一个可迭代对象,可以使用for循环进行遍历,在遍历中逐个访问列表中的元素。无缝衔接单元测试scores=[85,90,78,65]total=0forscoreinscores:total+=scoreprint(f"成绩总和为:{total}")示例4定义一个保存成绩的列表,使用for循环遍历该列表并计算成绩总和。知识储备—列表基本操作无缝衔接单元测试student_scores=[["张三",85,90,78],["李四",76,88,91],["王五",92,87,95],["赵六",88,93,84]]#遍历输出所有数据forstudentinstudent_scores:print(f"学生姓名:{student[0]}")print(f"Python基础:{student[1]},数据可视化:{student[2]},数据库:{student[3]}")示例5使用for循环遍历嵌套列表,输出学生姓名及各科成绩。知识储备—列表基本操作合并列表即将多个列表整合为一个列表,常见的方式是使用+运算符。使用+运算符时,会创建一个新的列表,包含两个列表的所有元素。语法格式如下:列表1+列表2使用格式3.合并列表知识储备—列表基本操作无缝衔接单元测试list1=[1,2,3]list2=[4,5,6]result1=list1+list2 #使用+运算符print(result1)示例6使用运算符+合并列表。知识储备—列表基本操作列表的成员运算用于判断某个元素是否存在于列表中,使用in和notin运算符。in判断元素是否在列表内,notin判断元素是否不在列表内,返回值为True或False。语法格式如下:元素in列表名元素notin列表名使用格式4.成员运算知识储备—列表基本操作无缝衔接单元测试my_list=[1,2,3,4]print(2inmy_list)print(5notinmy_list)示例7判断2和5是否包含在列表my_list中。知识储备—常用列表方法1.添加元素在Python中,向列表添加元素是常见操作,可根据不同需求选择不同的添加方法。append()方法用于在列表末尾添加单个元素;extend()方法用于将另一个可迭代对象的元素逐一添加到列表末尾;insert()方法可以在指定索引位置插入元素,语法格式如下:append(x):将元素x添加到列表末尾。extend(iterable):将可迭代对象iterable中的元素添加到列表末尾。insert(index,x):在索引index处插入元素x。使用格式知识储备—常用列表方法无缝衔接单元测试#初始化列表my_list=[1,2,3]#使用append()方法my_list.append(4)print("使用append()后:",my_list)#使用extend()方法new_elements=[5,6]my_list.extend(new_elements)print("使用extend()后:",my_list)#使用insert()方法my_list.insert(1,1.5)print("使用insert()后:",my_list)示例8分别使用append()、insert()和extend()方法向my_list列表添加元素。知识储备—常用列表方法2.删除元素删除列表元素的方法多样,del语句可按索引删除元素;pop()方法删除指定索引的元素并返回该元素,若不指定索引则默认删除最后一个元素;remove()方法根据元素值删除第一个匹配的元素;clear()方法用于清空列表中的所有元素。语法格式如下:del列表名[索引]:删除指定索引的元素。pop([索引]):删除指定索引的元素并返回,默认删除最后一个元素。remove(x):删除列表中第一个值为x的元素。clear():清空列表。使用格式知识储备—常用列表方法无缝衔接单元测试my_list=[1,2,3,4,5]delmy_list[2]print("使用del后:",my_list)popped_element=my_list.pop(1)print("使用pop()后,弹出的元素:",popped_element)print("使用pop()后,列表剩余元素:",my_list)my_list.remove(4)print("使用remove()后:",my_list)my_list.clear()print("使用clear()后:",my_list)示例9分别使用del语句、remove()和clear()方法删除列表及列表元素。知识储备—常用列表方法3.排序排序是对列表元素按一定规则重新排列的操作。sort()方法会对原列表进行排序,改变原列表的顺序;sorted()函数会返回一个新的排序后的列表,原列表保持不变。可以通过设置reverse参数为True实现降序排序。语法格式如下:列表名.sort(key=None,reverse=False):对原列表进行排序。sorted(列表名,key=None,reverse=False):返回一个排序后的新列表。使用格式知识储备—常用列表方法无缝衔接单元测试my_list=[3,1,4,1,5,9,2,6,5,3,5]my_list.sort()print("使用sort()升序排序后:",my_list)my_list.sort(reverse=True)print("使用sort()降序排序后:",my_list)my_list=[3,1,4,1,5,9,2,6,5,3,5]sorted_list=sorted(my_list)print("使用sorted()升序排序前,原列表:",my_list)print("使用sorted()升序排序后,新列表:",sorted_list)示例10分别使用sort()方法和sorted()函数对my_list列表进行升序及降序排列。知识储备—常用列表方法4.反转列表反转列表即将列表中的元素顺序颠倒。reverse()方法会直接修改原列表,将其元素顺序反转;使用切片[::-1]可以创建一个新的反转后的列表,原列表保持不变,语法格式如下:列表名.reverse()新列表=列表名[::-1]使用格式知识储备—常用列表方法无缝衔接单元测试my_list=[1,2,3,4,5]#使用reverse()方法my_list.reverse()print("使用reverse()后:",my_list)#重新初始化列表my_list=[1,2,3,4,5]#使用切片反转reversed_list=my_list[::-1]print("使用切片反转前,原列表:",my_list)print("使用切片反转后,新列表:",reversed_list)示例11对my_list列表进行反转列表。知识储备—常用列表方法5.统计元素出现次数count()方法用于统计列表中某个元素出现的次数,它会遍历列表,返回指定元素在列表中出现的次数,语法格式如下:列表名.count(x)使用格式知识储备—常用列表方法无缝衔接单元测试my_list=[1,2,2,3,2,4]count=my_list.count(2)print("元素2出现的次数:",count)示例12统计my_list列表中2的出现次数。知识储备—常用列表方法6.查找元素索引index()方法用于查找列表中某个元素第一次出现的索引位置。如果元素不存在于列表中,会抛出ValueError异常。语法格式如下:列表名.index(x[,start[,end]])使用格式my_list=[1,2,3,2,4]index=my_list.index(2)print("元素2第一次出现的索引:",index)示例【示例13】查找元素2第一次出现的索引。知识储备—列表推导式列表推导式是符合Python语法规则的复合表达式,用于以简洁的方式根据已有的列表构建满足特定需求的列表。列表推导式的基本格式如下:[表达式for临时变量in目标对象]语法格式以上格式由表达式及其后面for语句组成,其中for语句用于循环遍历目标对象,并将每次遍历到的元素赋给临时变量,目标对象必须是一个可迭代对象,例如列表、字符串、元组等;表达式用于在每次循环中对临时变量进行处理或者计算,它可以是任何有效的包含运算符的表达式,也可以是变量或者常量。知识储备—列表推导式创建一个包含0到9的平方的列表,示例代码如下:squares=[x**2forxinrange(10)]print(squares)示例14知识储备—列表推导式1.带有if语句的列表推导式在基本列表推导式的for语句之后添加一个if语句,就组成了带if语句的列表推导式,其语法格式如下:[表达式for临时变量in目标对象if判断条件]语法格式以上列表推导式的执行过程是,遍历目标对象,将访问到的元素赋给临时变量,若临时变量的值符合判断条件,则按表达式对其进行处理或计算,并将处理或计算后的结果添加到新列表中。知识储备—列表推导式创建一个包含列表中所有偶数的列表(假设原列表是[1,2,3,4,5,6]),示例代码如下:numbers=[1,2,3,4,5,6]even_numbers=[numfornuminnumbersifnum%2==0]print(even_numbers)示例15知识储备—列表推导式2.带for循环嵌套的列表推导式在基本列表推导式的for语句之后添加一个for语句,就组成了带for循环嵌套的列表推导式,其语法格式如下:[表达式for临时变量1in目标对象1for临时变量2in目标对象2]语法格式以上格式中的for语句按从左至右的顺序分别是外层循环和内层循环。利用上述列表推导式可以根据两个目标对象快速生成一个新的列表。知识储备—列表推导式取列表1和列表2中元素的乘积作为列表3的元素,示例代码如下:list1=[1,2,3]list2=[4,5,6]list3=[x+yforxinlist1foryinlist2]print(list3)示例16案例实现创建名称为“城市空气质量检测系统”的项目,在项目下创建名称为air_quality_testing的Python文件。准备工作案例实现STEP01初始化城市空气质量数据列表创建一个包含多个城市空气质量数据的二维列表,每个子列表存储城市名称、AQI值和空气质量等级。air_quality=[["北京",85,"良"],["上海",60,"良"],["广州",55,"良"],["深圳",45,"优"],["成都",70,"良"],["哈尔滨",110,"轻度污染"]]案例实现STEP02菜单显示与用户输入使用print语句展示功能菜单,呈现空气质量报告,通过input()函数获取用户选择。原有代码...whileTrue:print("\n=====城市空气质量监测系统=====")print("1.查看所有城市数据")print("2.添加新城市数据")print("3.查找空气质量最差的城市")print("4.按空气质量等级筛选")print("5.按AQI值排序")print("6.退出")choice=input("请选择操作(1-6):")案例实现STEP03查看所有城市数据(选项1)当用户选择1时,遍历air_quality列表,格式化输出所有城市数据;使用f字符串和:<8控制输出格式,确保列对齐(左对齐,宽度8字符);打印分隔线“-”提升可读性。whileTrue:原有代码...ifchoice=="1":print("\n=====城市空气质量报告=====")print(f"{'城市':<8}{'AQI':<8}{'空气质量等级'}")print("-"*28)forcity_datainair_quality:print(f"{city_data[0]:<8}{city_data[1]:<8}{city_data[2]}")案例实现STEP04添加新城市数据(选项2)用户输入城市名称和对应的AQI数值,根据AQI数值计算空气质量等级,最后将城市、AQI数值和空气质量等级添加到空气质量数据列表中。whileTrue:原有代码...elifchoice=="2":city=input("城市名称:")aqi=int(input("AQI数值:"))ifaqi<=50:level="优"elifaqi<=100:level="良"elifaqi<=150:level="轻度污染"elifaqi<=200:level="中度污染"else:level="重度污染"air_quality.append([city,aqi,level])print(f"{city}的数据已添加!")案例实现STEP05查找空气质量最差的城市(选项3)历所有城市数据,找到最大的AQI值(max_aqi)。再次遍历数据,筛选出所有AQI值等于max_aqi的城市,打印这些城市的信息(支持多个城市并列最差)。whileTrue:原有代码...elifchoice=="3":max_aqi=0forcity_datainair_quality:ifcity_data[1]>max_aqi:max_aqi=city_data[1]print("\n=====空气质量最差的城市=====")print(f"{'城市':<8}{'AQI':<8}{'空气质量等级'}")print("-"*28)forcity_datainair_quality:ifcity_data[1]==max_aqi:print(f"{city_data[0]:<8}{city_data[1]:<8}{city_data[2]}")案例实现STEP06按空气质量等级筛选(选项4)获取用户输入的目标等级(level);遍历air_quality列表,筛选出空气质量等级等于level的城市,并逐行打印符合条件的数据)。whileTrue:原有代码...elifchoice=="4":level=input("请输入空气质量等级(优/良/轻度污染/中度污染/重度污染):")print(f"\n=====空气质量等级为{level}的城市=====")print(f"{'城市':<8}{'AQI':<8}{'空气质量等级'}")print("-"*28)forcity_datainair_quality:ifcity_data[2]==level:print(f"{city_data[0]:<8}{city_data[1]:<8}{city_data[2]}")案例实现STEP07按AQI值排序(选项5)使用copy()方法创建air_quality的副本sorted_cities,避免修改原始数据;通过双重循环实现升序排序,打印排序后的城市列表。whileTrue:原有代码...elifchoice=="5":sorted_cities=air_quality.copy()n=len(sorted_cities)foriinrange(n):forjinrange(0,n-i-1):ifsorted_cities[j][1]>sorted_cities[j+1][1]:temp=sorted_cities[j]sorted_cities[j]=sorted_cities[j+1]sorted_cities[j+1]=tempprint("\n=====按AQI值排序的城市列表=====")print(f"{'城市':<8}{'AQI':<8}{'空气质量等级'}")print("-"*28)forcity_datainsorted_cities:print(f"{city_data[0]:<8}{city_data[1]:<8}{city_data[2]}")案例实现STEP08退出系统(选项6)当用户选择6时,打印退出提示,并使用break跳出“whileTrue”循环,结束程序。whileTrue:原有代码...elifchoice=="6":print("感谢使用空气质量监测系统!")break案例实现STEP09错误处理(无效选择)若用户输入的choice不在1至6范围内,提示“无效选择,请重试!”,循环继续,等待用户重新输入。whileTrue:原有代码...else:print("无效选择,请重试!")【案例4-2】新能源汽车销量分析02案例分析面对全球气候变暖、能源危机与环境污染,“双碳”目标推动绿色出行成为共识。新能源汽车凭借零/低排放、能源高效等优势,在政策扶持与资本助推下蓬勃发展。本案例采用元组存储新能源汽车品牌销量数据,元组的不可变性保障数据安全稳定,每个元组记录品牌名称、销量、增长率等核心指标,实现数据高效整合与防篡改。知识储备元组基本操作常用元组方法知识储备知识储备—元组基本操作1.创建元组元组使用小括号()创建并在其中放置元素,元素之间用逗号分隔。如果元组中只有一个元素,需要在元素后面加上逗号,否则Python会将其视为普通数据类型。语法格式如下:创建空元组:空元组名=()创建包含多个元素的元组:元组名=(元素1,元素2,...)创建只含一个元素的元组:元组名=(元素,)使用格式知识储备—元组基本操作无缝衔接单元测试empty_tuple=() #创建空元组print("空元组:",empty_tuple)multiple_tuple=(1,2,'three') #创建包含多个元素的元组print("包含多个元素的元组:",multiple_tuple)single_tuple=(4,) #创建只含一个元素的元组print("只含一个元素的元组:",single_tuple)示例17使用小括号()创建不同元组。知识储备—元组基本操作1.创建元组使用内置函数tuple()也可以创建元组,当函数的参数列表为空时表示创建空元组,当参数列表为可迭代对象时表示创建非空元组。【示例18】使用tuple()函数创建不同元组,示例代码如下:empty_tuple=tuple() #创建空元组print("空元组:",empty_tuple)list_tuple=tuple([1,2,'three']) #利用列表创建元组(1,2,'three')print("利用列表创建元组:",list_tuple)str_tuple=tuple('python') #利用字符串创建元组('p','y','t','h','o','n')print("利用字符串创建元组:",str_tuple)range_tuple=tuple(range(5)) #利用可迭代对象创建元组(0,1,2,3,4)print("利用可迭代对象创建元组:",range_tuple)知识储备—元组基本操作2.访问元组Python中支持通过索引与切片的方式访问元组的元素,也支持在循环中依次访问元组的元素。【示例19】使用不同方式访问元组,示例代码如下:my_tuple=('red','green','blue','yellow','purple')print("my_tuple元组的长度:",len(my_tuple))#索引操作print("索引为1的元素:",my_tuple[1])print("索引为-2的元素:",my_tuple[-2])#切片操作print("切片[1:3]的结果:",my_tuple[1:3])print("切片[::2]的结果:",my_tuple[::2])#遍历元组fordatainmy_tuple:print(data,end='')知识储备—元组基本操作3.合并元组合并元组是把两个或多个元组的元素组合成一个新元组,使用+运算符来实现,它会创建一个包含所有参与合并元组元素的新元组。【示例20】使用运算符+号合并元组,示例代码如下:tuple1=(1,2,3)tuple2=("a","b","c")merged_tuple=tuple1+tuple2print("合并后的元组:",merged_tuple)知识储备—元组基本操作4.成员运算元祖的成员运算用于判断某个元素是否存在于元组中,使用in和notin运算符。in判断元素是否在元组内,notin判断元素是否不在元组内,返回值为True或False。【示例21】判断20和40是否包含在列表my_tuple中,示例代码如下:my_tuple=(10,20,30)print("20是否在元组中:",20inmy_tuple)print("40是否不在元组中:",40notinmy_tuple)知识储备—常用元组方法1.count()方法count()方法用于统计元组中某个元素出现的次数。它会遍历整个元组,检查每个元素是否与指定的元素相匹配,若匹配则计数加一,最终返回该元素在元组中出现的总次数。语法格式如下:元组.count(元素)使用格式知识储备—常用元组方法无缝衔接单元测试my_tuple=(1,2,2,3,2,4)count_result=my_tuple.count(2)print(f"元素2在元组中出现的次数为:{count_result}")示例22使用count()的方式统计元素次数。知识储备—常用元组方法2.index()方法index()方法用于查找元组中某个元素第一次出现的索引位置。如果找到了指定元素,就返回该元素首次出现的索引;若元素不在元组中,会抛出ValueError异常。语法格式如下:元组名.index(元素[,起始索引[,结束索引]])使用格式知识储备—常用元组方法无缝衔接单元测试my_tuple=('apple','banana','cherry','banana')try:index_result=my_tuple.index('banana')print(f"元素banana第一次出现的索引是:{index_result}")index_result_with_range=my_tuple.index('banana',2)print(f"从索引2开始查找,元素banana第一次出现的索引是:{index_result_with_range}")exceptValueError:print("未在元组中找到指定元素。")示例23查找元素“banana”第一次出现的索引。案例实现创建名称为“新能源汽车销量分析”的项目,在项目下创建名称为sales_analysis的Python文件。准备工作案例实现STEP01初始化数据与基本展示初始化新能源汽车销量数据元组,每个元组包含(品牌,季度销量,同比增长率);显示所有新能源汽车品牌的销量数据。sales_data=(("比亚迪",250000,0.85),("特斯拉",180000,0.65),("理想",120000,0.72),("蔚来",80000,0.58),("小鹏",70000,0.62))#显示排行榜print("=====新能源汽车季度销量排行榜=====")print(f"{'品牌':<10}{'销量':<10}{'同比增长率'}")print("-"*30)fordatainsales_data:print(f"{data[0]:<10}{data[1]:<10}{data[2]:.2%}")案例实现STEP02元组解包与数据查询遍历元组查找匹配项,在for循环未找到时提示相应信息。原有代码....search_brand=input("\n请输入要查询的品牌:")fordatainsales_data:brand,sales,growth=data#元组解包ifbrand==search_brand:print(f"\n{brand}销量:{sales}辆,增长率:{growth:.2%}")breakelse:print(f"未找到{search_brand}的数据")案例实现STEP03数据排序当用户选择控制灯时,根据当前灯的状态(开/关)进行反转,并更新状态变量,同时输出操作结果。原有代码...sorted_data=sorted(sales_data,key=lambdax:x[1],reverse=True)print("\n=====按销量排序后的排行榜=====")forbrand,sales,growthinsorted_data:print(f"{brand:<10}{sales:<10}{growth:.2%}")案例实现STEP04数据统计与计算使用sum()函数和max()函数处理元组数据,计算市场总销量和平均增长率,找出增长率最高的品牌。原有代码...#计算市场总销量和平均增长率total_sales=sum(data[1]fordatainsales_data)average_growth=sum(data[2]fordatainsales_data)/len(sales_data)print(f"\n市场总销量:{total_sales:,}辆")print(f"平均增长率:{average_growth:.2%}")#找出增长率最高的品牌max_growth_brand=max(sales_data,key=lambdax:x[2])[0]print(f"增长率最高的品牌:{max_growth_brand}")【案例4-3】商品库存管理03案例分析电商行业快速发展,新兴销售模式不断涌现,海量商品涌入市场,库存管理成为商家运营关键。库存积压或缺货都会对经营造成负面影响,精准管控库存需求迫切。本案例使用Python字典实现商品库存管理,支持实时查询库存,库存低于阈值时自动提醒补货;可灵活修改商品价格;还能统计库存总价值、商品品类占比等,辅助商家决策。知识储备字典基本操作常用字典方法知识储备知识储备—字典基本操作1.创建字典在Python中,字典的表现形式为一组包含在大括号“{}”中的键值对,每个键值对为一个字典元素。不同键值对之间使用逗号“,”分隔,键和值之间使用“:”分隔,语法格式如下:{键1:值1,键2:值2,...,键N:值N}语法格式字典的值可以是任意类型,键可以是任意不可变类型的对象,如字符串、元组等。字典像集合一样使用“{}”包裹元素,字典中的元素无序,且键必须唯一。知识储备—字典基本操作emptyDict1={} #使用{}创建空字典student={'name':'Alice','age':20,'gender':'female'} #使用{}创建非空字典print("直接定义的字典:",student)emptyDict2=dict() #使用dict()创建空字典person=dict(name='Bob',age=25,gender='male') #使用dict()函数创建非空字典print("使用dict()函数定义的字典:",person)data=dict([('city','NewYork'),('country','USA')]) #使用dict()函数传入元组列表print("使用dict()函数传入元组列表定义的字典:",data)示例24使用不同方式创建字典。知识储备—字典基本操作2.访问字典Python中可以使用字典的键访问其对应的值,具体的语法格式如下:my_dict={'name':'Bob','age':25}print("获取键name的值:",my_dict['name'])print("获取键age的值:",my_dict['age'])字典变量[键]语法格式【示例25】创建一个包含姓名和年龄两个元素的字典,并通过键获取值,示例代码如下:知识储备—字典基本操作2.访问字典Python提供了内置方法get(),该方法根据键从字典中获取对应的值,若指定的键不存在则返回指定的默认值。get()方法的语法格式如下:print("获取键name的值:",my_dict.get('name'))print("获取键age的值:",my_dict.get('age'))print("获取键email的值(不存在,使用默认值):",my_dict.get('email','notfound'))d.get(key[,default])语法格式在上述语法格式中,key表示是要获取值的键,default是可选的参数,表示键不存在时返回的默认值。如果指定的键存在于字典中,则返回与该键关联的值;如果键不存在,则返回指定的默认值;如果没有指定默认值,则返回None。知识储备—字典基本操作3.字典元素的添加和修改利用以下格式可以修改字典元素的值或新增一个元素:字典变量[键]=值语法格式知识储备—字典基本操作my_dict={'name':'Bob','age':25}my_dict['name']='Alice' #通过键name修改其值为Alicemy_dict['age']=18 #通过键age修改其值为18my_dict['sex']='男' #添加性别元素,键为sex,值为男print(my_dict)示例26创建一个包含姓名和年龄两个元素的字典,将姓名修改为Alice,年龄修改为18,并新增一个性别元素,性别的值为“男”,示例代码如下:知识储备—字典基本操作3.字典元素的添加和修改当字典中不存在某个键时,使用update()方法同样可以实现元素的添加,update()方法不仅能给字典添加一个元素,还可以一次性给字典添加多个元素。update()方法的语法格式如下:以上语法格式中参数other是可选的,表示要添加的元素,它可以接收一个字典,例如{'b':3,'c':4},也可以接收一个由键值对元组组成的可迭代对象。update([other])语法格式知识储备—字典基本操作my_dict={'name':'Bob','age':25}my_dict.update({'name':'Alice','age':18,'sex':'男'})print(my_dict)示例27使用update()方法实现前例相同的功能。知识储备—字典基本操作4.成员运算字典的成员运算用于判断某个键是否存在于字典中,使用in和notin运算符。in判断键是否在字典内,notin判断键是否不在字典内,返回值为True或False。语法格式如下元素in字典名元素notin字典名使用格式知识储备—字典基本操作my_dict={'name':'Alice','age':20}print("键name是否在字典中:",'name'inmy_dict)print("键email是否不在字典中:",'email'notinmy_dict)示例28判断name和email是否包含在列表my_dict中。知识储备—常用字典方法1.keys()方法keys()方法返回一个包含字典中所有键的列表,语法格式如下:字典名.keys()语法格式my_dict={'name':'Bob','age':25,'city':'NewYork'}keys=my_dict.keys()print("字典的键:",keys)forkeyinkeys:print(key)【示例29】使用keys()方法获取字典中所有的键并遍历,示例代码如下:知识储备—常用字典方法2.values()方法values()方法返回一个包含字典中所有值的列表,语法格式如下:字典名.values()语法格式my_dict={'name':'Alice','age':20,'country':'USA'}values=my_dict.values()print("字典的值:",values)forvalueinvalues:print(value)【示例30】使用values()方法获取字典中所有的键并遍历,示例代码如下:知识储备—常用字典方法3.items()方法items()方法返回一个包含字典中所有键值对的列表,每个键值对以元组的形式呈现,语法格式如下:字典名.items()语法格式my_dict={'name':'Charlie','age':30,'job':'Engineer'}items=my_dict.items()print("字典的键值对:",items)forkey,valueinitems:print(key,":",value)【示例31】使用itmes()方法获取字典中的所有键值对并遍历,示例代码如下:知识储备—常用字典方法4.pop()方法pop()方法根据指定键删除字典中的元素,并返回对应元素的值。如果键不存在,会抛出KeyError异常,可通过指定默认值来避免异常,语法格式如下:字典名.pop(键[,默认值])语法格式知识储备—字典基本操作my_dict={'name':'Eve','age':22}#删除键age并获取对应的值value=my_dict.pop('age')print("删除的键对应的值:",value)print("删除后的字典:",my_dict)#尝试删除不存在的键,指定默认值default_value=my_dict.pop('email','notfound')print("尝试删除不存在的键,返回的默认值:",default_value)示例32使用pop()方法删除字典my_dict中指定键的元素。知识储备—常用字典方法5.popitem()方法pop()方法根据指定键删除字典中的元素,并返回对应元素的值。如果键不存在,会抛出KeyError异常,可通过指定默认值来避免异常,语法格式如下:字典名.popitem()语法格式my_dict={'name':'Frank','age':35,'hobby':'Reading'}item=my_dict.popitem()print("删除的元素:",item)print("删除后的字典:",my_dict)【示例33】使用popitem()方法随机删除字典my_dict中的元素,示例代码如下:知识储备—常用字典方法6.clear()方法clear()方法用于清空字典中的元素,使字典变为空字典,语法格式如下:字典名.clear()语法格式my_dict={'name':'Grace','age':27}my_dict.clear()print("清空后的字典:",my_dict)【示例34】使用clear()方法清空字典my_dict中的元素,示例代码如下:案例实现创建名称为“商品库存管理”的项目,在项目下创建名称为inventory_management的Python文件。准备工作案例实现STEP01初始化与显示库存初始化商品库存字典,键为商品名称,值为包含库存数量和单价的列表。product_stock={"T恤":[50,39.9],"牛仔裤":[30,99.9],"运动鞋":[20,199.9]}print("=====商品库存清单=====")forproduct,infoinproduct_stock.items():stock,price=infoprint(f"{product}|库存:{stock}件|单价:{price}元")案例实现STEP02添加新商品通过input()函数接收新商品信息,并将商品信息添加到product_stock字典中。原有代码....new_product=input("\n请输入要添加的商品名称:")new_stock=int(input("请输入库存数量:"))new_price=float(input("请输入商品单价:"))product_stock[new_product]=[new_stock,new_price]print(f"√{new_product}已添加到库存清单!")#显示更新后的库存print("\n=====更新后的库存清单=====")forproduct,infoinproduct_stock.items():stock,price=infoprint(f"{product}|库存:{stock}件|单价:{price}元")案例实现STEP03更新商品信息通过input()函数接收需要更新信息的商品的名称,并输入新的库存数量和商品单价,通过修改字典元素的方法,更新保存在product_stock字典中商品信息。原有代码...update_product=input("\n请输入要更新的商品名称:")ifupdate_productinproduct_stock:new_stock=int(input("请输入新的库存数量:"))new_price=float(input("请输入新的商品单价:"))product_stock[update_product]=[new_stock,new_price]print(f"{update_product}的库存和价格已更新!")else:print(f"未找到{update_product}的库存信息!")#显示指定商品信息print(f"\n{update_product}的当前信息:")ifupdate_productinproduct_stock:stock,price=product_stock[update_product]print(f"库存:{stock}件|单价:{price}元")案例实现STEP04查询特定商品信息通过商品名称查询特定商品信息,同时进行条件判断与错误处理。原有代码...search_product=input("\n请输入要查询的商品名称:")ifsearch_productinproduct_stock:stock,price=product_stock[search_product]print(f"{search_product}|库存:{stock}件|单价:{price}元")else:print(f"未找到{search_product}的库存信息!")案例实现STEP05计算库存总价值用四则运算计算库存总价值,并格式化输出保留结果小数点后两位。原有代码...total_value=0forproduct,infoinproduct_stock.items():stock,price=infototal_value+=stock*priceprint(f"\n库存商品总价值:{total_value:.2f}元")【案例4-4】“戏曲研习社”活动管理04案例分析本案例模拟“戏曲研习社”活动管理,综合运用列表、元组、字典及集合等多种符合数据类型,实现了复杂的活动管理功能。列表的有序性便于按顺序管理成员名单;元组的不可变性确保固定活动类型稳定存储,避免随意篡改;字典以键值对形式记录成员详细信息与报名情况,实现快速查询与修改;利用集合无序且不重复的特性,高效完成成员名单去重、活动参与人员关系分析等操作。知识储备集合基本操作常用集合方法知识储备知识储备—集合基本操作1.创建集合集合可以通过大括号{}或set()函数来创建,但是创建一个空集合必须用set()而不是{},因为{}是用来创建一个空字典。语法格式如下:使用花括号创建:{}使用set()函数创建:set1={元素1,元素2….}语法格式知识储备—集合基本操作set1=set() #创建空集合print(set1)set2={1,2,3,4,5} #使用花括号创建集合print(set2)set3=set([3,4,5,6,7]) #使用set()函数创建集合print(set3)示例35使用不同方式创建集合。知识储备—集合基本操作2.遍历集合由于集合是无序的,因此不能像列表或元组那样通过索引来直接访问集合中的特定元素,也不能切片。但是,可以通过遍历集合中的所有元素来间接地访问它们。【示例36】使用for循环遍历集合中的元素,示例代码如下:fruits={"apple","banana","cherry"}forfruitinfruits:print(fruit)知识储备—集合基本操作3.集合的运算(1)交集运算当两个集合A和B有共同元素时,这些共同元素所组成的集合被称为集合A与集合B的交集。交集是同时属于两个集合的元素所组成的集合,如图所示。在Python中,交集运算通过使用“&”运算符来实现,语法格式如下:集合A&集合B语法A&B(交集)知识储备—集合基本操作set1={1,2,3,4}set2={3,4,5,6}intersect_set1=set1&set2print("使用&运算符得到的交集:",intersect_set1)示例37使用“&”运算符求交集。知识储备—集合基本操作3.集合的运算(1)并集运算将两个集合A和B的所有元素汇总,所形成的全新集合被定义为集合A与集合B的并集。并集是合并两个集合所有元素形成的新集合,重复元素只保留一个,如图4-6所示。在Python中,并集运算通过“|”运算符来实现,语法格式如下:集合A|集合B语法A|B(并集)知识储备—集合基本操作set1={1,2,3}set2={3,4,5}union_set1=set1|set2print("使用|运算符得到的并集:",union_set1)示例38使用“|”运算符求并集。知识储备—集合基本操作3.集合的运算(1)差集运算若存在两个集合A与B,那么由所有既属于A又不属于B的元素所组成的集合,被称作集合A与集合B的差集。差集是由属一个集合但不属于另一个集合的元素组成,如图4-7所示。在Python中,差集运算通过“-”运算符来实现,语法格式如下:集合A-集合B语法A-B(差集)知识储备—集合基本操作set1={1,2,3,4}set2={3,4,5,6}diff_set1=set1-set2print("使用-运算符得到的差集:",diff_set1)示例39使用“-”运算符求差集。知识储备—集合基本操作3.集合的运算(1)对称差集运算对称差集,又称对称差分或补集,涉及两个集合A与B。对称差集是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 演出设备调试工程师考试试卷及答案
- 盐沼生态修复工程师考试试卷及答案
- 研学住宿床铺整 理技师(中级)考试试卷及答案
- 压铸模具设计工程师考试试卷及答案
- 2026年山东省安丘市高二生物下册期末考试模拟卷及答案【典优】
- 2025年江苏省新沂市高二生物下册期末考试考试卷含完整答案【全优】
- 2025年辽宁省新民市高二生物下册期末考试考试卷(典优)附答案
- 2026年湖北省仙桃市高二生物下册期末考试考试卷及参考答案【轻巧夺冠】
- 2026年江西省贵溪市高二生物下册期末考试考试卷附答案(预热题)
- 2026年山西省古交市高二生物下册期末考试检测卷带答案(黄金题型)
- 2026联勤保障部队第926医院社会用工招聘58人备考题库含答案详解
- 2026年高考英语全国卷II试题+答案详情分析
- 2026年辅导员笔试案例分析
- 2026年北京版(新教材)小学数学一年级下册期末学情自测卷及答案
- 2026四川成都香城公园城市建设集团有限公司招聘一线岗位员工12人笔试参考题库及答案详解
- 2023年上海市中考语文真题试卷及答案(解析版)
- 2026中国矿产资源市场格局及发展趋势预测报告
- 青海德坤电力集团有限公司2026年招聘笔试题库
- 2026年国企大五人格测试题及答案
- 2026年二季度专题党课讲稿
- 完善城市更新工程项目建设实施管理机制可复制经验做法清单
评论
0/150
提交评论