人工智能基础:案例驱动的技术认知与应用 课件 第二章 AI编程之基_第1页
人工智能基础:案例驱动的技术认知与应用 课件 第二章 AI编程之基_第2页
人工智能基础:案例驱动的技术认知与应用 课件 第二章 AI编程之基_第3页
人工智能基础:案例驱动的技术认知与应用 课件 第二章 AI编程之基_第4页
人工智能基础:案例驱动的技术认知与应用 课件 第二章 AI编程之基_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CHAPTER02·教学课件AI编程之基——Python基础从认知到实践本讲范围:2.1Python基础知识|2.2程序控制结构从"认知"走向"实践":掌握Python核心语法要素,让代码学会判断和重复执行——为AI编程筑牢根基。配套教材:《人工智能基础:案例驱动的技术认知与应用》第2章LEARNINGOBJECTIVES学习目标:本章要掌握什么?第2章·AI编程之基知识目标KNOWLEDGE01掌握Python变量与数据类型的定义,以及运算符和输出格式的使用方法02掌握选择结构、循环结构等程序控制结构的特点与使用方法03掌握列表、元组、字典、集合等复合数据类型的使用方法04掌握函数的调用、参数传递、变量作用域,以及各类文件的读写操作思政目标VALUES01

培育科技报国的使命担当——"嫦娥六号"月背着陆案例02

树立科技为民的价值导向——青蟹"数字公寓"智慧养殖案例03

厚植文化自信与民族传承意识——盘古中医药大模型案例04

强化守护公共安全的责任意识——气象数据筑牢防灾屏障案例本章定位:从"认知"走向"实践"——每个控制语句的设计、每种数据类型的选择,都是AI技术落地的关键一步。内容来源:教材第2章知识目标与思政目标02KNOWLEDGEMAP知识导图:本章的知识地图第2章·导图第2章知识导图(教材原图)本讲聚焦两条主线2.1Python基础知识·Python特点与应用:核心优势及应用场景·Python开发环境:常用工具与配置方法·变量与数据类型:认识变量与常见数据类型·运算符与表达式:构建计算和条件判断的基础零件2.2程序控制结构·选择结构:让程序根据条件完成不同任务·循环结构:让程序自动重复完成相同任务后续章节预告:2.3复合数据类型→2.4Python函数→2.5Python文件操作,将依托青蟹养殖、中医药大模型、气象防灾案例逐一展开。03CASESTUDY导读案例:从航天到田间——Python,AI落地的技术基石第2章·导读航天"嫦娥六号"月背着陆着陆器精准规避陨石坑的每次决策,背后是程序控制逻辑的层层支撑。农业浙江三门青蟹"数字公寓"青蟹安稳蜕壳、存活率大幅提升的成果,源于复合数据类型对多维养殖数据的精准存储。医疗盘古中医药大模型读懂千年古籍、辅助医生辨证开方,核心是成百上千个函数模块的协同作战。气象超强台风"启浪"路径模拟气象部门15分钟内完成路径模拟,依靠的是文件操作对海量气象数据的高效存取与调度。一个共同的核心技术基石Python编程从航天着陆的判断逻辑到养殖数据的特征提取,从中医辨证的函数封装到气象数据的文件归档,AI对现实问题的解决,最终都要落地为一行行具体的Python代码。可以说,Python就像AI技术的"通用语言",而程序控制、复合数据类型、函数、文件操作,正是这门"通用语言"中最基础也最核心的语法要素。课堂思考那些看似复杂的AI应用,都是由基础编程知识逐步构建而成的。接下来,就让我们从这些基础知识出发,开启AI编程的入门之旅。资料来源:教材第2章导读案例04SECTION2.1.1·FEATURES2.1.1Python的五大特点:为什么是它?2.1·基础知识01简单易学代表简单主义思想的语言,可以使用尽量少的代码完成更多工作——让开发者专注于解决问题,而不是去搞明白语言本身。02免费开源Python是FLOSS(自由、开源软件)——可自由发布副本、阅读源代码、进行改动,并把其中一部分用于新的自由软件。03跨平台性由于开源本质,Python已被移植到许多平台——在Linux、Windows、Macintosh、Android等平台上都可以运行Python编写的程序。图2-1C++代码示例(教材原图)图2-2Python代码示例(教材原图)图2-3常见开源软件图2-4Python的跨平台性对比体会:同样输出1~10,C++需要9行代码,Python仅需2行——"简单易学"一目了然。内容来源:教材2.1.1节(图2-1至图2-4)05SECTION2.1.1·APPLICATIONS丰富的库+胶水语言:Python用在哪?2.1·基础知识04

丰富的库官方提供非常完善的标准代码库,开源社区和独立开发者长期贡献了大量第三方库——数量远超其他主流编程语言。图2-5常见的Python库(教材原图)05

胶水语言提供丰富的API和工具,可轻松调用C、C++等主流语言编写的模块来扩充程序——像胶水一样把其他语言编写的模块黏合起来。图2-6胶水语言(教材原图)核心应用方向①应用程序开发②AI(机器学习、神经网络、深度学习)③数据分析④自动化运维⑤云计算(OpenStack)⑥网络爬虫⑦Web开发⑧游戏开发内容来源:教材2.1.1节(图2-5、图2-6)06SECTION2.1.2·SETUP2.1.2开发环境搭建:四步装好Python2.1·基础知识1访问官网

Python官方网站为用户提供多版本安装包资源,支持各类使用场景下的下载需求,保障安装过程的规范性与可靠性。2选择版本单击"Downloads"按钮在跳转页面中找到"Lookingforaspecificrelease?"标志下的可安装版本列表,找到所需的Python版本(如Python3.14.2)。3下载安装包定位"Files"标志根据当前操作系统环境选择适配的安装包版本(Windows/macOS/Sourcerelease),单击对应文件名即可启动下载。4运行安装以管理员权限运行关键一步:务必勾选"Addpython.exetoPATH"复选框(若省略将导致后续操作出现严重障碍),再单击"InstallNow"启动安装。安装流程速查(对照教材图2-7~2-11)图2-7Python官方网站首页(Downloads按钮位置)图2-8可安装的Python版本列表(如Python3.14.2)图2-9Python安装文件列表(Files区域选择系统版本)图2-10安装界面(勾选Addpython.exetoPATH)图2-11安装完成界面(Setupwassuccessful)易错提醒新手最常见的安装失败原因就是漏勾"Addpython.exetoPATH"——漏掉它,命令行将无法识别python命令。内容来源:教材2.1.2节(图2-7至图2-11)07SECTION2.1.2·IDE2.1.2三款主流IDE:按需选择你的工具2.1·基础知识Anaconda开源的Python发行版本,3大优点:①附带一大批常用的数据科学包②帮助在计算机上安装和管理包③可创建多个Python环境,不同环境互不影响适合:数据科学与AI入门者,开箱即用(界面见图2-12)VisualStudioCode为Python开发者提供轻量灵活体验:·插件生态极致丰富,支持跨平台无缝协作·集成Jupyter与实时代码分析·轻量化设计,兼顾性能与定制化自由度适合:追求灵活定制的开发者(界面见图2-13)PyCharmPython专属旗舰IDE:·自带Python深度优化的智能提示·框架专属模板与科学计算可视化·集成全流程开发工具,无须额外配置即可享高效闭环体验适合:中大型项目专业开发(界面见图2-14)选择建议:三者并非互斥——数据科学入门首选Anaconda,轻量灵活选VSCode,专业项目开发选PyCharm。本课程实践环节以教材示例环境为准,任选其一即可完成全部练习。内容来源:教材2.1.2节(图2-12至图2-14)08SECTION2.1.3·DATATYPES2.1.3变量与数据类型:6种核心数据类型2.1·基础知识Python拥有完备且丰富的数据类型体系。编程实践中,可通过type()函数获取指定对象的数据类型。数字型(Number)存储和表示数值类数据,主要包含整型(Integer)与浮点型(Float)两大基本类别,分别处理整数与小数相关的数值运算和数据存储。字符串(String)由一系列字符构成的不可变序列,使用一对引号包裹——支持单引号(')和双引号(")两种形式,功能上等价。布尔型(Boolean)取值限定为True与False两个常量——条件判断的依据、逻辑运算(and/or/not)的参与者,是构建程序逻辑流程的关键元素。列表(List)存储有序元素集合,可容纳不同类型元素、允许嵌套;作为可变对象,创建后可动态添加、修改或删除元素。元组(Tuple)有序且不可变的数据类型,常用于存储多个不同类型的元素——元素一旦定义便无法修改,在数据保护和哈希场景中具有独特优势。字典(Dictionary)以键值对(key-valuepair)形式存储数据——键唯一且不可变、值可任意类型,实现高效查找、插入与删除。内容来源:教材2.1.3节09SECTION2.1.3·ASSIGNMENT2.1.3赋值运算符:给变量赋值与更新2.1·基础知识掌握基础数据类型后,还需借助基本赋值与复合赋值运算符,实现对数据的灵活操作与更新。除了基本赋值运算符(=),还有一系列复合赋值运算符(表2-1)。赋值运算符功能描述示例结果=赋值x=5x为5+=加法后赋值x+=3x为8-=减法后赋值x-=2x为3*=乘法后赋值x*=3x为15/=除法后赋值x/=2x为2.5//=整除后赋值x//=2x为2**=幂运算后赋值x**=2x为25表达式赋值示例a=10b=5c=3result1=a+b*c/2print(result1)#20.0表达式由运算符和操作数构成,用于计算值;操作数可以是值、变量、调用函数的返回值等。注:表中示例均以x的初值为5为前提;取余后赋值(%=)同样属于复合赋值运算符(x%=2→x为1)。内容来源:教材2.1.3节(表2-1)10SECTION2.1.4·OPERATORS2.1.4运算符与表达式:计算和条件判断的基础零件2.1·基础知识①算术运算符表2-2+-*/执行基础数值计算//整除(15//2→7,向下取整)%取余(15%2→1)**幂运算(2**3→8)注意:除法(/)的结果永远是浮点型。②关系运算符表2-3,共6个==!=><>=<=核心功能是比较两个可比较对象的值,判断其之间的关系——运算结果为布尔型(True表示成立,False表示不成立)。如:5==5→True;'123'<'1'→False③逻辑运算符表2-4,共3个and(逻辑与):两者都为真才返回真(5>3)and(5<10)→Trueor(逻辑或):至少一个为真就返回真(5>3)or(5>10)→Truenot(逻辑非):取反运算not(5>3)→False灵活点:运算对象既可以是布尔型,也可以是整数、字符串等非布尔型(自动转换后参与运算)——它们是构建复杂条件判断的基础。④序列运算符表2-5,字符串/列表/元组+(连接运算):按原始顺序依次拼接[1,2]+[3,4]→[1,2,3,4];"abc"+"de"→"abcde"*(倍增运算):序列元素重复n次[1,2,3]*2→[1,2,3,1,2,3];"123"*2→"123123"提醒:部分运算符具有多重功能——如"&"既可作位运算的与运算符,又可作集合的交集运算符,具体作用取决于运算对象的类型。内容来源:教材2.1.4节(表2-2至表2-5)11SECTION2.1.4·INPUT/OUTPUT2.1.4键盘输入与屏幕输出:input()与print()2.1·基础知识①input()函数键盘输入调用时程序会暂停执行并等待用户键盘输入;按下Enter后,函数将用户输入的所有字符以字符串类型返回。n=input("请输入一个数:")#请输入一个数:2print(n,type(n))#2<class'str'>关键陷阱:input()获取的用户输入始终是字符串类型——进行数值计算前,需显式转换为int、float等所需类型。m=int(n)x=float(n)print(type(m),type(x))#int/float②print()函数屏幕输出最简单的使用方式为print(合法的Python表达式)。print(1)#1print(3+4-5)#2print(6==2)#Falseprint('abc')#abc③格式化输出f-string需要将数据按照特定格式输出时(如浮点型数据精确到小数点后4位、在固定文本中动态插入变量值),使用f-string非常方便、直观。Pi=3.1415926535print(f'Pi={Pi:.4f}')#Pi=3.1416内容来源:教材2.1.4节12SECTION2.2·CASESTUDY2.2导读案例:航天着陆中的判断逻辑2.2·程序控制图2-15"嫦娥六号"月背着陆(教材原图)2025年,我国"嫦娥六号"着陆器实现人类首次月球背面自动采样返回。月背南极-艾特肯盆地遍布巨型撞击坑,地形起伏超过千米。在着陆器动力下降的20分钟里,每秒都关乎任务成败——从距离月面100米的悬停阶段开始,激光三维成像敏感器需要在0.2秒内完成着陆区扫描,实时传回高程、坡度、粗糙度等核心数据。这些数据的快速甄别与决策,全靠程序控制结构层层支撑。程序中的避障逻辑·外层循环:持续监测地形数据回传状态,确保0.2秒扫描周期内无数据中断·嵌套多分支:单分支判断是否存在直径大于5米的陨石坑→多分支分级校验区域坡度是否超过15°安全阈值、岩石障碍是否超出着陆稳定性要求科技报国:每行循环代码,都是对探月使命的坚守;每次分支判断,都是对国家航天事业的担当。资料来源:教材2.2节导读案例(图2-15)13SECTION2.2.1·IF/IF-ELSE2.2.1选择结构(上):单分支与双分支2.2·程序控制①单分支结构(if)满足条件才执行——像一个智能过滤器程序设计中最基本的选择结构:如果某个条件成立,就执行相应的操作;如果条件不成立,就直接跳过,继续执行后续程序。案例场景:当着陆器高度小于2000米时,触发粗避障模式(仅在满足条件时执行特定动作)。#单分支结构:触发粗避障模式height=1800#着陆器当前高度(米)ifheight<2000:print("高度小于2000米,触发粗避障模式")#执行粗避障动作:调整着陆轨迹、扩大地形扫描范围②双分支结构(if-else)两条路都可以走——完整的二选一决策不仅处理条件成立时的情况,还专门处理条件不成立时的情况。如果条件成立,执行操作A;否则执行操作B——无论条件如何,都会执行其中一个分支,且只执行一个分支。案例场景:当距离月面高度小于500米时触发精避障模式;否则继续维持粗避障模式。#双分支结构:触发精避障模式distance=450#距离月面高度(米)ifdistance<500:print("距离月面高度小于500米,触发精避障模式")#执行精避障动作:高清成像、精准计算着陆点else:print("距离月面高度大于500米,维持粗避障模式")#继续粗避障阶段内容来源:教材2.2.1节14SECTION2.2.1·IF-ELIF-ELSE2.2.1选择结构(中):多分支结构2.2·程序控制多分支结构也称为if-elif-else语句,是在双分支结构基础上的进一步扩展——允许程序根据多个不同的条件选择不同的执行路径,为程序提供了"多条路都可以走"的能力。如果条件1成立,执行操作A;否则如果条件2成立,执行操作B;否则如果条件3成立,执行操作C……否则执行默认操作Z。这种结构能够处理多个互斥条件的情况。if条件1:代码块1elif条件2:代码块2...else:代码块n案例场景:精避障阶段根据着陆点平整度选择动作平整度≤1°(最优)直接着陆1°<平整度≤3°(可接受)微调后着陆平整度>3°(不可用)重新选择着陆点#多分支结构:着陆点平整度判断flatness=2.5#着陆点平整度(单位:度)ifflatness<=1:print("着陆点平整度最优,直接着陆")elifflatness<=3:print("着陆点平整度可接受,微调后着陆")else:print("着陆点平整度不可用,重新选择着陆点")读代码:当flatness=2.5时,条件1(≤1)不成立→判断条件2(≤3)成立→执行"微调后着陆",跳过后续分支。这就是"多条件选择"的多分支逻辑。内容来源:教材2.2.1节15SECTION2.2.1·NESTEDIF2.2.1选择结构(下):嵌套条件语句2.2·程序控制嵌套条件语句是指在一个条件分支的内部又包含了另一个条件分支——用于处理更复杂的逻辑判断,其中外层条件满足时,进一步判断内层条件。执行逻辑:若外层条件(判断条件1)为True,执行代码块1并对内层条件(判断条件2)进行判断;若判断条件1为False,则直接跳过整个嵌套结构。if判断条件1:#外层条件代码块1

if判断条件2:#内层条件代码块2...案例场景:着陆全程需要先判断高度触发对应避障阶段,在每个阶段内根据地形数据判断是否调整轨迹——这是"条件中嵌套条件"的复杂逻辑。#简化版嵌套条件:航天着陆器避障决策h=800#着陆器高度(米)c=6#最大陨石坑直径(米)ifh<2000:print("触发粗避障模式")

ifc>5:print("检测到大型陨石坑,调整轨迹")

else:print("无大型障碍,保持轨迹")else:print("触发巡航扫描模式")

ifc>10:print("检测到巨型障碍,标记规避区")

else:print("地形稳定,继续扫描")执行追踪h=800<2000→进入外层"粗避障"分支c=6>5→内层条件成立输出:检测到大型陨石坑,调整轨迹内容来源:教材2.2.1节16SECTION2.2.2·RANGE/FOR2.2.2循环结构(上):range()与for循环2.2·程序控制①range()函数数字序列生成器——通常与for循环结合使用Python中非常重要的内置函数,用于生成一个整数序列——按照指定规则产生一连串数字,控制循环次数或生成特定范围的数字序列。#①传1个参数:从0到该参数(不含)foriinrange(5):#输出0,1,2,3,4#②传2个参数:从第1个到第2个参数(不含)foriinrange(2,5):#输出2,3,4#③传3个参数:步长为第3个参数foriinrange(0,10,2):#输出0,2,4,6,8补充:Python还提供range_type()、irange()等函数,可用于更复杂的场景。②for循环自动化流水线工人——遍历序列或执行固定次数循环按照预定规则,逐个处理集合中的每个项目,或者重复执行某项任务特定次数。案例场景:"嫦娥六号"任务中,对10组关键测控数据(编号1~10)快速校验,筛选出符合阈值(≥80)的有效数据。#range循环:批量校验10组关键测控数据print("嫦娥六号测控数据批量校验")#range(1,11)生成1~10的序列,对应10组数据fordata_numinrange(1,11):#模拟数据(第3、7组为异常值)measure_data=88ifdata_numnotin[3,7]else65

ifmeasure_data>=80:print(f"第{data_num}组数据:{measure_data}→校验通过")

else:print(f"第{data_num}组数据:{measure_data}→需要重新采集")体现range循环"固定次数遍历"的核心逻辑。内容来源:教材2.2.2节17SECTION2.2.2·WHILE2.2.2循环结构(中):while循环2.2·程序控制while循环基于条件表达式的真假来控制循环的执行——只要条件为真,循环就会一直执行;当条件变为假时,循环停止。就像一个不知疲倦的哨兵,一直站岗直到接到"停止"的命令。特别适合处理那些循环次数不确定的场景。while条件表达式:代码块案例场景:着陆器下降阶段实时监测速度,直到速度降至安全阈值(≤1.5m/s)#while循环:着陆器速度实时调控print("\n着陆器下降速度调控")current_speed=8.0#初始下降速度(m/s)whilecurrent_speed>1.5:#速度未达安全阈值时,持续减速调控print(f"当前速度:{current_speed}m/s→执行减速")current_speed-=1.2#每次减速1.2m/s#循环结束:速度达标print(f"当前速度:{current_speed:.1f}m/s→速度安全,准备着陆")执行过程8.0→6.8→5.6→4.4→3.2→2.0→0.8当速度降至0.8m/s(≤1.5)时,条件为假,循环停止。体现while循环"条件满足则持续执行"的核心逻辑。for还是while?循环次数确定(遍历序列、固定次数)用for;循环次数不确定(直到满足某条件才停止)用while。内容来源:教材2.2.2节18SECTION2.2.2·NESTEDLOOPS2.2.2循环结构(下):嵌套循环2.2·程序控制嵌套循环是指一个循环语句的循环体内包含另一个循环语句——外层循环每执行一次,内层循环就要完整执行一轮,适用于需要同时处理多组关联数据的复杂场景。两种循环(for/while)可以相互嵌套、自由组合,但不能交叉。补充:continue用于跳过本次循环的剩余语句直接进入下一次循环。for元素in可迭代对象:

while条件表达式:代码块案例场景:精避障阶段对3个候选着陆区(A/B/C)逐一评估,每个着陆区扫描5个参数点#嵌套循环:遍历候选着陆区+扫描参数点print("候选着陆区参数批量扫描")candidate_areas=["A区","B区","C区"]#外层循环:遍历每个候选着陆区forareaincandidate_areas:print(f"开始扫描:{area}")#内层循环:扫描当前区域5个参数点(1~5)

forpoint_numinrange(1,6):#模拟扫描值:第3个点标记为"待复核"scan_result="合格"ifpoint_num!=3else"待复核"print(f"{point_num}号参数点:{scan_result}")print(f"{area}扫描完成")执行结构外层3次(A/B/C区)×内层5次(1~5号参数点)=共执行15次扫描。体现嵌套循环"多组关联数据批量处理"的核心逻辑。思路与"嫦娥六号"激光三维成像敏感器的着陆区扫描逻辑一致。内容来源:教材2.2.2节19SUMMARY本讲小结:2.1—2.2核心知识回顾第2章·小结01

Python的特点与应用简单易学、免费开源、跨平台、丰富的库、胶水语言——应用于AI、数据分析、Web开发、自动化运维等领域。02

开发环境官网下载安装(牢记勾选Addpython.exetoPATH);Anaconda/VSCode/PyCharm三款IDE按需选择。03

变量、数据类型与运算符6种核心数据类型;基本与复合赋值运算符;算术、关系、逻辑、序列四类运算符;input()返回字符串、print()搭配f-string格式化输出。04

选择结构单分支if→双分支if-else→多分支if-elif-else→嵌套条件语句——处理从"是否执行"到"多条件选择"再到"条件中嵌套条件"的判断逻辑。05

循环结构range()生成序列;for循环遍历固定次数;while循环条件控制;嵌套循环处理多组关联数据——让程序自动重复完成任务。06

案例主线全程以"嫦娥六号"月背着陆为背景——每一行循环代码,都是对探月使命的坚守;每一次分支判断,都是对国家航天事业的担当。下讲预告:2.3复合数据类型(列表/元组/字典/集合)——青蟹"数字公寓"如何用数据结构精准存储多维养殖数据?20SECTION2.1—2.2·END谢谢观看代码筑梦,科技报国请完成课后习题,并预习下一节内容。CHAPTER02·教学课件AI编程之基——Python基础从认知到实践本讲范围:2.3复合数据类型(列表/元组/字典/集合)王丹丹2026.10.22从一蟹一笼的"数字公寓"出发,掌握Python四种复合数据类型,学会组织、存储与处理多维数据——用数据逻辑解决现实世界的问题。配套教材:《人工智能基础:案例驱动的技术认知与应用》第2章SECTION2.3·CASESTUDY导读案例:一蟹一笼背后的"数据革命"2.3·导读案例——从青蟹养殖看数据的力量2025年,在浙江台州市三门县的一间现代化养殖车间里,数百只青蟹被安置在独立透明的"数字公寓"中,每只都配有专属编号、传感器和摄像头。这不是科幻电影,而是我国智慧农业的真实图景——借助AI与物联网技术,传统水产养殖正经历一场静悄悄却深刻的"数据革命"。青蟹养殖是我国沿海地区重要的农业产业,但传统养殖方式无法预测蜕壳时间,养殖户只能守在塘边整夜巡查,许多软壳蟹因错过最佳捕捞时机而死亡;群养模式下高达40%的伤亡率,让养殖户投入多、回报少,产业发展举步维艰。为解决这些难题,项目团队提出了"青蟹数字公寓"集约化养殖系统(见图2-16),其核心正是数据感知、处理与智能决策。图2-16"青蟹数字公寓"集约化养殖系统(教材原图)课堂思考数百只青蟹,每只都有编号、品种、体重、蜕壳记录、环境偏好……这些多维度、批量化的数据,在Python中应该用什么来存储和组织?内容来源:教材2.3节导读案例(图2-16)02SECTION2.3·CASESTUDY案例解析:三大系统,一场"数据革命"2.3·导读案例(1)独立笼养系统通过"一蟹一笼"实时采集个体行为数据,避免蟹斗,提升存活率。(2)蜕壳预测模型基于视觉传感器技术与先进的AI模型相融合,提取青蟹体态、活动频率等多维特征数据,实现蜕壳前兆92.5%的准确识别。(3)智能环境调控依托多源传感器实时监测水温、溶氧、pH值等数据,动态调整养殖环境,引导集中蜕壳。数据成果与使命担当这一系统不仅将青蟹存活率从不足8%提升至70%,更彰显了我国科技工作者以创新驱动乡村振兴的使命担当。项目团队深入养殖一线,将实验室中的AI算法与养殖户的实际需求紧密结合,用数据智能破解产业难题,真正实现了"科技为民、数据赋能"。本节即将进入Python复合数据类型的学习列表、字典、集合等数据结构,正是我们组织、存储与处理如青蟹生长数据、环境参数、蜕壳记录等多维信息的关键工具。掌握它们,不仅是为了编写更高效的代码,更是为了将来能在智慧农业、智能制造、医疗健康等领域,用数据逻辑解决现实世界的问题,以技术报国之心,践行为民服务之责。内容来源:教材2.3节导读案例03SECTION2.3.1·LIST列表:有序数据的存储与增删改查操作2.3.1·列表列表是Python中最灵活、应用最广泛的复合数据类型,属于有序、可变的序列结构,能够存储任意数量、任意数据类型的元素(如数字、字符串、列表等),如图2-17所示。列表支持在程序运行时动态添加、删除、修改元素,是处理批量数据的首选工具。(1)列表的创建。主要有两种核心方式:使用方括号[]直接创建,或者通过list()函数转换创建。注意:list()函数的参数必须是可迭代对象(如字符串、元组、集合等),否则会触发报错。#创建青蟹基础信息列表(二维列表存储多只青蟹的编号、品种、初始体重)crab_info=[["C001","三门青蟹",125.5],["C002","三门青蟹",118.2],["C003","锯缘青蟹",132.8]]#创建单只青蟹7天体重变化的时序列表crab_c001_weight=[125.5,128.3,130.1,132.7,135.2,138.5,140.2]图2-17列表显示青蟹数据(教材原图)读图:每只青蟹一行记录——编号、品种、初始体重。多行记录按顺序排列、可随时增删,正是"列表"存储批量数据的直观写照。内容来源:教材2.3.1节(图2-17)04SECTION2.3.1·LIST列表的核心操作①②:添加与删除元素2.3.1·列表(2)列表的核心操作。围绕元素的增、删、改、查展开,常用方法如下:append()(末尾添加)、insert()(指定位置添加)、remove()(按值删除)、pop()(按索引删除)等。①添加元素常用append()(末尾添加)、insert()(指定位置添加)等方法。#末尾新增1只青蟹信息crab_info.append(["C004","三门青蟹",98.9])#在索引1位置插入1只青蟹信息crab_info.insert(1,["C005","锯缘青蟹",121.3])②删除元素remove()方法可删除列表中的特定元素,pop()方法可删除指定位置的元素,若不指定位置,则默认删除最后一个元素。#删除编号为C005的青蟹信息(按值删除)crab_info.remove(["C005","锯缘青蟹",121.3])#删除最后1只青蟹信息(按索引删除)crab_info.pop()对比记忆append()加在末尾,insert()插队到指定位置;remove()按"值"找人,pop()按"位置"请离。养殖编号新增、淘汰个体移除——青蟹档案的动态维护,靠的就是这组增删方法。内容来源:教材2.3.1节(2)列表的核心操作05SECTION2.3.1·LIST列表的核心操作③:索引、切片与循环遍历2.3.1·列表(3)列表的访问。通过索引(正向从0开始,反向从-1开始)访问单个元素,也可通过切片list[start:end:step]提取部分元素,或者通过循环遍历所有元素。#正向索引访问C002的初始体重print("C002的初始体重:",crab_info[1][2])#反向索引访问最后1只青蟹的品种print("最后1只青蟹的品种:",crab_info[-1][1])#循环遍历所有青蟹的编号forcrabincrab_info:

print("青蟹的编号:",crab[0])索引crab_info[1][2]:第2只青蟹(索引1)的第3个字段(索引2)→初始体重。切片list[start:end:step]:起点、终点、步长三段式,含头不含尾,可批量提取连续记录。循环遍历for循环逐个取出元素,配合2.2节的循环结构,即可批量处理全部青蟹档案。内容来源:教材2.3.1节(3)列表的访问06SECTION2.3.1·LIST列表推导式:一行代码生成目标列表2.3.1·列表(4)列表推导式。是创建列表的简洁方式,格式为变量名=[表达式for变量in可迭代对象],可快速生成满足特定条件的列表。#生成0~10整数的平方列表squares=[x**2forxinrange(11)]print(squares)#筛选青蟹信息列表中所有三门青蟹的编号sanmen_crab_ids=[crab[0]forcrabincrab_infoifcrab[1]=="三门青蟹"]print("三门青蟹的编号:",sanmen_crab_ids)结构拆解[表达式for变量in可迭代对象if筛选条件]——for负责"遍历取数",if负责"按条件筛选",表达式负责"决定要留下什么"。从几百条养殖记录中筛出目标个体,一行就能完成。内容来源:教材2.3.1节(4)列表推导式07SECTION2.3.1·LIST多维列表:列表中再装列表2.3.1·列表(5)多维列表。多维列表的元素为列表(如二维列表的元素是一维列表),可通过列表名[行索引][列索引]获取元素,也可利用循环生成。根据本节案例,具体代码示例如下。#直接创建二维列表(青蟹蜕壳记录:编号、日期、时长)molt_records=[["C001","2025-09-10",3.8],["C002","2025-10-12",4.2]]#访问C001的蜕壳时长print("C001的蜕壳时长:",molt_records[0][2])#循环生成3行4列的随机数据列表(模拟青蟹环境监测数据)importrandomenv_matrix=[[random.randint(5,10)forjinrange(4)]foriinrange(3)]print("环境监测数据矩阵:",env_matrix)理解要点:二维列表就像一张表格——第一个索引选"行"(哪只青蟹/哪条记录),第二个索引选"列"(编号、日期还是时长);嵌套推导式则可一键生成监测数据矩阵。内容来源:教材2.3.1节(5)多维列表08SECTION2.3.2·TUPLE元组:不可变序列的创建2.3.2·元组元组与列表类似,为有序序列,但元组创建后不可变,虽灵活性不足,但执行效率更高,尤其适合用作字典的键或函数的返回值。Python支持通过索引、切片访问元组元素,也可在循环中遍历元组。(1)元组的创建。可使用()或tuple()函数,当创建包含单个元素的元组时,元素后需要加逗号,否则会被视为普通数据类型。#创建空元组empty_tuple=()#创建包含单个元素的元组(必须加逗号)single_element_tuple=(25.0,)#直接创建青蟹蜕壳特征阈值元组(体态变化率、活动频率阈值)molt_threshold=(0.35,5.2)#通过tuple()函数转换创建元组(从列表转换)list_to_tuple=tuple(["C001","三门青蟹",125.5])易错提醒:(25.0)是数字,(25.0,)才是元组——单元素元组的逗号不能省。内容来源:教材2.3.2节(1)元组的创建09SECTION2.3.2·TUPLE元组的使用:访问、拆包与"不可变"2.3.2·元组(2)元组的使用。支持元素访问、拆包等操作,但无法修改元素,否则会引发TypeError。#访问元组元素(青蟹环境参数安全范围)env_safe_range=((22.0,28.0),(5.0,8.0),(7.5,8.5))#(水温、溶氧、pH值)print("水温安全范围:",env_safe_range[0])#元组拆包(提取青蟹蜕壳阈值)body_change_thr,activity_freq_thr=molt_thresholdprint("体态变化率阈值:",body_change_thr)#尝试修改元组元素(会报错)#env_safe_range[0]=(23.0,29.0)#TypeError:'tuple'objectdoesnotsupportitemassignment拆包(解包)左侧变量个数与元组元素一一对应,一次赋值同时取出全部阈值,代码更简洁。为什么"不可变"反而是优点?安全范围、阈值这类"定下来就不该动"的标准数据,用元组存储可防止被程序误改。内容来源:教材2.3.2节(2)元组的使用10SECTION2.3.3·DICTIONARY字典:键值对的创建(嵌套数字档案)2.3.3·字典字典是无序的键值对集合,键具有唯一性且必须是不可变类型(如字符串、数字型或元组),通过键可快速访问、添加或修改对应的值,是处理关联数据的高效工具。在青蟹养殖场景中,可用于存储单只青蟹的完整档案、传感器实时数据等多维度关联信息。(1)字典的创建。可使用{}直接定义键值对,也可通过dict()函数创建。#直接创建单只青蟹的完整数字档案(嵌套列表、字典)crab_c001_profile={

"crab_id":"C001",

"species":"三门青蟹",

"current_weight":140.2,

"molt_history":[{"date":"2025-09-10","duration":3.8},{"date":"2025-10-12","duration":4.2}],

"env_preference":{"temp":(24.0,26.0),"dissolved_oxygen":(6.5,7.5)}}观察:值可以是数字、字符串,也可以是列表(蜕壳记录)甚至另一个字典(环境偏好)——字典让"一只蟹的完整档案"层次清晰。内容来源:教材2.3.3节(1)字典的创建11SECTION2.3.3·DICTIONARY字典的创建(续):传感器数据与dict()函数2.3.3·字典方式一:{}直接定义传感器实时数据字典——键为传感器编号,值为(监测值,采集时间)元组。#直接创建传感器实时数据字典#(传感器编号→(监测值,采集时间))sensor_real_time={

"TEMP_001":(25.3,"2025-11-2008:30:00"),

"DO_001":(6.8,"2025-11-2008:30:00"),

"PH_001":(8.1,"2025-11-2008:30:00")}方式二:dict()函数创建以"键=值"的关键字形式传入,键自动转为字符串。#通过dict()函数创建字典dict_from_func=dict(crab_id="C002",species="三门青蟹",current_weight=118.2)回顾键的规则键必须唯一且为不可变类型(字符串、数字、元组)——上例中"传感器编号→(监测值,时间)元组"正是2.3.2节元组作为字典值嵌套使用的典型场景。内容来源:教材2.3.3节(1)字典的创建12SECTION2.3.3·DICTIONARY字典的操作①:按键访问值2.3.3·字典(2)字典的操作——①访问值:通过字典变量[键]或get(key)方法获取指定键的值,get()方法在键不存在时返回默认值(避免报错)。根据本节案例,代码示例如下。#通过键访问C001当前体重print("C001当前体重:",crab_c001_profile["current_weight"])#通过get()方法访问溶氧传感器数据(键不存在时返回"无数据")do_data=sensor_real_time.get("DO_001","无数据")print("溶氧数据:",do_data)字典变量[键]写法直接、执行高效;但键不存在时会抛出KeyError,适合"确定键一定存在"的场景。get(key,默认值)键不存在时返回指定默认值而非报错,更稳健——传感器离线、数据缺失时程序依然正常运行。内容来源:教材2.3.3节(2)字典的操作①13SECTION2.3.3·DICTIONARY字典的操作②③:添加/修改与删除元素2.3.3·字典②添加/修改元素通过字典变量[键]=值实现:键已存在则修改值,否则添加新的键值对。#修改C001当前体重crab_c001_profile["current_weight"]=142.5#新增C001的最新蜕壳记录crab_c001_profile["molt_history"].append({"date":"2025-11-15","duration":4.5})#新增pH值传感器的监测状态sensor_real_time["PH_001_status"]="正常"③删除元素pop(key)方法可删除指定键的元素。根据本节案例,代码示例如下。#青蟹养殖传感器数据sensors={"TEMP":25.3,"DO":6.8,"PH":8.1}#删除已停用的pH值传感器数据sensors.pop("PH")#用del语句删除pH值传感器的监测状态delsensor_real_time["PH_001_status"]对比记忆赋值语句"一键两用"——键在则改、键不在则增;删除可选pop(key)(还能拿到被删的值)或del语句(直接删除)。体重更新、蜕壳记录追加、停用传感器下线,都是养殖档案的日常维护动作。内容来源:教材2.3.3节(2)字典的操作②③14SECTION2.3.3·DICTIONARY字典的操作④:遍历与查看2.3.3·字典④遍历与查看:items()返回所有键值对,keys()返回所有键,values()返回所有值。结合for循环即可批量巡检全部监测数据。#查看所有传感器编号(键)print(sensor_real_time.keys())#查看所有监测数据(值)print(sensor_real_time.values())#遍历全部键值对,逐条巡检forsid,datainsensor_real_time.items():

print(f"{sid}→{data}")keys()/values()分别拿到"所有键"和"所有值"的视图,可快速核对监测点是否齐全。items()+for循环每次循环同时解包出键和值,是字典遍历的标准写法。案例联想水质大屏上滚动显示的每组"传感器→读数",背后正是items()的批量遍历。内容来源:教材2.3.3节(2)字典的操作④(遍历示例结合本节案例数据编写)15SECTION2.3.4·SET集合:无序不重复数据的创建2.3.4·集合集合用于存储无序且唯一的元素集,支持数学上的并集、交集、差集等运算,集合本身可变,可添加或删除元素,但其内部元素必须是不可变类型。在青蟹养殖场景中,适用于监测编号去重、异常参数类型统计等需求。(1)集合的创建。可使用{}或set()函数,注意使用{}创建空对象时,得到的是空字典而非空集合。#直接创建集合(青蟹监测编号,自动去重)monitor_ids={"C001","C002","C003","C002","C001"}print("去重后的监测编号:",monitor_ids)#创建空集合(必须使用set()函数)empty_set=set()#通过set()函数转换创建集合(从列表转换)abnormal_records=["水温","溶氧","水温","pH值"]unique_abnormal=set(abnormal_records)print("唯一异常参数类型:",unique_abnormal)自动去重:写入重复的"C001"、"C002"只保留一份;列表转集合,是"异常参数类型统计"最快捷的去重手段。内容来源:教材2.3.4节(1)集合的创建16SECTION2.3.4·SET集合的操作①②:添加与删除元素2.3.4·集合①添加元素add()方法添加单个元素,update()方法添加多个元素(可迭代对象)。monitor_ids.add("C004")#添加单个监测编号monitor_ids.update(["C005","C006"])#添加多个监测编号print("添加后的监测编号:",monitor_ids)②删除元素remove():元素不存在则抛出异常;discard():元素不存在时不抛出异常。#删除编号C006(元素存在,正常删除)monitor_ids.remove("C006")#删除编号C007(元素不存在,不报错)monitor_ids.discard("C007")print("删除后的监测编号:",monitor_ids)如何选择remove()还是discard()?希望"删不掉就提醒我"(数据理应存在)用remove();不确定元素是否存在、追求程序稳健(如清理可能重复的离线编号)用discard()。内容来源:教材2.3.4节(2)集合的操作①②17SECTION2.3.4·SET集合的操作③:并、交、差运算2.3.4·集合③集合运算:union()方法实现并运算,intersection()方法实现交运算,difference()方法实现差运算。#计划监测编号集合与实际监测编号集合planned_ids={"C001","C002","C003","C004","C005","C006"}actual_ids={"C001","C002","C003","C004","C005"}#并集:所有计划与实际监测的编号union_ids=planned_ids.union(actual_ids)#交集:计划与实际共同监测的编号intersection_ids=planned_ersection(actual_ids)#差集:计划监测但未实际监测的编号unmonitored_ids=planned_ids.difference(actual_ids)print("未监测的编号:",unmonitored_ids)并集union()两个集合的所有编号(去重后)→监测覆盖全貌。交集intersection()计划与实际共同监测的编号→正常执行的部分。差集difference()计划有、实际无→{"C006"},即需要排查的遗漏监测点。案例价值:一行差集运算就能定位"计划监测却未上报数据"的养殖笼位——集合运算让数据核查从人工逐条比对变为秒级自动完成。内容来源:教材2.3.4节(2)集合的操作③18SUMMARY本讲小结:四种复合数据类型怎么选?2.3·小结类型有序性可变性创建方式青蟹案例中的角色列表list有序(索引访问)可变[]或list()青蟹档案、蜕壳记录的批量存储与增删改查元组tuple有序(索引访问)不可变()或tuple()安全范围、阈值等「定下来就不动」的标准数据字典dict无序(按键访问)可变{}或dict()单只青蟹完整档案、传感器实时数据集合set无序可变(元素不可变){}或set()监测编号去重、计划与实际编号的并/交/差核查选择口诀:要顺序、常改动用列表;定标准、防误改用元组;按名字找数据用字典;去重与集合核查用集合。掌握它们,不仅是编写更高效的代码,更是用数据逻辑解决现实世界问题的基本功。下讲预告:2.4Python函数——盘古中医药大模型背后,成百上千个"智能单元"如何组织与复用代码?19SECTION2.3·END谢谢观看数据赋能,智养未来请完成课后习题,并预习下一节内容。CHAPTER02·教学课件AI编程之基——Python基础从认知到实践本讲范围:2.4Python函数|2.5Python文件操作王丹丹2026.11.05从盘古中医药大模型的"智能单元"到台风预警的数据归档,学会用函数组织与复用代码,用文件操作让数据持久流动。配套教材:《人工智能基础:案例驱动的技术认知与应用》第2章SECTION2.4·CASESTUDY导读案例:当千年中医遇见AI2.4·导读案例——盘古中医药大模型的智慧之路2024年1月23日,浙江九为健康科技股份有限公司与华为云计算技术有限公司在深圳签署合作协议,推出了共同构建的盘古中医药大模型。这一里程碑式的成果,标志着我国在AI与传统医学融合创新方面走在了世界前列。然而,在此之前,中医药的发展长期面临诸多挑战。经验依赖性强:中医讲究"望闻问切、辨证论治",但老中医的经验多靠口传心授,难以标准化传承。术语模糊难量化:"气虚""湿热"等概念缺乏统一的数据表达方式,导致AI难以理解和建模。古籍浩如烟海:《普济方》收录6万余方,《本草纲目》记载1892种药物,人工挖掘效率极低。基层人才短缺:偏远地区缺医少药,年轻医生辨证能力不足,群众对中医的信任度受到影响。面对这些难题,能否用现代科技守护民族瑰宝?能否让沉睡千年的中医智慧,在数字时代焕发新生?正是在这样的时代呼唤下,盘古中医药大模型应运而生。研发团队系统整理了30万余条中医临床记录、10万余条古籍临案文本,融合自然语言处理与知识图谱技术,构建了一个能"读懂经典、理解症状、推荐方剂"的智能系统。它不仅能识别"乏力+盗汗+舌红少苔"对应"阴虚火旺证",还能自动检查"十八反十九畏"配伍禁忌,辅助医生安全开方。盘古中医药大模型已在全国多家中医院试点应用,显著提升了基层诊疗的准确率和效率。一条中国特色的AI发展路径不是照搬西方模式,而是立足本国文化土壤,用科技赋能本土智慧。内容来源:教材2.4节导读案例02SECTION2.4·CASESTUDY案例解析:大模型背后,是一个个"智能单元"2.4·导读案例当我们在感叹这一成就的同时,不禁要问:这样复杂的智能系统,究竟是如何构建出来的?其实,盘古中医药大模型的背后,并非一段庞大混乱的代码,而是由成百上千个结构清晰、功能明确的小模块协同工作而成的——每个辨证判断、每条方剂推荐、每次禁忌检查,本质上都是一个独立封装的"智能单元"。在Python编程中,我们把这样的"智能单元"称为函数(Function)。核心定义每个函数都像一位专业岗位上的"数字医师",各司其职、协同作战。它们可以被反复调用、组合使用,极大地提升了开发效率与系统稳定性,如图2-18所示。函数是Python编程的核心工具,也是AI开发中实现代码模块化、可复用性与团队协作的基础。无论是数据预处理、模型训练,还是结果评估与应用部署,几乎所有AI任务都依赖函数对复杂逻辑的封装与管理。本节将从函数的定义与调用、参数传递机制、变量作用域3个维度出发,结合AI中的典型应用场景,系统讲解函数的核心语法与实践技巧。图2-18"数字医师"示意图(教材原图)读图:30万+中医临床记录、10万+古籍临案文本汇入大模型,经由Python编写的一个个"数字医师"模块处理,最终服务全国中医院试点与基层诊疗提升。内容来源:教材2.4节导读案例(图2-18)03SECTION2.4.1·FUNCTION函数的调用①:内置函数,拿来即用2.4.1·函数函数调用是执行函数功能的过程,通过"函数名+括号"的形式触发,按调用对象可分为内置函数调用与自定义函数调用两类。(1)内置函数调用。Python内置了大量常用函数,无须定义即可直接调用,这类函数在AI数据预处理、结果计算中高频使用。在本节案例讲解中,我们将遇到以下场景:对中医临床症状数据集进行数量统计与排序处理。#模拟中医临床症状数据集tcm_symptoms=["乏力","盗汗","舌红","少苔","口干"]#调用内置函数处理数据symptom_count=len(tcm_symptoms)#统计症状数量sorted_symptoms=sorted(tcm_symptoms)#排序症状名称print(f"临床症状总数:{symptom_count}")print(f"排序后症状:{sorted_symptoms}")理解要点:len()统计元素个数、sorted()返回排序后的新列表——内置函数无须def定义,是Python自带的"常备工具箱";此前学过的print()、input()、range()、set()都属于内置函数。内容来源:教材2.4.1节(1)内置函数调用04SECTION2.4.1·FUNCTION函数的调用②:自定义函数,按需封装2.4.1·函数(2)自定义函数调用。自定义函数是根据具体需求封装的代码块,调用前需要先通过def关键字定义。结合本节案例:通过自定义函数实现中医症状辨证与方剂推荐[这类函数在AI场景(如中医辨证、智能推荐)中可实现逻辑的模块化复用]。#定义中医症状辨证函数defdiagnose(symptoms):

#阴虚火旺证典型症状yin_deficiency={"乏力","盗汗","舌红","少苔"}

iflen(set(symptoms)&yin_deficiency)>=3:

return

"阴虚火旺证"

return

"待辨证"#定义方剂推荐函数defrecommend_recipe(syndrome):recipe_map={"阴虚火旺证":"知柏地黄丸"}

returnrecipe_map.get(syndrome,"暂无推荐方剂")#调用函数patient_symptoms=["乏力","盗汗","舌红","少苔"]syndrome=diagnose(patient_symptoms)recipe=recommend_recipe(syndrome)print(f"辨证结果:{syndrome}")print(f"推荐方剂:{recipe}")✱注在调用函数时,参数数量需要与函数定义匹配,否则会抛出语法错误。若函数有return语句,则调用时可通过变量接收返回值;否则函数默认返回None。串联观察:diagnose()的输出作为recommend_recipe()的输入——函数像"数字医师"一样接力协作。结构拆解:def函数名(参数):→缩进函数体→return返回值。辨证逻辑中调用了2.3节的集合(&交集运算)与字典(get方法),复合数据类型正是函数的"数据处理底座"。内容来源:教材2.4.1节(2)自定义函数调用05SECTION2.4.2·PARAMETERS参数传递①②:位置参数与关键字参数2.4.2·参数参数是函数与外部交互的桥梁,Python支持灵活的参数传递机制,适配AI开发中复杂的参数配置需求——如模型超参数的精细调优、多维度数据的高效输入。(1)位置参数。按函数定义的参数顺序传递是最基础的传递机制,适用于参数较少、含义明确的场景。结合本节案例:计算中药方剂中单味药的剂量。#定义方剂剂量计算函数defcalc_dosage(herb,base_dosage,weight,adjust=True):

ifadjust:

return

f"{herb}:{base_dosage*(weight/60):.1f}g"

return

f"{herb}:{base_dosage}g"#位置参数调用dosage1=calc_dosage("知母",12,55)#关键字参数调用dosage2=calc_dosage(herb="黄柏",base_dosage=10,weight=70)print(dosage1)①位置参数calc_dosage("知母",12,55):实参按位置顺序依次对应herb、base_dosage、weight——顺序错了,数据就张冠李戴。②关键字参数通过"参数名=值"的形式传递参数,无须严格按照顺序,提高代码的可读性,适用于参数较多的场景。内容来源:教材2.4.2节(1)(2)06SECTION2.4.2·PARAMETERS参数传递③:默认参数,常见配置免输入2.4.2·参数(3)默认参数。定义函数时为参数指定默认值,调用时可省略该参数,适用于常用参数固定、特殊场景需要调整的情况。结合本节案例,检查中药方剂的配伍禁忌,默认使用常见的"十八反"禁忌组合,特殊场景可自定义禁忌列表。#带默认参数的配伍禁忌检查defcheck_forbidden(recipe,forbidden=None):

ifforbiddenisNone:forbidden=[("甘草","甘遂"),("乌头","贝母")]recipe_set=set(recipe)

forpairinforbidden:

ifpair[0]inrecipe_setandpair[1]inrecipe_set:

return

"存在配伍禁忌"

return

"无配伍禁忌"默认值None的写法调用时不传forbidden,函数内部自动启用"十八反"默认禁忌组合;传入自定义列表则按新规则检查。案例价值常规方剂一键安检,科研新方灵活配置——默认参数让函数"常用场景零负担,特殊场景可扩展"。使用建议:默认参数要放在位置参数之后定义;调用时既可省略(用默认值),也可用关键字方式显式覆盖——上节calc_dosage的adjust=True正是同款设计。内容来源:教材2.4.2节(3)默认参数07SECTION2.4.2·PARAMETERS参数传递④:可变参数,个数不限2.4.2·参数(4)可变参数。用于接收任意数量的参数,分为可变位置参数(*args)和可变关键字参数(**kwargs),适用于参数数量不确定的场景。在本节案例中,统计多个中医方剂涉及的药材总数,方剂数量不固定时用可变参数接收。#可变参数的多方剂统计defstat_recipes(*recipes):total_herbs=set()

forherbsinrecipes:total_herbs.update(herbs)

return

f"涉及的药材总数:{len(total_herbs)}"#调用示例recipe1=["知母","黄柏","熟地"]recipe2=["甘草","当归","白芍"]print(check_forbidden(recipe1))print(stat_recipes(recipe1,recip

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论