版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第3章人工智能编程基础主讲人23.1人工智能编程环境3.2Anaconda环境的搭建3.3Python语法基础3.4Python模块与包3Chapter3人工智能编程基础Section1人工智能编程环境Python代码编辑环境主流工具:Anaconda、PyCharm、VSCode、SublimeText工具特点:Anaconda:科学计算和数据科学一站式平台PyCharm:专业PythonIDE,提供丰富的编码辅助和项目管理工具VSCode:轻量级、高度可定制,丰富的插件生态SublimeText:轻量、快速启动,强大的文本处理能力45Chapter3人工智能编程基础Section2Anaconda
环境的搭建
63.2.1Windows下Anaconda环境的搭建Windows
下Anaconda
环境的搭建7下载页面Anaconda安装窗口Windows
下Anaconda
环境的搭建8Anaconda权限窗口Anaconda安装路径Windows
下Anaconda
环境的搭建9安装进度安装完成103.2.2macOS下Anaconda环境的搭建下载Anaconda:访问Anaconda官方网站。选择macOS版本(文件扩展名为pkg)。单击“安装”按钮开始下载。macOS下Anaconda环境的搭建11遇到问题:安装时提示“无法打开,因为它不是从AppStore下载的”。解决方案:打开“系统设置”。选择“隐私与安全性”。将“允许从以下位置下载的应用”改为“AppStore和被认可的开发者”。重新尝试安装Anaconda,按照默认安装引导器指引完成安装。macOS下Anaconda环境的搭建12配置环境变量步骤:打开终端(Terminal)。输入命令:nano~/.bash_profile把conda的安装路径加到代码里面,安装时如果没有更改安装路径,则Anaconda安装在用户目录下。
更改完成,保存之后,激活环境变量命令:source~/.bash_profile测试环境是否安装成功的命令:
condalistmacOS下Anaconda环境的搭建13修改环境变量143.2.3Linux下Anaconda环境的搭建Linux下Anaconda环境的搭建15使用sh命令安装Anaconda
Linux下Anaconda环境的搭建16阅读License之后按回车键确认安装路径的安装过程
Python命令行
17Chapter3人工智能编程基础Section3Python语法基础
183.3.1Python语言的特点自由开放:源代码与社区理念高级语言:专注于问题解决跨平台性:一次编写,到处运行解释性:无需编译,直接运行面向对象:强大且易理解的编程范式可扩展性:胶水语言,融合多语言优势可嵌入性:为C/C++程序添加脚本功能丰富的库:庞大的标准库外,还有很多高质量的库。Python语言特点19203.3.2编程第一步
如何在Python中运行一个传统的“HelloPythonWorld”的程序呢?
编程第一步21223.3.3Python基本语法
Python语言通常一行一条语句。
顶格书写,前面不能有多余空格,因为Python是通过缩进来组织代码的。
当复合语句的第一行以冒号结尾时,其后面行的内容要缩进一个制表符(Tab键,表示4个空格)。
如果语句太长,可以使用反斜杠(\)来换行。
分号(;)可以用于一行书写多条语句,但不建议使用,因为不便于程序的阅读。
Python基本语法:语句书写规则23注释一种辅助性文字,用于对程序工作过程的说明,在程序运行时会被自动忽略。
单行注释:使用‘#’表示单行注释。
多行注释:可以使用三引号对(单、双引号都可以,但不能混用)。Python基本语法:注释24Python基本语法:注释25多行注释示例:defpowered(x,y):"""计算并返回a的b次幂,其中a和b都是正整数。三引号实现多行注释"""returnx**yPython基本语法:标识符26标识符是用来为常量、变量、函数、类、模块等对象命名的一种自定义名称。命名规则如下:
标识符可以由字母、数字、汉字和下画线组成,但不能用数字开头命名,如ab、ab123、ab_123等都是合法的Python标识符,2ab、$abc
则不是合法的Python标识符。
标识符区分英文字母大小写。Python区分英文字母大小写(又称为英文字母大小写敏感),所以Hello和hello是不同的标识符,可以标识两个不同的量。
不能使用Python的关键字做标识符。Python基本语法:关键字27关键字:具有特殊功能和含义的标识符。PythonShell查询
283.3.4基本数据类型
数字型(整型、浮点型、复数类型)
文本型(字符串)
布尔型
组合型(列表、元组、集合、字典)29整型定义:用于表示整数的数据类型。进制表示:十进制:默认表示方式,如123。二进制:以0b开头,如0b1010。八进制:以0o开头,如0o407。十六进制:以0x开头,如0x4e。基本数据类型:整型(int)30浮点型定义:用于表示带有小数部分的数字的数据类型。表示方法:小数表示:如24.0、3.14。科学记数法:如3e2(表示300)。注意:浮点数必须带有小数部分,即使小数部分为0。基本数据类型:浮点型(float)31复数类型定义:用于表示复数的数据类型,由实数部分和虚数部分构成。表示方法:如4.2+3.6j,其中4.2是实数部分,3.6j是虚数部分。基本数据类型:复数类型(complex)32基本数据类型:字符串(string)
33字符串定义:一串字符的序列,可以包含英文字符、汉字等。
表示方法:单引号:如'我是单引号指定的字符串'。双引号:如"What'syourname?"或"双引号指定的字符串"。三引号:多用于多行字符串,大小写敏感:英文字符串区分大小写,如abc和Abc是两个不同的字符串。不可变性:字符串一旦创建,就不能再改变它,若要改变,就得重建。
布尔型定义:用于表示逻辑真假的类型,只有两个值:True和False。
首字母大写:注意True和False的首字母必须大写。
布尔表达式:以True和False为值的表达式称为布尔表达式,用于表示某种条件是否成立。
应用场景:在条件判断、选择和循环控制中必不可少。基本数据类型:布尔类型(bool)
34353.3.5变量在Python中,变量是指可以改变的量。变量的名称只要见名知意即可,不需要提前说明它是什么数据类型,赋予它什么数据,它就是什么数据类型,因此Python又被称为动态语言。给变量赋值的符号为“=”,称为赋值运算符,每个变量在使用前都必须先赋值,其基本形式如下:变量=表达式36变量
由于变量的值是可以变化的,因此变量的类型也就随着赋予不同的值而改变。在给变量赋值时,系统会自动为该变量分配内存空间,我们不需要关心它放在哪里。
id()函数:来显示内存地址。
type()函数:用于获取任何对象的数据类型。当将一个对象作为参数传递给type()函数时,它会返回该对象的类型。37变量编写、保存和运行Python程序的标准步骤如下:(1)打开IDE环境(Pycharm或VScode或SublimeText或Spyder)。(2)根据给定的文件名创建新文件。(3)输入下面案例中给出的代码。(4)按Ctrl+S组合键保存(或在菜单中选择保存文件命令),菜单中选择“运行”命令来运行当前文件。也可以通过命令行,输入“python文件名.py”来运行程序。38变量39【例3-1】使用变量与字面常量。#文件名:my_var.pynum=5print(num)num=num+1print(num)s='''Thisisamulti-linestring.Thisisthesecondline.'''print(s)56Thisisamulti-linestring.Thisisthesecondline.输出结果如下所示:变量403.3.6运算符与表达式
大多数Python语句都包含表达式(Expression)。一个表达式的简单例子如5+6。表达式可以拆分成运算符(Operators)与操作数(Operands)。运算符是进行某种操作的符号,如加(+)、减(-)、乘(*)、除(/)等,其操作的对象是数据,这些数据就被称为操作数。在上面的例子中5和6就是加法操作符(+)的操作数。41
Python中的算术运算符用于执行基本的数学运算,如加法、减法、乘法、除法等。运算符与表达式:算术运算符42算术运算符及其用法运算符与表达式:赋值运算符43赋值运算符用于给变量赋值或更新变量的值。需要特别说明的是,除第一个“=”赋值运算符外,其他将运算符和赋值运算符结合起来的赋值语句称为复合赋值语句,复合赋值语句可以简化代码,提高书写代码的效率。必赋值运算符和复合赋值运算符运算符与表达式:逻辑运算符44逻辑运算符用于组合条件语句,以便在满足一个或多个条件时执行代码块。逻辑运算真值表运算符与表达式:运算符优先级45Python运算符的优先级决定了表达式中各个部分的执行顺序。当表达式包含多个运算符时,Python会按照预定的优先级从高到低的顺序进行计算。如果运算符具有相同的优先级,那么按照从左到右的顺序进行计算。运算符优先级463.3.7控制流if语句是Python中用于进行条件判断的一种流程控制结构。它用以检查条件:若条件为真(True),则执行一个语句块(称之为if块);若条件为假,则运行另一个语句块(称为else块)。控制流:条件语句if47if
语句执行流程控制流:条件语句if48if判断条件:
语句块一else:
语句块二当判断条件为True,执行语句块一;反之,执行语句块二这里语句块一和语句块二均有一级缩进,表示隶属于前一条以冒号结尾的语句。同一层次的语句必须要有相同的缩进。控制流:条件语句if49【例3-3】判断用户输入的整数是偶数还是奇数。x=int(input("请输入一个整数给x:"))ifx%2==0:print("x为偶数。")else:print("x为奇数。")输出结果如下:请输入一个整数给x:15x为奇数控制流:条件语句if50if判断条件一:
语句块一elif判断条件二:
语句块二elif判断条件三:
语句块三...else:语句块四注意:Python中所有出现冒号的地方,表示接下来会有语句块,因此就会缩进。所有的缩进应符合“缩进一致”的原则。控制流:条件语句if51【例3-4】判断数字为正数、负数还是零。x=int(input("请输入一个整数:"))ifx>0:print("您输入的是正数。")elifx<0:print("您输入的是负数。")else:print("您输入的是零。")请输入一个整数:0您输入的是零。输出结果如下:控制流:循环语句while52while循环是在条件为真的前提下重复执行某语句块,直到条件为假才结束执行。while循环语句是循环语句的一种,其同样可以拥有else子句作为可选项。while循环的基本语法如下:while循环条件:
语句块else:
语句块循环语句执行流程控制流:循环语句while53【例3-6】使用while循环语句计算从2到10(包括2和10)之间所有偶数的和。sum=0i=2whilei<=10:sum=sum+ii=i+2print("2到10偶数的和为:",sum)2到10偶数的和为:30输出结果如下:控制流:循环语句for54for…in语句,其特点是会在一系列对象上进行迭代(Iterates),意思是它会遍历序列中的每一项(在后面的序列Sequences章节中了解其更多内容)。你可以理解所谓的序列就是一系列元素的有序集合,for循环会依次访问序列中的每个元素,并对每个元素执行相应的操作。其语法格式如下:for变量in可迭代对象:
语句块else:
语句块for循环的else部分是可选的。当它存在时,总会在for循环结束后开始执行,除非程序遇到了break语句。控制流:循环语句for55【例3-8】打印整数1~4。foriinrange(1,5):print(i)else:print('Theforloopisover')123输出结果如下:控制流:循环语句for56range()函数的语法格式如下:range([start,]Stop[,step])range()函数的三个参数分别为:start(起始值,默认为0)、stop(结束值但不生成该值、step(步长,默认为1)。step为可选参数,不给此参数时,默认为1。
控制流:循环语句(for)57【例3-9】使用for语句实现1到10的累加。sum=0foriinrange(1,11):sum=sum+iprint("1到10的累加和为:",sum)输出结果如下。1到10的累加和为:55控制流:break和continue58
break
语句:用以立即中断并终止循环语句的执行,并且跳出到循环体外,即使循环条件仍然成立。有一点尤其需要注意,如果中断了一个for或while循环,任何相应循环中的else块都将不会被执行。
continue
语句:跳过当前循环块中的剩余语句,并继续该循环的下一次迭代。控制流:break和continue59i=0whilei<10:i=i+1ifi==6:#检查i是否等于6,若是则跳过本轮循环体的后面代码continueprint("i=",i)print("Done")i=1i=2i=3i=4i=5i=7i=8i=9i=10Done输出结果如下:【例3-11】用continue语句控制循环的实例。603.3.8数据结构61
数据结构(DataStructure)是一种将数据组织、存储并聚合起来的结构,即用来存储一系列相关数据的集合。
组合数据类型是由基本数据类型或其他组合数据类型组合而成的复杂数据结构。可以应用于表示一组数据的场合。其中序列对象包括字符串、元组和列表。除序列外的组合数据类型有无序集合和字典类型。数据结构:列表62列表定义:列表是一种用于保存一系列有序项目的集合,由一系列按特定顺序排列的元素组成。你可以创建包含任意元素的列表,例如字母表中的字母、数字0~9、家庭成员姓名,或者任何其他数据。列表特性:一旦创建了一个列表,就可以添加、移除或搜索列表中的元素,因此列表是一种内容可变(Mutable)的数据。创建列表:使用方括号[],并用逗号分隔元素。创建列表:使用方括号
[],并用逗号分隔元素。数据结构:列表63
方法描述添加元素L.append(x)将元素x添加到列表的末尾L.extend(iterable)将可迭代对象(如另一个列表)中的所有元素添加到列表的末尾。L.insert(i,x)在列表的指定位置i插入元素x删除元素L.remove(x)删除列表中第一个值为x的元素L.pop([i])删除索引号为i的元素,默认最后一个L.clear()删除列表中的所有元素,使其变为空列表计数和查找L.count(x)统计x元素在列表中出现的次数L.index(x,start,[stop]])找出列表中x元素第一次出现的索引位置。如果指定了start和stop参数,则只在指定的切片内搜索排序和反转L.sort()对列表中的元素按升序排序L.reverse()将列表中的元素就地反转复制列表L.copy()返回L复制的新列表列表对象常用方法数据结构:列表64【例3-12】列表示例。#这是我的购物列表shoplist=['apple','mango','carrot','banana']print('我有',len(shoplist),'种水果要购买。')print('这几种水果是:',end='')foriteminshoplist:print(item,end='')print('\n我还要买大米。')shoplist.append('rice')print('我的购物清单现在变成了这样:',shoplist)print('把购物清单排序。')shoplist.sort()print('升序排序后的清单:',shoplist)print('第一项要买的物品是:',shoplist[0])olditem=shoplist[0]delshoplist[0]print('我买好了:',olditem)print('我的购物清单现在变成了:',shoplist)我有4种水果要购买。这几种水果是:applemangocarrotbanana我还要买大米。我的购物清单现在变成了这样:['apple','mango','carrot','banana','rice']把购物清单排序。升序排序后的清单:['apple','banana','carrot','mango','rice']第一项要买的物品是:apple我买好了:apple我的购物清单现在变成了:['banana','carrot','mango','rice']输出结果如下:数据结构:元组65
元组定义:元组是一种特殊的列表,用于保存一系列有序项目的集合。
元组特性:不可变性:定义后不能修改其元素。有序性:元素按特定顺序排列。多样性:元素可以是任何数据类型,且元素之间可以没有关系。
创建元组:使用圆括号(),并用逗号分隔元素。数据结构:元组66注意:当给元组dimensions的第一个元素赋值为200时,程序报错。这是因为元组是不可变的,不能通过这种访问单个元素赋值的方式来改变元组。如要改变元组,必须整体改变,重新完整赋值。>>>dimensions=(100,50)#将(100,50)一个二元组赋值给dimensions>>>dimensions[0]#访问dimensions这个二元组的第一个元素100>>>dimensions[1]#访问第二个元素50>>>dimensions[0]=200#更改dimensions元组的第一个元素为200Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:'tuple'objectdoesnotsupportitemassignment数据结构:元组67方法描述t.count(x)统计x元素在元组中出现的次数。t.index(x,[start,[stop]])查找元组中x元素首次出现的位置。如果指定了start和stop参数,则只在指定的切片内搜索。元组的常用方法数据结构:元组68【例3-13】元组示例。#圆括号用来指明元组的开始与结束#Python提倡:明了胜过晦涩,显式优于隐式。zoo=('python','elephant','penguin')print('动物园里的动物种类有:',len(zoo))new_zoo='monkey','camel',zooprint('新动物园里的笼子个数:',len(new_zoo))print('新动物园里的所有动物:',new_zoo)print('来自旧动物园的动物:',new_zoo[2])print('旧动物园里的最后一个动物是:',new_zoo[2][2])print('新动物园里的动物个数:',len(new_zoo)-1+len(new_zoo[2]))动物园里的动物种类有:3新动物园里的笼子个数:3新动物园里的所有动物:('monkey','camel',('python','elephant','penguin'))来自旧动物园的动物:('python','elephant','penguin')旧动物园的最后一个动物是:penguin新动物园的动物个数:5输出结果如下:数据结构:字典69
字典定义:字典是一种通过键来查找值的数据组织形式,类似于地址信息簿。
字典特性:键值对:每个元素由键和值组成。唯一性:键必须是唯一的,以确保能准确找到对应的值。无序性:字典不关心元素的顺序。
创建字典:每个元素均由键值对组成,键和值之间用冒号分隔,元素之间以逗号分隔。d={key1:value1,key2:value2,key3:value3...}数据结构:字典70方法描述d.clear()清除字典中所有的键值对d.copy()创建一个具有相同键值对的新字典d.get(key[,default])返回指定键的值,如果键不存在于字典中,返回None,如果提供默认值,则返回默认值d.keys()返回一个可迭代对象,其中包含了字典中所有的键d.values()返回一个可迭代对象,其中包含了字典中所有的值d.items()返回一个可迭代对象,其中包含了字典中所有的键值对。每个键值对都以元组的形式存在d.pop(key)删除指定的键值对,返回指定键对应的值d.update([other])使用另一个字典的键值对来更新当前字典。如果键已经存在,则对应的值会被替换;如果键不存在,则会在当前字典中添加该键值对字典常用方法数据结构:字典71【例3-14】字典示例。#花括号用来指明字典的开始与结束#"ab"是地址(Address)簿(Book)的缩写ab={'Charles':'charles@','Larry':'larry@','Watson':'watz@','Holmes':'holmes@'}print("Charles's邮件地址为:",ab['Charles'])#删除一个键值对delab['Larry']print('\n现在邮件地址簿里有{}个联系方式\n'.format(len(ab)))forname,addressinab.items():print('联系{}AT{}'.format(name,address))#添加一个键值对ab['Guido']='guido@'if'Guido'inab:print("\nGuido's邮件地址为:",ab['Guido'])Charles's邮件地址为:charles@现在邮件地址簿里有3个联系方式联系CharlesATcharles@联系WatsonATwatz@联系HolmesATholmes@Guido's邮件地址为:guido@输出结果如下:数据结构:序列72
序列定义:序列是Python中一种有序的数据集合,包括列表、元组和字符串。
序列特性:有序性:元素按特定顺序排列。可索引:通过索引访问元素。可切片:通过切片获取序列的一部分。
成员测试:使用in和notin表达式检查元素是否在序列中。数据结构:集合73
集合定义:集合是没有顺序的简单对象的聚集,与数学上的集合含义一致。
集合特性:无序性:集合不关心元素的顺序。唯一性:集合中的元素不允许重复。可变性:集合是可变的,可以添加或删除元素。
创建集合:
使用花括号{}。
使用set()函数。数据结构:集合74>>>myset={1,2,3,4,5}#使用花括号产生一个集合>>>secondset=set(['brazil','russia','india'])#使用set()函数>>>'india'insecondsetTrue>>>'usa'insecondsetFalse>>>oneset=secondset.copy()>>>oneset.add('china')>>>oneset.issuperset(secondset)#判断oneset是secondset超集True>>>secondset.remove('russia')#删除secondset中的元素>>>oneset&secondset#或者ersection(oneset){'brazil','india'}数据结构:字符串75
字符串定义:字符串是Python中用于表示和存储文本信息的数据类型。
字符串特性:不可变性:一旦创建,不能更改里面的字符。有序性:字符串是字符的有序序列。多样性:可以包含字母、数字、符号等任意字符。数据结构:字符串的创建76在Python中使用一对单引号(')、一对双引号(")或一对三引号(''')来创建字符串。单引号和双引号标识字符串的用法完全相同,三引号适合多行字符串。另外,如果字符串本身包含表示字符串边界的引号,可以使用不同类型的引号来避免冲突,或者在其前面添加转义字符(\)。数据结构:字符串的创建77>>>s1='HelloPython!'#使用单引号创建字符串>>>s1'HelloPython!'>>>s2="Helloworld!"#使用双引号创建字符串>>>s2'Helloworld!'>>>s3='Shesaid,"Yes"'>>>s3'Shesaid,"Yes"'>>>s4='It\'sfine!'#使用转义字符创建字符串>>>s4"It'sfine!"数据结构:字符串基本操作78操
作描
述s1+s2连接字符串
s1和
s2s*n返回重复
n
次
s
后的字符串s[n]获取字符串
s
中索引号为
n
的字符s[m:n]截取字符串
s
中索引号从
m
到
n−1
的子串s1
in
s判断
s
中是否存在
s1
元素字符串的基本操作数据结构:字符串基本操作79连接和重复使用“+”连接两个字符串,使用“*”重复字符串指定次数。示例如下:>>>s1='Hello'>>>s2='world'>>>s1+s2#连接字符串s1和s2'Helloworld'>>>s='Hello'>>>s*3#字符串s重复3次'HelloHelloHello'数据结构:字符串基本操作80②子串是否在字符串中存在Python中的in运算符(成员运算符)用于判断一个子字符串是否存在于指定字符串中。如果存在则返回True,否则返回False。示例如下:>>>s='python'>>>'on'insTrue数据结构:字符串基本操作81③索引字符串的索引是一种访问字符串中单个字符的方式。字符串是一个序列对象,每个字符都有相应的索引号。Python支持正索引和负索引两种方式,与列表、元组的索引方式一致。正索引:从0开始,即第一个字符的索引是0,第二个字符的索引是1,以此类推。到字符串的最后一个字符。负索引:是从字符串的末尾开始反向计数,−1表示最后一个字符,−2表示倒数第二个字符,以此类推,直到第一个字符。数据结构:字符串基本操作82④切片字符串切片是指截取字符串的子字符串,其形式如下。s[start:end:step]获取的是索引号从start到end−1、步长为step的子字符串。这里的start、end、step三个参数都是可选的。若无start,则表示从索引号0开始切片,若无end参数,则表示切片到最后一个字符,若无step,则第二个冒号也可以省略,表示步长为1。数据结构:字符串基本操作83切片操作示例:>>>s='Makeprogress!'>>>s[2:4]'ke'>>>s[:5]'Make'>>>s[5:]'progress!'>>>s[-2:]'s!'>>>s[-7:-4]'ogr'>>>s[::]'Makeprogress!'>>>s[::-1]'!ssergorpekaM'数据结构:字符串常用方法84字符串方法是指Python中字符串对象处理字符串的一系列函数,也称为方法。字符串常用方法数据结构:字符串常用方法85字符串方法示例>>>s="helloworld">>>s1=s.strip()#去除字符串左右两端的空白字符>>>s1'helloworld'>>>s#s对象本身不变'helloworld'>>>s1.capitalize()#将字符串的首字母转换为大写字符'Helloworld'>>>s1.upper()#将字符串中的所有字符都转换成大写字符'HELLOWORLD'>>>s1.lower()#将字符串中的所有字符都转换成小写字符'helloworld'>>>s1.count("o")#统计"o"出现的次数2>>>s1.find("w")#查找"w"在字符串中首次出现的位置6>>>s1.replace("hello","hi")#将字符串"hello"替换成"hi"字符串'hiworld'>>>s1.split()#将字符串分隔成列表['hello','world']863.3.9输入与输出输入与输出:输入87(1)input()函数在程序运行时,经常需要用户给程序提供用于计算或判断的参数,Python提供了内置input()函数来获取用户的输入。此函数会暂停程序的执行,并等待用户通过键盘来输入参数。示例如下:
需要注意的是,通过input()函数从键盘捕获的任意内容,都是字符串。>>>x=input("你的姓名:")你的姓名:张三>>>print("你好",x)你好张三输入与输出:输入88(2)int()、float()函数input()函数返回的是字符串,若用户从键盘上输入的是整数或浮点数,则返回的就是数字字符串,这显然并非所愿,所以需要使用内置函数int()和float()将对应的数字字符串转换成相应的类型。输入与输出:输入89>>>x=input("请输入一个整数:")#实际赋值给x的是一个数字字符串请输入一个整数:45>>>type(x)#查看x的类型<class'str'>>>>x#直接查看x的内容,是一个带引号的'45''45'>>>x=int(input("请输入一个整数:"))#转换成int类型请输入一个整数:45>>>type(x)<class'int'>>>>x#显示x的值,没有引号了45>>>y=float(input("请输入一个浮点数:"))#转换成float类型请输入一个浮点数:4.5>>>y#查看y的值,确实已经是4.5Int()、float()函数示例如下:输入与输出:输出90Python使用print()函数进行输出操作。示例如下:上例中第二条打印语句,使用了字符串的格式输出。可以看到输出语句里是要输出一个字符串,但字符串里有两个变量x和y的内容,但又不能把x和y放入字符串里,否则会让变量x和y变成字符常量。因此字符串格式输出采用一对花括号作为占位符,按序对应字符串后的format()方法里x和y两个变量的值,与其他字符组合一起输出。>>>print("HelloPython!")#执行输出操作HelloPython!>>>print("前面输入的整数{},以及输入的浮点数{}".format(x,y))前面输入的整数45,以及输入的浮点数4.5>>>913.3.10函数函数:定义92用户根据需要创建函数,可以通过关键字def来定义,紧跟def需要给出这个函数的标识符名称,再跟一对圆括号,括号中可以根据需要包含一些变量的名称(被称为形式参数,简称形参,多个形参之间以逗号分隔),再以冒号结尾,结束这一行;随后而来缩进的语句块是函数的主体部分,称为函数体。这样的函数称为自定义函数。其语法格式如下:def函数名(形参列表):函数体函数体紧随函数定义之后,并且必须正确缩进,以表示其属于该函数的一部分。函数:调用93在Python中函数需要先定义,然后才能调用。程序调用一个函数需要执行以下4个步骤:(1)调用程序在调用处暂停执行。(2)在调用时将实参复制给函数的形参。(3)执行函数体语句块。(4)函数调用结束,程序回到调用前的暂停处继续执行。需要说明的是,在函数体中出现的变量为局部变量,即它的作用域仅在函数体内,离开作用域后,该变量就被释放而消亡了。如在函数体内,变量的前面加上global关键字,则表示该变量为全局变量,即离开函数体后,该变量依然存在。函数:调用94【例3-18】编写一个简单的无参数函数。defsay_hello():#该块属于这一函数print('helloworld')#函数结束say_hello()#调用函数(这条语句无缩进,表示不是函数体)say_hello()#再次调用函数helloworldhelloworld输出结果如下:函数:调用95defpowered(x,y):"""计算并返回a的b次幂,其中a和b都是正整数。"""returnx**ydefmain():"""从用户获取两个正整数a和b,计算a的b次幂,并"""a=int(input("请输入正整数a:"))b=int(input("请输入正整数b:"))print("结果是:",powered(a,b))main()【例3-19】实现求a的b次幂。函数:参数传递96函数的参数传递:顺序传参关键字传参和默认值方式:示例如下>>>defpowered(x=5,y=6):...returnx**y#注意缩进4个空格...>>>powered()#调用求幂函数,默认值传参方式,x默认为5,y默认为615625>>>powered(7)#传给x值为7,y默认为6117649>>>powered(2,3)#不使用默认值8>>>powered(y=3,x=2)#关键字传参,不论顺序和默认值8>>>973.3.11类和对象类和对象98将数据与处理这些数据的功能函数进行组合,并将其包装在被称为“对象”的概念内,被称为面向对象编程(Object-OrientedProgramming,OOP)。面向对象编程有两个基本概念:类(Class)和对象(Object)。类和对象99类(Class)类的定义:能够创建一种新的类型(Type)类的本质:同类事物的共有属性的抽象类的示例:整数变量是int类的实例对象(Object)对象的定义:类的实例(Instance)对象的本质:类的具体化事物对象与类的关系:对象是类的具体表现类和对象100对象可以使用属于它的普通变量来存储数据。这种从属于对象或类的变量称为字段(Field)。对象还可以使用属于类的函数来实现某些功能,这种函数称为类的方法(Method)。字段与方法这两个术语很重要,它们有助于区分函数与变量,哪些是独立的,哪些又是属于类或对象的。总之,字段与方法通称类的属性(Attribute)。类和对象:self关键字101类方法与普通函数有种特定的区别:类方法必须有额外的参数self,且在参数列表的开头,但是在调用这个方法时不用为它赋值,Python自动会为它提供。这种特定方法其实是预先设定self来代表未来所申明的对象本身。类和对象:类102输出中at后面的地址是p这个Person对象实例在当前机器上的内存地址(因机器不同而不同)。这里的Person类是最简单的类,没有自己的数据,也没有处理数据的函数。classPerson:pass#一个空的语句块p=Person()#产生一个Person对象,即一个实例,赋值给pprint(p)【例3-20】类示例。<__main__.Personobjectat0x0000024A7AA91550>输出结果如下:类和对象:方法103classPerson:defsay_hi(self):print('Hello,howareyou?')p=Person()p.say_hi()【例3-21】带有方法的类示例一。Hello,howareyou?输出结果如下:类和对象:方法104【例3-22】类示例二。classPerson:def__init__(self,name):#初始化函数调用时,只需提供一个参数=namedefsay_hi(self):#调用时不需要提供参数print('Hello,mynameis',)p=Person('张山')p.say_hi()Hello,mynameis张山输出结果如下:类和对象:继承105继承定义:当一个类继承另一个类时,它将自动获得另一个类的所有属性和方法。父类(基类):原有的类,提供属性和方法。子类(派生类):新类,继承父类的属性和方法,并可以定义自己的属性和方法。类和对象:导入类106如果不断地给类添加功能,即使使用了继承文件也可能变得很长,为遵循Python
的理念,应尽量让文件整洁简单,为了达到此目的,Python允许将类存放在模块中,然后在主程序中导入所需要的模块。1073.3.12文件操作108文件是输入/输出非常频繁操作的对象,处理文件也是程序编写中非常重要的工作之一。Python中可以通过file类的对象,适当使用它的read()、readline()和write()方法来打开并读取、写入文件。读取或写入文件的能力取决于指定以何种方式打开文件。如果完成了文件的读取或写入,则可以调用close()方法来关闭文件。文件操作:打开文件109使用open()函数打开文件,它返回一个文件对象,并可以使用这个对象进行读/写操作。file=open('python.txt','r')open()函数有两个参数,第一个参数是要打开的文件名称,可以带路径,若没有路径,表示该文件和代码文件在同一个文件夹下,第二个参数表示文件打开的模式。文件操作:打开文件110模式描述r只读模式(默认)w写入模式,会先清空文件再写入。x独占创建模式,如果文件已存在会报错。a追加模式,写入内容会追加到文件末尾b二进制模式t文本模式(默认)+更新模式,可读可写常用文件模式文件操作:读取文件111读取文件内容可以使用文件对象的read()方法。示例如下:注意:这种利用open()打开文件的方式,Python不会自动关闭文件,需要在使用完成后,手动关闭文件。#以读取模式打开python.txt文件,并返回一个文件对象file=open('python.txt','r')content=file.read()#读取file文件对象的全部内容print(content)file.close()#关闭打开的file文件对象文件操作:读取文件112自动关闭文件,with语句打开文件示例如下:withopen('python.txt')asfile_object:#默认是r模式content=file_object.read()#读取文件对象的全部内容print(content)#不用关闭打开的文件对象,Python自动处理文件操作:写入文件113写入文件必须先以w模式打开文件,再使用文件对象的write()方法向文件中写入内容。示例如下:file=open('example.txt','w')file.write('Hello,world!')file.close()文件操作:写入文件114也可以使用with语句,与读取文件类似,由Python自动关闭使用完后的文件对象,避免内存泄漏。withopen('example.txt','w')asfile_object:file_object.write('Helloworld!')文件操作:写入文件115读取和写入文件的完整示例:输出结果如下:
#需要自己关闭文件对象的示例,这里因要写入汉字,故增加了一个编码参数f=open("文件.txt","w",encoding="UTF-8")f.write("学Python,不后悔!")f.close()#读取刚刚写入的文件f=open("文件.txt","r",encoding="UTF-8")a=f.read(12)print("a=",a)f.close()a=学Python,不后悔!116Chapter3人工智能编程基础Section4Python模块与包1173.4.1模块模块118模块定义:在Python中,模块是一个包含Python代码的文件,通常以.py为扩展名。模块作用:提供代码重用的基本单位。封装实现特定功能的代码,便于在其他程序中导入和使用。模块119(1)导入整个模块标准库函数在使用前要先导入其所在模块库,使用import
语句导入标准库,格式如下。import模块名这种方式会将模块的全部功能导入到当前程序,然后通过模块名作为前缀并带上小数点来调用该模块中的函数、类或变量。模块120(2)导入函数使用import语句导入模块中的一个或多个函数。如果是导入多个函数需用逗号分隔。from模块名import函数1,函数2,函数3如嫌麻烦,也可以使用*把模块中的所有函数全部导入。from模块名import*这种方式和前一种直接使用import
导入方式差别在于,前一种方式需要将模块名作为前缀,而通过from关键字导入,则不需要前缀。模块121(3)别名在Python中,如果导入的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年语言发音教案中班
- 2025-2026学年科学领域教案小葱
- 血管教学设计(2025-2026学年冀少版生物七年级下册)
- 2025-2026学年小班教案感冒了
- 2 自主学习 认识区域教学设计初中地理七年级上册沪教版
- 2025-2026学年激光雨舞蹈完整教学设计
- 2026年生物第24章测试题及答案
- 2026年电流 电压和电阻测试题及答案
- 2026年初中物理浮力大小测试题及答案
- 2026年国际智商测试题含答案
- 放射护理继续教育
- 地下商场火灾应急处置预案
- 瞳孔检查课件
- 疫苗冷链管理培训课件
- 游泳救生培训课件
- DB11∕T 2447-2025 村庄雨水排除与内涝防治技术规范
- 2026年浙江经贸职业技术学院单招职业适应性考试题库及参考答案详解1套
- 2026年初级银行从业资格之初级银行业法律法规与综合能力考试题库500道附答案(夺分金卷)
- 某市生态环保局大气监测站点运维方案
- 家纺用品采购合同范本
- 电力电缆故障检测技术
评论
0/150
提交评论