版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人工智能编程语言Python项目三IntroductiontoArtificialIntelligence人工智能导论CONTENTS01项目概述02思政聚焦0304项目相关知识05项目任务06项目小结与展望思维导图07项目重难点01项目概述Python已经成为最受欢迎的程序设计语言之一,目前在人工智能科学领域被广泛应用。Python是人工智能(机器学习)的首选编程语言,它拥有众多模块,能完成人工智能开发的所有环节。使用Python进行AI的一个主要优点是它内置了许多与机器学习相关的库。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言。主流的人工智能开发软件如谷歌的TensorFlow、Facebook的PyTorch和百度的PaddlePaddle等都使用python作为开发语言。可以说,学习人工智能,很难不学Python。Python简介02思维导图思维导图03项目重难点Python基本语法:常用数据类型、条件控制语句、函数的定义与调用等。开发环境的搭建与使用。模块化编程思想。项目重难点项目重点面向对象编程:类的定义与使用。复杂逻辑的控制流实现:嵌套使用条件控制和循环结构,以及设计高效的算法逻辑。良好的编程素养(如代码规范、调试能力)。项目难点04思政聚焦在人工智能的学习与开发中,开源社区提供了丰富的资源——码云托管代码、魔搭共享模型、开源中国与掘金促进技术交流,极大降低了学习门槛。然而,使用开源成果必须尊重开源协议,遵守许可条款,明确引用来源,杜绝抄袭与剽窃。诚信是技术人员的立身之本,代码复用不能成为侵犯知识产权的借口。只有树立版权意识,坚持诚信治学、诚信从业,才能在AI领域行稳致远。让我们以敬畏之心对待每一行代码,做有底线、有担当的开发者,共同维护健康有序的开源生态,推动技术进步与繁荣。立身以诚,治学以信:做有底线、有担当的AI开发者05项目相关知识3.1Python的安装与使用
Python的安装通过Python的官方网站()下载获得Python的安装文件。Python安装细节在在很多平台上都有详细介绍,此处不介绍Python的具体安装步骤。1.Python版本在终端(Windows中的命令行窗口)中输入python--version2.Anaconda发行版Anaconda是一个开源的Python发行版本,简称为Anaconda发行版。这个版本集成了一些必要的外部库,在安装Python的时候同步安装。很多用户在安装Python时会选择安装Anaconda发行版,免去了后期自行安装常用外部库的工作。3.1Python的安装与使用
Python的安装在开始菜单中点击安装好的Python图标启动Python解释器,也可以在终端中输入python来启动Python解释器3.1Python的安装与使用
Python的安装此时解释器在交互模式,也称会话模式。交互模式下用户能够以对话的方式进行编程。用户在主提示符后面输入代码,按下回车键后系统会在下一行显示代码的结果。>>>1.2+3.14.3>>>a=1;b=2 #分号分隔的顺序执行语句,此语句无回应>>>print("Helloworld!") #打印语句,下一行是解释器的响应Helloworld!>>>print(2**10) #打印语句,下一行是解释器的响应1024>>>forxin[1,2,3]: #复合语句,横跨两行。无提示符开头的几行为解释器的回应...print(x)...123>>>3.1Python的安装与使用
Python解释器1.IDLE2.PyCharm3.JupyterNotebook3.1Python的安装与使用
集成开发环境标识符就是程序中用户给变量、函数、类、模块以及其他对象定义的名称,就好像我们每个人都有属于自己的名字。在Python中标识符的命名不是随意的,需要遵守一定的命令规则。标识符可以由字符(A~Z和a~z)、下划线和数字组成,但第一个字符不能是数字,且标识符不能和Python中的保留字相同,不能包含空格、@、%以及$等特殊字符。标识符区分大小写,也就是tmp和Tmp是两个不同的标识符。3.2Python的基本概念
标识符下面所列举的标识符是合法的:UserID,name,mode12,user_age以下命名的标识符不合法:4word#不能以数字开头try#try是保留字,不能作为标识符$money#不能包含特殊字符3.2Python的基本概念
标识符1.语句及分隔符Python语句不需要以分号作为终止标记,一般都是在其所在行的末尾结束。当语句太长时,可以使用括号或者反斜杠让一行代码位于多行之中。>>>x=1+2+3+4+5+6>>>x=1+2+3\...+4+5+6>>>x=(1+2+3...+4+5+6)有些程序员可能会将一些简单的代码写在同一行,中间通过分号隔开,例如:>>>a=1;b=2;c=33.2Python的基本概念
Python语句书写规则2.缩进Python中的缩进(Indentation)决定了代码的作用域范围。这一点和传统的c/c++有很大的不同(传统的c/c++使用花括号花括号{}符决定作用域的范围;python使用缩进空格来表示作用域的范围,相同缩进行的代码是处于同一范围)。每行代码中开头的空格数用于计算该行代码的缩进级别。
1print("start")
2foriinrange(3):
3
print("hello.")
4
print("world.")
5print("end")3.2Python的基本概念
Python语句书写规则注释用来向用户提示或解释某些代码的作用和功能,它可以出现在代码中的任何位置。Python解释器在执行代码时会忽略注释,不做任何处理,就好像它不存在一样。Python支持两种类型的注释,分别是单行注释和多行注释。单行注射以#开头,多行注释使用三个连续的单引号‘’‘或者三个连续的双引号“”“。例如:#这是单行注释‘’’这是多行注释’’’3.2Python的基本概念
注释Python有一组关键字,这些关键字是保留字,不能用作变量名、函数名或任何其他标识符。如and、as、break、continue和class等,我们在后续的学习中会逐步认识这些关键字。3.2Python的基本概念
关键字1.变量我们定义一个计算机变量就好像向快递柜申请一个格子用来存放东西,这个格子的大小呢是根据我们变量的类型(就是想要存放的物品的可能尺寸)来分配的。而在申请一个格子的时候,里面可能会存在一些东西,当我们放新的东西的进去的时候就会把原来的东西给挤走(更准确说是覆盖,旧的东西找不回来了)。如果我们想让这个格子里的内容参与运算的时候,我们只需要告诉运算的指令这个格子的名称(即变量的名称)即可。3.2Python的基本概念
变量与内置常量在编程语言中,将数据放入变量的过程叫做赋值。Python使用等号=作为赋值运算符,具体格式为:name=valuename表示变量名;value表示值,也就是要存储的数据。例如:>>>var1=123>>>var2=4.563.2Python的基本概念
变量与内置常量
变量与内置常量2.内置常量存在于内置命名空间中存储了特定值的名称。比如布尔常量True和False,以及空值None。给内置常量赋值是非法的会引发异常。如果尝试给None赋值为1,解释器会提示错误:>>>None=1File"<stdin>",line1None=1^^^^SyntaxError:cannotassigntoNone3.2Python的基本概念
基本运算符1.算术运算符运算符名称示例+加1+1-减2-1*乘3*4/除3/4//整除(地板除)3//4%取余3%4**幂2**33.2Python的基本概念
基本运算符2.赋值运算符运算符名称示例=常规赋值c=a+b将a+b的运算结果赋值为c+=加法赋值a+=b等效于a=a+b-=减法赋值a-=b等效于a=a-b*=乘法赋值a*=b等效于a=a*b/=除法赋值a/=b等效于a=a/b%=取模赋值a%=b等效于a=a%b**=幂运算赋值a**=b等效于a=a**b//=取整除赋值a//=b等效于a=a//b3.2Python的基本概念
基本运算符3.比较运算符运算符名称示例>大于2>1>=大于等于2>=4<小于1<2<=小于等于5<=2==等于3==4!=不等于3!=53.2Python的基本概念
基本运算符4.逻辑运算符运算符名称示例and与(3>2)and(3<5)or或(1>3)or(9<2)not非not(2>1)3.2Python的基本概念
基本运算符5.其他常用运算符运算符名称示例in存在'A'in['A','B','C']notin不存在'b'notin['A','B','C']3.2Python的基本概念一般情况下,一元运算符优于二元运算符。在二元运算符中,算术运算符的优先级高于关系运算符,关系运算符高于逻辑运算符,逻辑运算符高于赋值运算符。例如a=3+2<4and4<5等价于先判断((3+2)<4)and(4<5),再执行赋值运算将结果赋值给a。
基本运算符6.运算符的优先级3.2Python的基本概念(1)print(2)type(3)range(4)len
内置函数函数是组织好的,可重复使用的代码段。Python的内置函数即是Python自带的函数,不同的内置函数具有不同的功能,用户可以直接使用。一般都是因为使用频率比较频繁或是是元操作,所以通过内置函数的形式提供出来。常用内置函数如:3.2Python的基本概念
编码规范1、规范的代码可以促进团队合作2、规范的代码可以减少bug3、规范的代码可以降低维护成本4、规范的代码有助于代码审查[1]https:///xiaxianfei/p/5275022.html3.2Python的基本概念
数字1.核心数字类型整数类型(int,简称整型)、浮点类型(float)和复数类型(complex)。>>>3+25>>>1.5-4-2.5>>>1.32*67.92>>>2**1001267650600228229401496703205376>>>9/42.25>>>10%733.3数据类型
数字2.布尔类型布尔类型只有两个值,逻辑真(True)和假(False)>>>5>2True>>>2==3False>>>TrueandTrueTrue>>>TrueorFalseTrue>>>True==1True>>>True+233.3数据类型
字符串字符串(str)是一个有序的不可变字符集合,可以用来表现基于文本的信息。字符串通常是由数字、子母、符号组成的一串字符。1.创建字符串字符串可以用两个单引号或两个双引号来作为定界符。比如:>>>string1='张三'>>>string2="李四">>>string3='abc'3.3数据类型
字符串在Python中可以通过反斜杠引入特殊的字符,这就是转义字符。转义字符让我们能够在字符串中嵌入一些有特殊含义的字符或者不容易通过键盘输入的字符。>>>s="a\'\tb\nc">>>len(s) #查看字符串s的长度6>>>print(s)a'bc3.3数据类型
字符串2.字符串常见操作合并(组合字符串)、重复、分片(抽取一部分)、索引(通过偏移获取)等>>>s1='artificial'>>>s2='' #s2为空格>>>s3='intelligence'>>>print(s1+s2+s3) #字符串合并artificialintelligence>>>print(s1*3) #字符串重复artificialartificialartificial>>>print(s1[3:7]) #字符串分片ific>>>print(s3[1]) #字符串索引,s3的第2个元素n>>>print(s1[-2]) #字符串索引,s1的倒数第二个元素a3.3数据类型
字符串3.字符串常用方法(1)replace(2)split(3)upper(4)find(5)join3.3数据类型
列表列表(list)可以将多个元素集合在一起,列表中可以包含任何种类的对象,比如数字、字符串或其他列表。1.创建列表用逗号去分隔不同的数据项,再使用方括号括起来即可>>>list0=[]#这是一个空列表>>>list1=['火车头','第一节','第二节']>>>list2=[1,2,3,4,5,6,7]>>>list3=['blue','red','yellow']>>>list4=['blue',['red','yellow']]#嵌套的子列表>>>list5=['abc','defg',1997,2000]#list5中包含不同类型的元素3.3数据类型
列表2.访问列表>>>print(list1[1])#索引,访问list1的第二个数据第一节>>>print(list2[-1])#索引,访问list2的最后一个数据7>>>print(list2[2:5])#分片,访问list2的第3至5个数据[3,4,5]3.3数据类型
列表3.修改列表在Python中,可以对列表的数据项进行修改、增长或缩短操作。使用列表时,可以将特定的内容赋值给列表索引和分片从而改变列表的内容:>>>list3[1]='green'#将list3的第2个元素改为'green'>>>list3['blue','green','yellow']>>>list3[1:3]=['orange','purple','pink']#将list3的第2至3个元素改为'orange','purple','pink'>>>list3['blue','orange','purple','pink']>>>list3[2:3]=[]#将list3的第3个元素替换为空列表,相当于删除>>>list3['blue','orange','pink']3.3数据类型
列表3.修改列表列表的修改还可以通过调用列表的方法来实现。比如使用append方法在列表末尾添加元素,insert方法在指定位置插入元素,extend方法在列表末端插入多个元素,remove和pop方法移除列表中某元素(pop方法删除元素时会返回被删除的值),或者使用del语句来删除列表元素>>>list5.append(2022)#给list5添加一个新的成员>>>list5.remove('abc')#移除list5中的元素’abc’>>>list5.insert(1,'Python')#在list5的第2个位置插入元素’Python’>>>list5.extend([2026,2030,2034])#在list5末尾插入指定项>>>list5.pop()#删除list5最后一个元素并返回删除的数据2034>>>list5.pop(5)#删除list5第6个元素并返回删除的数据2026>>>dellist5[2:4]#删除list5的第3至4个元素3.3数据类型
列表4.列表的其他操作通过“+”和“*”操作分别实现列表的合并与重复,并得到新的列表。使用in操作符可以返回列表中是否存在某元素。>>>[1,2,3,4]+[5,6,7][1,2,3,4,5,6,7]>>>['火车']*4['火车','火车','火车','火车']>>>2inlist2True3.3数据类型
列表4.列表的其他操作列表的sort和reverse方法分别可以对列表进行排序和反转操作,使用sort方式时要注意不同类型数据的排序可能会引发异常。>>>list3['blue','orange','pink']>>>list3.reverse()#反转list3>>>list3['pink','orange','blue']>>>list3.sort()#对list3进行排序>>>list3['blue','orange','pink']3.3数据类型
元组Python的元组(tuple)与列表类似,区别在于元组不允许修改。列表使用方括号[],而元组使用小括号()。1.创建元组用逗号去分隔不同的数据项,再使用小括号括起来即可>>>tup0=()#创建空元组>>>tup1=('baidu','python','book')#三个元素的元组>>>tup2=(1,2,3,4,5,6,7)#七个元素的元素>>>tup3=(1,[2,3],4)#三个元素的元组3.3数据类型
元组Python的元组(tuple)与列表类似,区别在于元组不允许修改。列表使用方括号[],而元组使用小括号()。1.创建元组用逗号去分隔不同的数据项,再使用小括号括起来即可>>>tup0=()#创建空元组>>>tup1=('baidu','python','book')#三个元素的元组>>>tup2=(1,2,3,4,5,6,7)#七个元素的元素>>>tup3=(1,[2,3],4)#三个元素的元组如果元组只包含一个元素,需要在元素后面添加逗号,否则括号会被当作运算符处理>>>tup4=(50)#不加逗号,类型为整型>>>tup5=(50,)#加上逗号,类型为元组3.3数据类型
元组2.访问元组元组中元素的访问与列表类似,可以通过索引和分片获取。同样,元组的索引从0开始,第二个索引是1,最后一个元素的索引为-1,往前一位是-2,以此类推。>>>tup2[2]3>>>tup2[-2]6>>>tup2[1:5](2,3,4,5)3.3数据类型
元组3.元组的其他操作元组支持通过加号和乘号实现合并和重复>>>tup1+tup2('baidu','python','book',1,2,3,4,5,6,7)元组中的元素值是不允许修改的,对元组的索引或分片进行赋值的操作是非法的,比如若程序中出现tup1[2]=8则会报错。同样,元组不支持reverse和sort等方法调用。元组中的元素值也是不允许删除的,但可以使用del语句来删除整个元组。3.3数据类型
字典字典中的每个元素包含了键(key)和值(value)两个部分,键和值用冒号隔开,键和值组成的元素叫做键值对,键值对与键值对之间用逗号分隔,再用大括号{}括起来。字典的格式如下所示:dict={Key1:value1,Key2:value2,Key3:value3,…}其中Key1:value1就是一个键值对,它的键是Key1,值是value1。键在一个字典中必须是唯一的,值则不必。值可以是任何数据类型,但键必须是不可变的,如字符串,数字。1.创建字典>>>dict1={}#空字典>>>dict2={'name':'zhangsan','age':20}#两个元素的字典>>>dict3={'apples':6,'pears':3,'bananas':9}#三个元素的字典>>>dict4={'animals':{'dogs':2,'cats':5},'student':dict2}#字典的嵌套3.3数据类型
字典2.访问字典字典的访问方式与字符串、列表不同。它不是通过位置下标,而是通过键(key)来获取对应的值。虽然字典中的元素在Python3.7及以后版本中会按插入顺序保存,但访问元素时依然必须使用键,而不是依赖顺序。也就是说,我们是通过键来定位数据,而不是靠它存进去的顺序。用方括号[]可以访问字典中指定的项,也可使用字典的get方法对字典值进行获取。>>>dict2['age']20>>>dict3.get('apples')6>>>print(dict3.get('cherries'))#'cherries'为dict3中不存在的键None>>>dict4['animals']['cats']53.3数据类型
字典2.访问字典字典的keys、values和items方法分别返回该字典的键列表、值列表和键值对列表。但返回的结果并不是一个物理的列表,需要调用list函数一次生成所有的值。>>>l1=list(dict2.keys())#将dict2的键列表赋值给变量l1>>>print(l1)#打印l1['name','age']>>>list(dict3.values()#dict3的值列表[6,3,9]>>>print(list(dict3.items()))#打印dict3的键值对[('apples',6),('pears',3),('bananas',9)]3.3数据类型
字典3.修改字典给一个键赋值可以修改字典中与该键对应的值(修改);如果该键名不存在,则直接增加新的键值对(扩展);使用del语句或字典的pop方法可以删除字典中的键,pop方法在删除键的同时会返回它的值。>>>dict2['age']=21#修改dict2的'age'项>>>dict2['score']='A'#'score'项不存在,相当于给dict2添加'score'项>>>list(dict2.items())[('name','zhangsan'),('age',21),('score','A')]>>>deldict2['age']#删除dict2的'age'项>>>dict3.pop('bananas')#删除dict3的'bananas'项并返回它的值93.3数据类型
字典4.
字典的其他操作字典的clear方法可以清空整个字典,删除一个字典则是使用del语句。字典还可以通过in操作符测试键是否存在。>>>deldict1#删除字典,删除后dict1变量不存在>>>dict1Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>NameError:name'dict1'isnotdefined.Didyoumean:'dict'?>>>dict4.clear()#清空字典,变量dict4仍然存在,为一个空字典>>>dict4{}>>>'weight'indict2False>>>'pears'indict3True3.3数据类型
集合集合(set)是一个无序的不重复元素序列,可以使用花括号或者set函数创建集合。1.创建集合创建集合时用逗号分隔不同的数据项,再使用花括号括起来。注意:创建一个空集合必须用set函数而不能用{},因为{}是指创建一个空字典。>>>set1={'Python',3.13,10}>>>set2={3.13,'Python',10}>>>set3={'Python','Python',3.13,3.13,10}>>>set4=set()#创建空集合>>>print(set1){'Python',10,3.13}>>>print(set2){'Python',10,3.13}>>>print(set3){'Python',10,3.13}3.3数据类型
集合集合的特点:(1)集合和字典一样,里面的顺序是无序的,也就是说{'Python',3.13,10}和{3.13,'Python',10}是相等的。(2)集合元素是不可重复的。若创建集合时写了重复的值,不会报错,但只会保存一个。因而{'Python','Python',3.13,3.13,10}实际上也就是{'Python',10,3.13}。3.3数据类型
集合2.访问集合集合的元素和字典一样是无序的,但没有键与值的概念,所以集合的访问通常只能输出整个集合或者通过for循环实现元素遍历(for循环将在3.5小节中进行介绍)。>>>set1{'Python',10,3.13}>>>forxinset1:print(x)#复合语句,在交互模式下按两次回车才有输出...Python103.133.3数据类型
集合3.修改集合add方法向集合中添加指定元素,如果元素已存在,则不进行任何操作;update方法是使用新的集合更新原集合,将新的集合元素添加至原集合;pop方法删除并返回集合中的任意元素,集合的pop方法和列表的不一样,不能指定删除哪个元素;remove方法删除集合中的元素,若元素不存在就会报错;discard方法也是删除集合中的指定元素,与remove不同的是如果元素不存在则什么也不做;clear方法则是清空集合中的所有元素。3.3数据类型
集合>>>set1.add('Java')>>>set1{'Python',10,3.13,'Java'}>>>set1.update(("Baidu","Taobao"))>>>set1{'Python',3.13,10,'Taobao','Java','Baidu'}>>>set1.pop()'Python'>>>set1{3.13,10,'Taobao','Java','Baidu'}>>>set1.remove('Python')#元素不存在会发生错误Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>KeyError:'Python'>>>set1.discard('Python')#元素不存在也不会报错>>>set1.clear()>>>set1set()3.3数据类型
集合4.
集合的其他操作集合不支持“+”和“*”的操作,但是可以使用in操作符判断指定元素是否在集合中,还可以使用集合的issubset方法判断一个集合是否是另一个集合的子集。>>>set2{'Python',10,3.13}>>>12inset2False>>>set5={'Python',10,3.13,'Java'}>>>set2.issubset(set5)#set2是否为set5的子集True>>>set2.issubset(set2)#set2是否为set2的子集True3.3数据类型
数据类型的转换每种数据类型都有对应Python内置函数将其他相关的数据类型转化为该数据类型,比如int()、float()、str()、list()和set()分别可以把其他类型的对象强制转化为整型、浮点型、字符串、列表和集合。>>>int(1.3) #将浮点数1.3转化为整形,保留其整数部分1>>>float(2) #将整数2转化为浮点型,值并没有发生变化,但在内存中的存储方式发生了变化2.0>>>str(10) #将整数10转化为字符串类型'10'>>>list("Hello") #将字符串转化为列表['H','e','l','l','o']>>>dict1={'name':'zhangsan','age':20}>>>list(dict1) #将字典转化为列表['name','age']>>>set(['Python','Python',3.13,3.13,10]) #将列表转化为集合{10,'Python',3.13}3.3数据类型程序在一般情况下是按顺序执行的,就像流水账一样,一条一条从上往下按照顺序执行。有时候我们需要根据条件来有选择地执行某些语句,这就要使用到Python的条件判断语句——if。Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。可以通过右图来简单了解条件语句的执行过程:条件控制语句3.4Python程序结构条件控制语句
if语句if语句包含了一个if测试块,一个或多个可选的elif(“elseif”)测试块,以及最后可选的else块。测试块和else块都有相关的执行语句块,通过相同的缩进来显示该模块的作用范围。if语句的语法结构如下所示。if测试: #if测试
语句块 #if测试的语句块elif测试: #elif测试
语句块 #elif测试的语句块else:
语句块 #else的语句块3.4Python程序结构条件控制语句
if语句if语句示例1:>>>a=3>>>b=3.0>>>ifa==b:...print('a与b相等。')...a与b相等。3.4Python程序结构条件控制语句
if语句if语句示例2:>>>a=3>>>b=4>>>ifa>b:...c=a...else:...c=b...>>>print("a和b中较大的数为:",c)a和b中较大的数为:43.4Python程序结构条件控制语句
if语句if语句示例3:>>>score=61>>>ifscore>90:...print("优秀")...elifscore>80:...print("良好")...elifscore>70:...print("中等")...elifscore>60:...print("及格")...else:...print("不及格")...及格3.4Python程序结构条件控制语句
条件表达式在Python的真值判断中,除了True和False以外,数字0、空对象和None被认作是False,除此之外任何非0的数字或非空的对象都会被认作是True,比如数字2和字符’a’作为布尔值时相当于True。>>>if'Hello':...print('True')...else:...print('False')True3.4Python程序结构条件控制语句
if/else三元表达式相当于a=bifxelsecifx: a=belse: a=c3.4Python程序结构
while循环通过判断while关键字后面的测试结果来决定循环体是否被执行。若测试结果为True,就会执行while对应的语句块,执行完再次返回到while语句的开头部分,继续判断while关键字后面的测试结果,直到测试的结果为False才结束这条while语句,跳转至while下一条语句。while语句结构如下所示:循环结构
while循环while测试:
语句块
当测试的判断结果为真(True),语句就会被重复执行,若测试一开始就为False,执行语句一次都不执行。3.4Python程序结构循环结构
while循环while循环示例1:>>>while1<2:...print('1小于2')while循环示例2:>>>a=8;b=1>>>whilea>b:...print(a,end='')...a-=1...87654323.4Python程序结构
for循环可以遍历任何序列对象,包括列表、元组、集合、字典甚至字符串。for循环的一般代码格式如下:循环结构for循环for目标变量in字符串|列表|元组|字典|集合:
代码块else:
代码块
for关键字后面跟的目标变量可以是任何一个在for语句前面的代码中未使用过的变量名,该变量仅在for语句范围内有效。目标变量初始被设置为序列中的第一个元素,每执行完一次for循环中的代码块就自动被设置成序列中的下一个元素,因此如果没有遇到意外中断,for语句将依次访问序列中的每个元素。3.4Python程序结构循环结构
for循环for循环示例1:>>>forxin["apple","banana","cherry"]:...print(x,end='')...applebananacherryfor循环示例2:>>>list1=[1,2,3,4,5];sum=0>>>forxinlist1:...sum+=x...>>>print(sum)153.4Python程序结构循环结构
for循环for循环示例3:>>>list2=[]>>>forxin'Helloworld!':...list2.append(x)...>>>list2['H','e','l','l','o','','w','o','r','l','d','!']3.4Python程序结构用户自定义函数
函数的定义3.5用户自定义函数、对象、文件与模块用户自定义函数
函数的定义示例1:#定义一个没有参数和返回值的函数>>>defprintstar():...print('*'*10)...示例2:>>>defmultiplication(x,y):...returnx*y...3.5用户自定义函数、对象、文件与模块用户自定义函数
函数的定义示例3:>>>defprintinfo(name,age=35):...print("名字:",name)...print("年龄:",age)...printinfo函数的参数age定义了默认值35,意味着如果没有传入age的值,则使用默认值。3.5用户自定义函数、对象、文件与模块用户自定义函数
函数的调用在函数的定义之后,可以在程序中通过函数名加圆括号调用这个函数。圆括号中可以包含0个或多个参数,这些参数将会按顺序依次传递给函数定义时设置的参数名。示例1:>>>printstar();printstar()#调用两次printstar函数********************>>>multiplication(2.5,4)#调用multiplication函数10.0>>>printinfo('张三')名字:张三年龄:35>>>printinfo('张三',30)名字:张三年龄:303.5用户自定义函数、对象、文件与模块用户自定义函数
函数的调用调用函数时括号内的参数数量要和函数的定义匹配,没有默认值的参数必须传递相应的值,调用时的参数数量也不能超出定义的参数数量,否则都会报错。示例:>>>printstar('****') #调用函数printstar时传递的参数超出了定义的参数数量Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:printstar()takes0positionalargumentsbut1wasgiven>>>printinfo() #调用函数printinfo时传递的参数不足Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:printinfo()missing1requiredpositionalargument:'name'3.5用户自定义函数、对象、文件与模块类
类和实例类(class)是具备相同特征或者行为的一个群体,可以看作是一类事物的模版。实例(instance),是一个群里当中的成员/个体,根据模型造出来的具体的东西。类和实例的差异在于,类是一种产生实例的工厂,我们可以通过类产生实际的实例。类对象提供默认行为,所有从这个类产生的实例都具有这个类的特点。实例是程序处理的实际对象,是具体的元素。定义一个类和调用类的语法如下:#定义一个类class类名:
代码块#调用类,产生类的具体实例类实例1=类名() #创建类的第一个实例类实例2=类名() #创建类的第二个实例3.5用户自定义函数、对象、文件与模块类
属性与方法属性可以在class语句中通过赋值语句添加,而方法则是在class语句中通过嵌入def语句来定义(相当于在class语句中定义函数)。当def出现在类内部时,定义的函数通常称为方法。类方法自动接受的第一个参数(通常称为self)比较特殊,它是指将来调用这个方法的主体,也就是类的实例对象。#定义猫类,也就是猫的模版>>>classCat:...color='grey' #猫有颜色特征,并将初始值定义为灰色...weight=0 #猫的体重特征,并将初始值定义为0...defmiaow(self): #猫会叫...print('喵!')#产生两只具体的猫>>>cat1=Cat() #调用Cat类实例化cat1>>>cat2=Cat() #调用Cat类实例化cat23.5用户自定义函数、对象、文件与模块类
属性与方法当我们获得类的实例以后,这个实例便可以通过点运算符(.)使用类属性和类方法。实例使用类属性和方法的语法如下:#实例使用类属性和方法类实例.类属性 #调用类的属性,可以查看或重新赋值类实例.方法名() #调用类的方法(函数),将会执行方法名配套的代码块示例:>>>cat1.color='狸花'>>>cat1.weight=3.5>>>cat1.miaow()喵!>>>cat2.color='银渐层'>>>cat2.weight=4>>>cat2.miaow()喵!3.5用户自定义函数、对象、文件与模块类
属性与方法salary这个属性的赋值位于方法setsalary内部,在方法内对self的salary属性做赋值运算因而产生了实例e1的salary属性,这就意味着e1调用setsalary方法以前,salary这个属性是不存在的。e2没有调用setsalary方法,因此e2没有salary属性。同样,产生实例e2后,给e2赋予了position属性。e1并没有,因此e1没有position属性。在这三个属性中,name是Employee类所有实例共有的属性,而salary和position是分别属于e1和e2这两个实例的属性。>>>e1.position #查看e1的position属性值Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>AttributeError:'Employee'objecthasnoattribute'position'>>>e2.salary #查看e2的salary属性值Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>AttributeError:'Employee'objecthasnoattribute'salary'.Didyoumean:'setsalary'?3.5用户自定义函数、对象、文件与模块类
属性与方法如果类想确保它的实例拥有某些属性,可以在构造类时填好这个属性。类的更加正式的定义如下:class类名:
def__init__(self,参数1,参数2): #初始化方法
self.类属性1=参数1
self.类属性2=参数2
def方法1(self,参数): #定义类的普通方法
代码块1
def方法2(self,参数): #定义类的普通方法
代码块2
...其中,__init__叫做初始化方法,也称作是构造函数。初始化方法在定义类时是可选的。如果类中包含__init__方法,每次类实例创建时,Python会自动调用它。初始化方法可以用于在创建类时进行一些初始化操作。任何传给类名称的参数都要出现在__init__构造函数中第二和其后的参数。3.5用户自定义函数、对象、文件与模块类
属性与方法示例:>>>classEmployee():...def__init__(self,who,sal,pos): #定义构造函数...=who #增加name属性...self.salary=sal #增加salary属性...self.position=pos #增加position属性...defprintinfo(self): #定义printinfo方法,打印实例的属性值...print(,':',self.salary,self.position)...>>>e1=Employee('张三',4500,'director')>>>e1.printinfo()张三:4500director>>>e2=Employee()Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:Employee.__init__()missing3requiredpositionalarguments:'who','sal',and'pos''3.5用户自定义函数、对象、文件与模块类示例:>>>classPerson:...total=0 #定义一个类变量,用于统计类被创建了几次...def__init__(self,name):...=name #初始化实例变量name...Person.total=Person.total+1#每创建一次类实例就加1...defprint_name(self):...print()...>>>person1=Person('小明') #创建一个实例>>>print(Person.total) #通过类名可以直接访问类变量1>>>person2=Person('小红')>>>print(Person.total)2>>>print(person2.total) #也可以通过实例的名称访问类变量2>>>person1.print_name() #打印person1的name小明>>>person2.print_name() #打印person2的name小红3.5用户自定义函数、对象、文件与模块文件编程过程中,常常需要从文件中读取数据或者把计算结果存入文件。在读取或写入文件之前,需要使用Python内置的open函数打开文件。此函数将创建一个文件对象,之后程序通过该对象来操作文件。open是Python的内置函数。函数open的主要参数有两个。第一个参数是要访问的文件名称的字符串值,这个参数是必需的。第二个参数是文件的访问模式,默认值为'r',只读的意思。字符含义r只读w打开一个文件只用于写入,若文件已存在则打开文件,并从开头开始编辑,原有内容会被删除,若文件不存在则创建新文件x写模式,新建一个文件,如果该文件已存在则会报错a打开文件用于写入,如果文件存在则在末尾追加,如果该文件不存在,创建新文件进行写入t文本模式(默认)+打开一个文件进行更新(可读可写)open函数的常用访问模式及含义3.5用户自定义函数、对象、文件与模块文件示例:>>>f=open('D:/test.txt','w') #打开D盘下的文件test.txt,如果文件不存在则创建它>>>f.writelines('Helloworld!') #写入数据>>>f.close() #关闭文件>>>f=open('D:/test.txt','r') #以只读模式打开文件>>>data=f.readlines() #读取数据>>>print(data) #打印读取到的内容['Helloworld!']>>>f.close() #关闭文件3.5用户自定义函数、对象、文件与模块模块模块是在函数和类的基础上,将一系列相关代码组织到一起的集合。在Python中,一个模块就是一个扩展名为.py的源程序文件。其他文件可以通过导入一个模块读取这个模块的内容。基于模块的方式使模块变成了Python程序架构的一个核心概念。导入模块相当于导入可以额外使用的工具包。Python内置了许多预编译并可移植的功能模块,这些功能模块叫做标准库,比如math、random等。此外,Python还可通过用户自行开发的库或众多第三方功能强大的库进行扩展,比如用于科学计算的Numpy、SciPy和Pandas,用于深度学习的TensorFlow和Torch,用于web开发的Django和Flask等。合理使用这些库可以大大提高开发效率。3.5用户自定义函数、对象、文件与模块模块
模块导入导入模块的方法主要有三种:1.import库名>>>importmath>>>math.pi3.141592653589793>>>math.sqrt(10)3.1622776601683795>>>importmath,random3.5用户自定义函数、对象、文件与模块模块
模块导入2.import库名as别名>>>importrandomasrd>>>rd.random()0.78803888155949383.from库名import功能>>>fromosimportgetcwd>>>getcwd() #使用os的getcwd功能不需要加库名'C:\\ProgramFiles\\Python310'>>>fromrandomimportrandomasrr3.5用户自定义函数、对象、文件与模块模块
第三方库的安装第三方库的安装可以在终端(Windows中的命令行窗口)中通过pip工具安装。pip是python的包管理工具(如果系统中安装了Python3,那么也可以使用pip3)。以numpy为例,在终端中输入pipinstallnumpy,按下回车键会开始安装numpy这个库。3.5用户自定义函数、对象、文件与模块模块
第三方库的安装安装进度结束后可以导入numpy并使用:>>>importnumpyasnp>>>np.eye(4)#调用numpy的eye函数生成4*4的单位矩阵array([[1.,0.,0.,0.],[0.,1.,0.,0.],[0.,0.,1.,0.],[0.,0.,0.,1.]])3.5用户自定义函数、对象、文件与模块模块
__name__与模块的双重角色在Python的模块架构中,一个Python文件可以被执行,也可作为模块导入,并以独立式程序的形式运行。系统如何区分一个文件中的代码是要在执行还是在导入呢?每个模块都有个名为__name__的内置属性,Python会自动设置该属性。如果文件以顶层程序文件执行,在启动时,__name__就会设置为字符串“__main__”。如果文件被导入,__main__就会被改设成客户端所了解的模块名。这样一来,模块就可以通过检测自己的__name__,来确定它是在执行还是在导入。假设我们建立了一个模块文件,文件名为test.py(导入时这个自定义模块名称为文件名,也就是test),它包含了一个自定义的tester函数和一些执行代码:deftester(): #文件中定义的函数tester
print('这是一个测试。')if__name__=='__main__': #文件中的执行代码print('这是测试的测试。')3.5用户自定义函数、对象、文件与模块模块
混合用法模式这个文件如果直接被执行,它的内置属性__name__为“__main__”,因此会执行“if__name__=='__main__':”后面的代码块,输出为:这是测试的测试。而如果这个文件被其他文件导入,这个文件的__name__被改成我们设置的模块名“__test__”。因而在另一个文件中并不会执行“if__name__=='__main__':”后面的内容。当其中的函数tester在另一个文件中被调用,会执行tester中的打印语句。另一个文件中的代码如果为:importtest #导入自定义的test模块test.tester() #调用test模块中的tester则会输出:这是一个测试。3.5用户自定义函数、对象、文件与模块06
项目任务1、任务描述利用Python对数列的循环操作,实现中国南宋数学家杨辉在1261年所著的《详解九章算法》中出现的杨辉三角。任务1:用python实现杨辉三角任务描述编程输出图示的杨辉三角形。
技术分析通过观察可以发现,杨辉三角的规律为:每行行首和行尾的数为1,其它位置的数都是其左上方和右上方两个数之和。因此,我们可以利用上一行的内容来计算当前行的数值。这是一个递推的过程,可以使用循环结构来实现。任务实现步骤1定义函数deftriangles(m): #m为上一行的内容s=[]m.append(0)
#给上一行末尾添加元素0,使当前行的行首和行尾也满足下面for循环中的计算规律foriinrange(len(m)):s.append(m[i-1]+m[i])returns #s为计算出的当前行任务实现步骤2编写运行代码row=10n=[1]print(n)whilerow>1:row-=1n=triangles(n)print(n)步骤3运行程序编写完代码后点击运行按钮,可以看到输出了一个十行的杨辉三角。任务描述利用本项目学习的Python基本语法,打印输出由星号构成的简单数学图形,包括等腰三角形,等边三角形,菱形,正方形,图形示例如下图所示。编程输出右下图所示的选择菜单,在“请输入数字:”后输入对应的菜单选项(如1、2、3等),程序将输出对应的图形。
a)等腰直角三角形
b)空心的等腰三角形
c)空心等菱形d)实心正方形e)空心正方形打印图形菜单任务2:用Python打印不同的图形技术分析要画出一个由星号构成的简单数学图形(比如等腰三角形、正方形),需要观察图形,发现形状上的规律,然后用循环在每一行输出相应数量的星号来实现观察得到的图形规律。任务实现步骤1定义函数(1)输出等腰直角三角形函数#等腰直角三角形defequTrai(rows):print("等腰直角三角形")foriinrange(0,rows): str=""forkinrange(0,rows-i):str+="*"k+=1i+=1print(str)任务实现步骤1定义函数(2)输出空心等边三角形#打印实心等边三角形defdebTrai(rows):print("打印空心的等腰三角形")foriinrange(0,rows+1):str=""forjinrange(0,rows-i):str+=""j+=1forkinrange(0,2*i-1):ifk==0ork==2*i-2ori==rows:ifi==rows:ifk%2==0:str+="*"else:str+=""else:str+="*"else:str+=""k+=1print(str)i+=1任务实现步骤1定义函数(3)输出菱形deflinx(rows):print("打印空心等菱形")foriinrange(rows):#变量i控制行数str=""forjinrange(rows-i):str+=""j+=1forkinrange(2*i-1):ifk==0ork==2*i-2:str+="*"else:str+=""k+=1print(str)i+=1foriinrange(rows):str=""forjinrange(i):#(1,rows-i)str+=""j+=1forkinrange(2*(rows-i)-1):#(1,2*i)ifk==0ork==2*(rows-i)-2:str+="*"else:str+=""k+=1print(str)i+=1任务实现步骤1定义函数(4)输出实心正方形#实心正方形defsqrTri(rows):print("实心正方形")foriinrange(0,rows):str=""forkinrange(0,rows):str+="*"k+=1i+=1print(str)任务实现步骤1定义函数(5)输出空心正方形#空心正方形defkonTri(rows):print("空心正方形")foriinrange(0,rows):str=""forkinrange(0,rows):ifi!=0andi!=rows-1:ifk==0ork==rows-1:str+="*"else:str+=""#该处有三个空格else:str+="*"#*两侧加了空格k+=1i+=1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 膏药剂工岗前安全理论考核试卷含答案
- 地质测量员安全知识强化考核试卷含答案
- 养蜂员岗中操作能力考核试卷含答案
- 紫胶蒸发工安全风险考核试卷含答案
- 化工添加剂生产工安全演练模拟考核试卷含答案
- 金属玻璃家具制作工岗中工作能力考核试卷含答案
- 人力采伐工岗前全能考核试卷含答案
- 轨道作业车司机岗前道德考核试卷含答案
- 1人教版二年级上学期数学第一次月考预测卷以及答案
- 第3章第3节 第3课时(教案含练习)
- 疟原虫镜检课件
- 屋顶分布式光伏发电项目施工安全应急预案
- 化工行业的法律与法规
- 《保健艾灸师》专项测试题附答案
- 部编版小学六年级语文上册第三单元集体备课记录表
- 第3讲“运动图像”的分类研究
- 教科版四年级英语上册(广州版)全册课件【完整版】
- 国家审计报告
- 企业班组安全管理标准化通用规范
- GB/T 17421.2-2016机床检验通则第2部分:数控轴线的定位精度和重复定位精度的确定
- 部编人教版六年级道德与法治上册全册教学课件
评论
0/150
提交评论