Python程序设计实例教程 第2版627_第1页
Python程序设计实例教程 第2版627_第2页
Python程序设计实例教程 第2版627_第3页
Python程序设计实例教程 第2版627_第4页
Python程序设计实例教程 第2版627_第5页
已阅读5页,还剩622页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

项目1搭建和使用Python开发环境11.1了解Python语言特点、应用场景和版本Python是一门跨平台、开源、免费的解释型高级动态编程语言。Python支持命令式编程(Howtodo)、函数式编程(Whattodo),完全支持面向对象程序设计,拥有大量扩展库。可以直接解释并执行源代码,可以伪编译为字节码执行,也可以使用pyinstaller、cx_Freeze、Nuitka等工具打包为可执行程序。胶水语言:可以把多种不同语言编写的程序融合到一起实现无缝拼接,更好地发挥不同语言和工具的优势,满足不同应用领域的需求。21.1了解Python语言特点、应用场景和版本对于Python3.x系列,每次升级新版本都会增加一些新特性或者新的标准库函数,增强一些内置函数、标准库函数的功能,同时也会优化一些内置对象的底层实现以获得更高的性能和速度,但不会有太大的变化,至少会保证低版本Python语言编写的程序可以正常被高版本Python解释器识别和运行。31.1了解Python语言特点、应用场景和版本与内置对象、内置模块和标准库不同的是,很多扩展库在版本升级时可能会有非常大的改动,除了新增和优化功能之外,还可能删除了一些低版本中的对象,或者修改了一些对象的用法,导致本来运行很好的程序在升级扩展库之后无法运行了。如果遇到这种情况,需要查阅扩展库官方网站的版本升级历史和说明,查阅对象新用法或者建议替代的新对象,然后对程序进行必要的修改。41.1了解Python语言特点、应用场景和版本在同一台计算机上可以安装多个版本的Python开发环境,安装到不同位置并配置好系统环境变量Path或者在PyCharm类似的开发环境中配置解释器程序即可,然后可以根据需要启动和使用相应版本的解释器。51.1了解Python语言特点、应用场景和版本问题解决:把列表中的所有数字都加5,得到新列表。(命令式编程)>>>x=list(range(10))>>>x[0,1,2,3,4,5,6,7,8,9]>>>y=[]>>>fornuminx:y.append(num+5)

>>>y[5,6,7,8,9,10,11,12,13,14]>>>[num+5fornuminx][5,6,7,8,9,10,11,12,13,14]6循环,遍历x中的每个元素列表方法,在尾部追加元素列表推导式创建列表空列表1.1了解Python语言特点、应用场景和版本问题解决:把列表中的所有数字都加5,得到新列表。(函数式编程)>>>x=list(range(10))>>>x[0,1,2,3,4,5,6,7,8,9]>>>defadd5(num):returnnum+5>>>list(map(add5,x))[5,6,7,8,9,10,11,12,13,14]>>>list(map(lambdanum:num+5,x))[5,6,7,8,9,10,11,12,13,14]7定义函数,接收一个数字,加5后返回把函数add5映射到x中的每个元素lambda表达式,等价于函数add51.2安装与配置Python开发环境8默认编程环境:IDLE:/downloads/windows/其他常用开发环境:Eclipse+PyDevPyCharmwingIDEEricPythonWinAnaconda3(内含Jupyter和Spyder):/downloadzwPython1.2.1安装与使用IDLE91.2.1安装与使用IDLE1.2.2安装与使用Anaconda3111.2.2安装与使用Anaconda3121.3了解Python编程规范(1)缩进类定义、函数定义、选择结构、循环结构、异常处理结构、with块,行尾的冒号表示缩进的开始。python程序是依靠代码块的缩进来体现代码之间的逻辑关系的,缩进结束就表示一个代码块结束了。

同一个级别的代码块的缩进量必须相同。一般而言,以4个空格为基本缩进单位。131.3了解Python编程规范(2)每个import语句只导入一个模块,最好按标准库、扩展库、自定义库的顺序依次导入。141.3了解Python编程规范(3)最好在每个类、函数定义和一段完整的功能代码之后增加一个空行,在运算符两侧各增加一个空格,逗号后面增加一个空格。151.3了解Python编程规范(4)尽量不要写过长的语句。如果语句过长,可以改写成多个短一些的语句,以保证代码具有较好的可读性。也可以拆分为多行并使用续行符“\”或者使用圆括号表示是一条语句。161.3了解Python编程规范(5)虽然Python运算符有明确的优先级,但对于复杂的表达式建议在适当的位置使用括号使得各种运算的隶属关系和顺序更加明确、清晰。171.3了解Python编程规范(6)注释以符号#开始,表示本行#之后的内容为注释。包含在一对三引号'''...'''或"""..."""之间且不属于任何语句的内容将被解释器认为是注释。181.4安装扩展库pip在线安装(命令提示符环境,建议切换至Python安装目录中的scripts文件夹执行)pip离线安装:/~gohlke/pythonlibs/exe安装,不是每个扩展库都支持conda在线安装如果机器上安装了多个Python开发环境,那么在一个环境下安装的扩展库无法在另一个环境下使用,需要分别安装。191.4安装扩展库20pip命令示例说明pipdownloadSomePackage[==version]下载扩展库的指定版本,不安装pipfreeze[>requirements.txt]以requirements的格式列出已安装的扩展库piplist列出当前已安装的所有扩展库pipinstallSomePackage[==version]在线安装扩展库SomePackage的指定版本pipinstallSomePackage.whl通过whl文件离线安装扩展库pipinstallpackage1package2...依次(在线)安装package1、package2等扩展库pipinstall-rrequirements.txt安装requirements.txt文件中指定的扩展库pipinstall--upgradeSomePackage升级扩展库SomePackagepipuninstallSomePackage[==version]卸载扩展库SomePackage的指定版本把SomePackage替换为实际要安装或卸载的扩展库名/~gohlke/pythonlibs/下载时选择合适版本,并且不要修改文件名1.5词频统计-导入与使用标准库与扩展库的对象Python默认安装仅包含基本或核心模块,启动时也仅加载了基本模块,在需要时再显式地导入和加载标准库和第三方扩展库(需正确安装),这样可以减小程序运行的压力,并且具有很强的可扩展性。从“木桶原理”的角度来看,这样的设计与安全配置时遵循的“最小权限”原则的思想是一致的,也有助于提高系统安全性。211.5词频统计-导入与使用标准库与扩展库的对象>>>importmath#导入标准库math>>>math.gcd(56,64)#计算最大公约数8>>>importrandom#导入标准库random>>>n=random.random()#返回[0,1)内的随机小数>>>n=random.randint(1,

100)#返回[1,100]区间上的随机整数>>>n=random.randrange(1,

100)

#返回[1,100)区间中的随机整数>>>importos.pathaspath#导入标准库os.path,并设置别名为path>>>path.isfile(r'C:\windows\notepad.exe')True>>>importnumpyasnp#导入扩展库numpy,并设置别名为np>>>a=np.array((1,2,3,4))#通过模块的别名来访问其中的对象>>>aarray([1,2,3,4])>>>print(a)[1234]221.5词频统计-导入与使用标准库与扩展库的对象>>>fromrandomimportsample>>>sample(range(100),10)#在range(100)中选择10个不重复的随机数[27,47,92,87,38,84,3,45,39,41]>>>fromos.pathimportisfile>>>isfile(r'C:\Windows\notepad.exe')True>>>frommathimportsinasf#给导入的对象起个别名>>>f(3)0.1411200080598672231.5词频统计-导入与使用标准库与扩展库的对象>>>frommathimport*#导入标准库math中所有对象>>>sin(3)#求正弦值0.1411200080598672>>>sqrt(9)

#平方根3.0>>>pi#常数π3.141592653589793>>>e#常数e2.718281828459045>>>log2(8)#计算以2为底的对数值3.0>>>log10(100)#计算以10为底的对数值2.0>>>radians(180)#把角度转换为弧度3.141592653589793241.5词频统计-导入与使用标准库与扩展库的对象例1-1编写程序,对一段文件进行分词,然后统计并输出每个词语出现的次数。fromcollectionsimportCounterfromjiebaimportcuttext='''变量名、常量名、函数名和类名、成员方法名统称为标识符,\其中变量用来表示初始结果、中间结果和最终结果的值及其支持的操作,\函数用来表示一段封装了某种功能的代码,类是具有相似特征和共同行为的对象的抽象。\在为标识符起名字时,至少应该做到“见名知义”,\优先考虑使用英文单词或单词的组合作为标识符名字。'''words=cut(text)freq=Counter(words)print(freq)25项目2使用内置对象和运算符董付国微信公众号:Python小屋2.1了解Python常用内置对象对象是python语言中最基本的概念,在python中处理的一切都是对象。python中有许多内置对象可供编程者使用,内置对象可直接使用,不需要导入,如内置函数、数字、字符串、列表、del等。非内置对象需要导入模块才能使用,如正弦函数sin(x),随机数产生函数random()等。272.1了解Python常用内置对象28对象类型类型名称示例简要说明数字intfloatcomplex12343.14,1.3e53+4j整数大小没有限制,实数计算可能会有误差,内置支持复数及其运算字符串str'swfu',"I'mstudent"'''Python'''r'abc',R'bcd'使用单引号、双引号、三引号作为定界符,以字母r或R引导的表示原始字符串字节串bytesb'helloworld'以字母b引导,可以使用单引号、双引号、三引号作为定界符列表list[1,2,3]['a','b',['c',2]]所有元素放在一对方括号中,元素之间使用逗号分隔,其中的元素可以是任意类型字典dict{1:'food',2:'taste',3:'import'}所有元素放在一对大括号中,元素之间使用逗号分隔,元素形式为“键:值”,“键”不重复且必须为不可变类型对象元组tuple(2,-5,6)(3,)不可变,所有元素放在一对圆括号中,元素之间使用逗号分隔,如果元组中只有一个元素的话,后面的逗号不能省略集合set{'a','b','c'}所有元素放在一对大括号中,元素之间使用逗号分隔,元素不重复且必须为不可变类型对象常用内置对象2.1了解Python常用内置对象29对象类型类型名称示例简要说明布尔型boolTrue,False逻辑值,关系运算符、成员测试运算符、同一性测试运算符组成的表达式的值一般为True或False空类型NoneTypeNone空值异常ExceptionValueErrorTypeError

Python内置大量异常类,分别对应不同类型的异常文件

f=

open('data.dat','rb')open是Python内置函数,使用指定的模式打开文件,返回文件对象续表2.1.1常量与变量30在Python中,不需要事先声明变量名及其类型,直接赋值即可创建各种类型的对象变量。这一点适用于Python任意类型的对象。例如语句>>>x=3创建了整型变量x,并赋值为3,再例如语句>>>x='Helloworld.'创建了字符串变量x,并赋值为'Helloworld.'。凭空出现一个整型变量x新的字符串变量,再也不是原来的x了2.1.1常量与变量赋值语句的执行过程是:首先把等号右侧表达式的值计算出来,然后在内存中寻找一个位置把值存放进去,最后创建变量并引用这个内存地址。>>>x=3Python中的变量并不直接存储值,而是存储了值的内存地址或者引用,这也是变量类型随时可以改变的原因。312.1.1常量与变量Python属于强类型编程语言,Python解释器会根据赋值或运算来自动推断变量类型。Python还是一种动态类型语言,变量的类型也是可以随时变化的。>>>x=3>>>print(type(x))<class'int'>>>>x='Helloworld.'>>>print(type(x))#查看变量类型<class'str'>>>>x=[1,2,3]>>>print(type(x))<class'list'>>>>isinstance(3,int)#测试对象是否是某个类型的实例True>>>isinstance('Helloworld',str)True322.1.1常量与变量在定义变量名的时候,需要注意以下问题:变量名必须以字母或下划线开头,但以下划线开头的变量在Python中有特殊含义;变量名中不能有空格以及标点符号(括号、引号、逗号、斜线、反斜线、冒号、句号、问号等等);不能使用关键字作变量名,可以导入keyword模块后使用print(keyword.kwlist)查看所有Python关键字;变量名对英文字母的大小写敏感,例如student和Student是不同的变量。不建议使用系统内置的模块名、类型名或函数名以及已导入的模块名及其成员名作变量名,这将会改变其类型和含义,例如id、max、len、list、math、random这样的变量名都是不建议使用的。332.1.2数字类型在Python中,内置的数字类型有整数、实数和复数。整数类型除了常见的十进制整数,还有:二进制。以0b开头,每一位只能是0或1。八进制。以0o开头,每一位只能是0、1、2、3、4、5、6、7这八个数字之一。十六进制。以0x开头,每一位只能是0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f之一,字母不区分大小写。342.1.2数字类型Python支持任意大的整数,实数运算可能会有一定的误差,应尽量避免在实数之间直接进行相等性测试,而是应该以二者之差的绝对值是否足够小作为两个实数是否相等的依据。352.1.2数字类型>>>9999**99#这里**是幂乘运算符,等价于内置函数pow()990148353526723487602263124753282625570559528895791057324326529121794837894053513464422176826916433932586924386677766244032001623756821400432975051208820204980098735552703841362304669970510691243800218202840374329378800694920309791954185117798434329591212159106298699938669908067573374724331208942425544893910910073205049031656789220889560732962926226305865706593594917896276756396848514900989999>>>0.3+0.2#实数相加0.5>>>0.4-0.1#实数相减,结果稍微有点偏差0.30000000000000004>>>0.4-0.1==0.3#应尽量避免直接比较两个实数是否相等False>>>abs(0.4-0.1-0.3)<1e-6#这里1e-6表示10的-6次方True>>>importmath>>>math.isclose(0.4-0.1,0.3)True362.1.2数字类型Python内置支持复数类型及其运算,并且形式与数学上的复数完全一致。>>>x=3+4j#使用j或J表示复数虚部>>>y=5+6j>>>x+y#支持复数之间的加、减、乘、除以及幂乘等运算(8+10j)>>>x*y(-9+38j)>>>abs(x)#内置函数abs()可用来计算复数的模5.0>>>x.imag#虚部4.0>>>x.real#实部3.0>>>x.conjugate()#共轭复数(3-4j)372.1.2数字类型Python3.6.x支持在数字中间位置使用单个下划线作为分隔来提高数字的可读性,类似于数学上使用逗号作为千位分隔符。在Python数字中单个下划线可以出现在中间任意位置,但不能出现开头和结尾位置,也不能使用多个连续的下划线。>>>1_000_0001000000>>>1_2_3_41234>>>1_2+3_4j(12+34j)>>>1_2.3_4512.345382.1.3字符串在Python中,没有字符常量和变量的概念,只有字符串类型的常量和变量,单个字符也是字符串。使用单引号、双引号、三单引号、三双引号作为定界符(delimiter)来表示字符串,并且不同的定界符之间可以互相嵌套。Python3.x全面支持中文,中文字符和英文字符都作为一个字符对待,甚至可以使用中文作为变量名。除了支持使用加号运算符连接字符串以外,Python字符串还提供了大量的方法支持格式化、查找、替换、排版等操作。392.1.3字符串>>>x='Helloworld.'#使用单引号作为定界符>>>x="Pythonisagreatlanguage."#使用双引号作为定界符>>>x='''Tomsaid,"Let'sgo."'''#不同定界符之间可以互相嵌套>>>print(x)Tomsaid,"Let'sgo.">>>x='good'+'morning'#连接字符串>>>x'goodmorning'>>>x='good'>>>x=x+'morning'#字符串变量之间的连接可以使用加号>>>x'goodmorning'>>>x*3'goodmorninggoodmorninggoodmorning'402.1.4列表、元组、字典、集合41

列表元组字典集合类型名称listtupledictset定界符方括号[]圆括号()大括号{}大括号{}是否可变是否是是是否有序是是否否是否支持下标是(使用序号作为下标)是(使用序号作为下标)是(使用“键”作为下标)否元素分隔符逗号逗号逗号逗号对元素形式的要求无无键:值必须可哈希对元素值的要求无无“键”必须可哈希必须可哈希元素是否可重复是是“键”不允许重复,“值”可以重复否元素查找速度非常慢很慢非常快非常快新增和删除元素速度尾部操作快其他位置慢不允许快快2.1.4列表、元组、字典、集合>>>x_list=[1,2,3]#创建列表对象>>>x_tuple=(1,2,3)#创建元组对象>>>x_dict={'a':97,'b':98,'c':99}#创建字典对象>>>x_set={1,2,3}#创建集合对象>>>print(x_list[1])#使用下标访问指定位置的元素2>>>print(x_tuple[1])#元组也支持使用序号作为下标2>>>print(x_dict['a'])#字典对象的下标是“键”97>>>3inx_set#成员测试True422.1.5函数函数可以分为内置函数、标准库函数、扩展库函数和自定义函数。在Python中,可以使用关键字def定义具名函数(有名字的函数),使用关键字lambda定义匿名函数(没有名字的函数,一般作为其他函数的参数来使用)。432.1.5函数#func是函数名,value是形参,可以理解为占位符#在调用函数时,形参会被替换为实际传递过来的对象deffunc(value):returnvalue*3#lambda表达式常用来定义匿名函数,也可以定义具名函数#下面定义的func和上面的函数func在功能上是等价的#value相当于函数的形参,表达式value*3的值相当于函数的返回值func=lambdavalue:value*3#通过函数名来调用,圆括号里的内容是实参,用来替换函数的形参print(func(5))#输出15print(func([5]))#输出[5,5,5]print(func((5,)))#输出(5,5,5)print(func('5'))#输出555442.2掌握Python运算符与表达式在Python中,单个常量或变量可以看作最简单的表达式,使用除赋值运算符之外的其他任意运算符和函数调用连接的式子也属于表达式。452.2掌握Python运算符与表达式运算符优先级遵循的规则为:算术运算符优先级最高,其次是位运算符、成员测试运算符、关系运算符、逻辑运算符等,算术运算符遵循“先乘除,后加减”的基本运算原则。虽然Python运算符有一套严格的优先级规则,但是强烈建议在编写复杂表达式时使用圆括号来明确说明其中的逻辑来提高代码可读性。462.2掌握Python运算符与表达式47运算符功能说明:=赋值运算,Python3.8新增,俗称海象运算符lambda[parameter]:expression用来定义lambda表达式,功能相当于函数,parameter相当于函数参数,可以没有;expression表达式的值相当于函数返回值value1ifconditionelsevalue2用来表示一个二选一的表达式,其中value1、condition、value2都为表达式,如果condition的值等价于True则整个表达式的值为value1的值,否则整个表达式的值为value2的值,类似于一个双分支选择结构,见3.2.2节or“逻辑或”运算,以表达式exp1orexp2为例,如果exp1的值等价于True则返回exp1的值,否则返回exp2的值and“逻辑与”运算,以表达式exp1andexp2为例,如果exp1的值等价于False则返回exp1的值,否则返回exp2的值not“逻辑非”运算,对于表达式notx,如果x的值等价于True则返回False,否则返回Truein、notinis、isnot<、<=、>、>=、==、!=成员测试,表达式xiny的值当且仅当y中包含元素x时才会为True;测试两个变量是否引用的同一个对象。如果两个对象引用的是同一个对象,那么它们的内存地址相同;关系运算,用于比较大小,作用于集合时表示测试集合的包含关系|“按位或”运算,集合并集^“按位异或”运算,集合对称差集&“按位与”运算,集合交集<<、>>左移位、右移位+、-算术加法,列表、元组、字符串连接;算术减法,集合差集*、@、/、//、%算术乘法,序列重复;矩阵乘法;真除;整除;求余数,字符串格式化+、-、~正号负号,相反数按位求反**幂运算,指数可以为小数,例如3**0.5表示计算3的平方根[]、.、()下标,切片;属性访问,成员访问;函数定义或调用,修改表达式计算顺序,声明多行代码为一个语句[]、()、{}定义列表、元组、字典、集合以及列表推导式、生成器表达式、字典推导式、集合推导式2.2.1算术运算符(1)+运算符除了用于算术加法以外,还可以用于列表、元组、字符串的连接,但不支持不同类型的对象之间相加或连接。>>>[1,2,3]+[4,5,6]#连接两个列表[1,2,3,4,5,6]>>>(1,2,3)+(4,)#连接两个元组(1,2,3,4)>>>'abcd'+'1234'#连接两个字符串'abcd1234'>>>'A'+1#不支持字符与数字相加,抛出异常TypeError:Can'tconvert'int'objecttostrimplicitly482.2.1算术运算符(2)*运算符除了表示算术乘法,还可用于列表、元组、字符串这几个序列类型与整数的乘法,表示序列元素的重复,生成新的序列对象。字典和集合不支持与整数的相乘,因为其中的元素是不允许重复的。>>>[1,2,3]*3[1,2,3,1,2,3,1,2,3]>>>(1,2,3)*3(1,2,3,1,2,3,1,2,3)>>>'abc'*3'abcabcabc'492.2.1算术运算符(3)运算符/和//在Python中分别表示算术除法和算术求整商(floordivision)。>>>3/2#数学意义上的除法1.5>>>15//4#如果两个操作数都是整数,结果为整数3>>>15.0//4#如果操作数中有实数,结果为实数形式的整数值3.0>>>-15//4#向下取整-4502.2.1算术运算符(4)%运算符可以用于整数或实数的求余数运算,还可以用于字符串格式化,但是这种用法并不推荐。>>>789%23#余数,等价于789-(789//23*23)7>>>'%c,%d'%(65,65)#把65分别格式化为字符和整数'A,65'>>>'%f,%s'%(65,65)#把65分别格式化为实数和字符串'65.000000,65'512.2.1算术运算符(5)**运算符表示幂乘:>>>3**2#3的2次方9>>>9**0.5#9的0.5次方,平方根3.0>>>3**2**3#幂运算符从右往左计算6561522.2.2关系运算符Python关系运算符最大的特点是可以连用。使用关系运算符的一个最重要的前提是,操作数之间必须可比较大小。>>>1<3<5#等价于1<3and3<5True>>>3<5>2True>>>1>6<8False532.2.2关系运算符>>>'Hello'>'world'#比较字符串大小#依次比较对应位置上的字符,得出结论立即停止False>>>[1,2,3]<[1,2,4]#比较列表大小True>>>'Hello'>3#字符串和数字不能比较TypeError:unorderabletypes:str()>int()>>>{1,2,3}<{1,2,3,4}#测试是否真子集True>>>{1,2,3}=={3,2,1}#测试两个集合是否相等True>>>{1,2,4}>{1,2,3}#集合之间的包含测试False>>>{1,2,4}<{1,2,3}False>>>{1,2,4}=={1,2,3}False542.2.3成员测试运算符in成员测试运算符in用于成员测试,即测试一个对象是否为另一个对象的元素。>>>3in[1,2,3]#测试3是否存在于列表[1,2,3]中True>>>5inrange(1,10,1)#range()是用来生成指定范围数字的内置函数True>>>'abc'in'abcdefg'#子字符串测试True>>>foriin(3,5,7):#循环,成员遍历print(i,end='\t')#连续按两次回车,执行代码3 5 7

552.2.4集合运算符集合的交集、并集、对称差集等运算借助于&、|、^来实现,而差集则使用减号运算符实现。>>>{1,2,3}|{3,4,5}#并集,自动去除重复元素{1,2,3,4,5}>>>{1,2,3}&{3,4,5}#交集{3}>>>{1,2,3}^{3,4,5}#对称差集{1,2,4,5}>>>{1,2,3}-{3,4,5}#差集{1,2}562.2.5逻辑运算符逻辑运算符and、or、not常用来连接条件表达式构成更加复杂的条件表达式,并且and和or具有惰性求值或逻辑短路的特点,当连接多个表达式时只计算必须要计算的值。另外要注意的是,运算符and和or并不一定会返回True或False,而是得到最后一个被计算的表达式的值,但是运算符not一定会返回True或False。572.2.5逻辑运算符>>>3>5anda>3#注意,此时并没有定义变量aFalse>>>3>5ora>3#3>5的值为False,所以需要计算后面表达式NameError:name'a'isnotdefined>>>3<5ora>3#3<5的值为True,不需要计算后面表达式True>>>3and5#最后一个计算的表达式的值作为整个表达式的值5>>>3and5>2True>>>3notin[1,2,3]#逻辑非运算notFalse582.2.6补充说明Python还有赋值分隔符=和+=、-=、*=、/=、//=、**=、|=、^=等大量复合赋值分隔符。Python不支持++和--运算符,虽然在形式上有时候似乎可以这样用,但实际上是另外的含义,要注意和其他语言的区别。592.2.6补充说明>>>i=3>>>++i#正正得正3>>>+(+3)#与++i等价3>>>i++#Python不支持++运算符,语法错误SyntaxError:invalidsyntax>>>--i#负负得正,等价于-(-i)3>>>i#等价于-(-(-i))-3>>>i--#Python不支持--运算符,语法错误SyntaxError:invalidsyntax602.2.6补充说明Python3.8开始新增了真正的赋值运算符“:=”,也称海象运算符,可以表达式中创建变量并为变量赋值,运用得当的话可以让代码更加简洁。这个运算符不能在普通语句中直接使用,如果必须使用的话需要在外面加一对圆括号。612.2.6补充说明fromrandomimportchoicestext=''.join(choices('01',k=100))if(c:=text.count('0'))>50:print(f'0出现的次数多,有{c}次。')else:print(f'1出现的次数多,有{100-c}次。')withopen('news.txt',encoding='utf8')asfp:while(length:=len(line:=fp.readline()))>0:iflength>30:print(f'第一个长度大于30的行为:{line}长度为:{length}')breakelse:print('没有长度大于30的行。')fornumin(data:=[1,2,3]):print(num)#循环结构中创建的变量在循环结束之后还可以访问print(data,num)622.3打字练习程序-使用Python内置函数内置函数(BIF,built-infunctions)是Python内置对象类型之一,不需要额外导入任何模块即可直接使用,这些内置对象都封装在内置模块__builtins__之中,用C语言实现并且进行了大量优化,具有非常快的运行速度,推荐优先使用。使用内置函数dir()可以查看所有内置函数和内置对象:>>>dir(__builtins__)使用help(函数名)可以查看某个函数的用法。>>>help(sum)Helponbuilt-infunctionsuminmodulebuiltins:sum(iterable,start=0,/)Returnthesumofa'start'value(default:0)plusaniterableofnumbers

Whentheiterableisempty,returnthestartvalue.Thisfunctionisintendedspecificallyforusewithnumericvaluesandmayrejectnon-numerictypes.632.3.1类型转换与判断内置函数bin()、oct()、hex()用来将整数转换为二进制、八进制和十六进制形式,这三个函数都要求参数必须为整数,但不要求必须为十进制整数。>>>bin(555)#把数字转换为二进制串'0b1000101011'>>>oct(555)#转换为八进制串'0o1053'>>>hex(555)#转换为十六进制串'0x22b'642.3.1类型转换与判断内置函数float()用来将其他类型数据转换为实数,complex()可以用来创建复数。>>>float(3)#把整数转换为实数3.0>>>float('3.5')#把数字字符串转换为实数3.5>>>float('inf')#无穷大,其中inf不区分大小写inf>>>complex(3)#指定实部(3+0j)>>>complex(3,5)#指定实部和虚部(3+5j)>>>complex('inf')#无穷大(inf+0j)652.3.1类型转换与判断ord()用来返回单个字符的Unicode码,chr()则用来返回Unicode编码对应的字符,str()直接将其任意类型参数转换为字符串。>>>ord('a')#查看指定字符的Unicode编码97>>>chr(65)#返回数字65对应的字符'A'>>>chr(ord('A')+1)#Python不允许字符串和数字之间的加法操作'B'>>>chr(ord('国')+1)#支持中文'图'662.3.1类型转换与判断>>>str(1234)#直接变成字符串'1234'>>>str([1,2,3])'[1,2,3]'>>>str((1,2,3))'(1,2,3)'>>>str({1,2,3})'{1,2,3}'672.3.1类型转换与判断list()、tuple()、dict()、set()用来把其他类型的数据转换成为列表、元组、字典、集合,或者创建空列表、空元组、空字典和空集合。>>>list(range(5))#把range对象转换为列表[0,1,2,3,4]>>>tuple(_)#一个下画线表示上一次正确的输出结果(0,1,2,3,4)>>>dict(zip('1234','abcde'))#创建字典{'1':'a','2':'b','3':'c','4':'d'}>>>set('1112234')#创建集合,自动去除重复{'4','2','3','1'}682.3.1类型转换与判断内置函数eval()用来计算字符串或字节串中表达式的值,在有些场合也可以用来实现类型转换的功能。>>>eval('3+5')8>>>eval('9')#把数字字符串转换为数字9>>>eval('09')#抛出异常,不允许以0开头的数字SyntaxError:invalidtoken>>>int('09')#这样转换是可以的9>>>list(str([1,2,3,4]))#字符串中每个字符都变为列表中的元素['[','1',',','','2',',','','3',',','','4',']']>>>eval(str([1,2,3,4]))#字符串求值[1,2,3,4]692.3.1类型转换与判断内置函数type()和isinstance()可以用来查看和判断数据类型,常用来对函数参数进行检查,可以避免错误的参数类型导致函数崩溃或返回意料之外的结果。>>>type(3)#查看3的类型<class'int'>>>>type([3])#查看[3]的类型<class'list'>>>>type({3})in(list,tuple,dict)#判断{3}是否为list,tuple或dict类型的实例False>>>type({3})in(list,tuple,dict,set)#判断{3}是否为list,tuple,dict或set的实例True>>>isinstance(3,int)#判断3是否为int类型的实例True>>>isinstance(3j,int)False>>>isinstance(3j,(int,float,complex))#判断3是否为int,float或complex类型True702.3.2最值与求和max()、min()、sum()这三个内置函数分别用于计算列表、元组或其他包含有限个元素的可迭代对象中所有元素最大值、最小值以及所有元素之和。sum()默认(可以通过start参数来改变)支持包含数值型元素的可迭代对象,max()和min()则要求可迭代对象中的元素之间可比较大小。>>>fromrandomimportrandint>>>a=[randint(1,100)foriinrange(10)]#包含10个[1,100]之间随机数的列表>>>print(max(a),min(a),sum(a))#最大值、最小值、所有元素之和>>>sum(a)/len(a)#平均值712.3.2最值与求和函数max()和min()还支持default参数和key参数,其中default参数用来指定可迭代对象为空时默认返回的最大值或最小值,而key参数用来指定比较大小的依据或规则,可以是函数或lambda表达式等任意类型的可调用对象。>>>max(['2','111'])#不指定排序规则'2'>>>max(['2','111'],key=len)#返回最长的字符串'111'722.3.2最值与求和>>>fromrandomimportrandint>>>lst=[[randint(1,50)foriinrange(5)]forjinrange(30)]>>>max(lst,key=sum)[50,22,38,49,43]>>>max(lst,key=lambdax:x[1])[37,48,42,15,23]>>>max(lst,key=lambdax:(x[1],x[3]))[37,48,42,15,23]732.3.3基本输入/输出input()和print()是Python的基本输入输出函数,前者用来接收用户的键盘输入,后者用来把数据以指定的格式输出到标准控制台或指定的文件对象。不论用户输入什么内容,input()一律返回字符串对待,必要的时候可以使用内置函数int()、float()或eval()对用户输入的内容进行类型转换。742.3.3基本输入/输出>>>x=input('Pleaseinput:')Pleaseinput:345>>>x'345'>>>type(x)#把用户的输入作为字符串对待<class'str'>>>>int(x)#转换为整数345>>>eval(x)#对字符串求值,或类型转换345>>>x=input('Pleaseinput:')Pleaseinput:[1,2,3]>>>x'[1,2,3]'>>>type(x)<class'str'>>>>eval(x)[1,2,3]752.3.3基本输入/输出内置函数print()用于输出信息到标准控制台或指定文件中,语法格式为:print(value1,value2,...,sep='',end='\n',file=sys.stdout,flush=False)sep参数之前为需要输出的内容(可以有多个);sep参数用于指定数据之间的分隔符,默认为空格;end参数用于指定输出完数据以什么结束,默认为换行符;>>>print(1,3,5,7,sep='\t')#修改默认分隔符1 3 5 7>>>foriinrange(10):#修改end参数,每个输出之后不换行print(i,end='')0123456789762.3.4排序与逆序sorted()对列表、元组、字典、集合或其他可迭代对象进行排序并返回新列表,reversed()对可迭代对象(生成器对象和具有惰性求值特性的zip、map、filter、enumerate等类似对象除外)进行翻转(首尾交换)并返回可迭代的reversed对象。>>>x=list(range(11))>>>importrandom>>>random.shuffle(x)#打乱顺序>>>x[2,4,0,6,10,7,8,3,9,1,5]>>>sorted(x)#以默认规则排序[0,1,2,3,4,5,6,7,8,9,10]>>>sorted(x,key=lambdaitem:len(str(item)),reverse=True)#按转换成字符串以后的长度降序排列[10,2,4,0,6,7,8,3,9,1,5]>>>sorted(x,key=str)#按转换成字符串以后的大小升序排列[0,1,10,2,3,4,5,6,7,8,9]772.3.4排序与逆序>>>x=['aaaa','bc','d','b','ba']>>>sorted(x,key=lambdaitem:(len(item),item))#先按长度排序,长度一样的正常排序['b','d','ba','bc','aaaa']>>>reversed(x)#逆序,返回reversed对象<list_reverseiteratorobjectat0x0000000003089E48>>>>list(reversed(x))#reversed对象是可迭代的[5,1,9,3,8,7,10,6,0,4,2]782.3.5枚举与迭代enumerate()函数用来枚举可迭代对象中的元素,返回可迭代的enumerate对象,其中每个元素都是包含索引和值的元组。>>>list(enumerate('abcd'))#枚举字符串中的元素[(0,'a'),(1,'b'),(2,'c'),(3,'d')]>>>list(enumerate(['Python','Great']))#枚举列表中的元素[(0,'Python'),(1,'Great')]>>>forindex,valueinenumerate(range(10,15)):#枚举range对象中的元素print((index,value),end='')(0,10)(1,11)(2,12)(3,13)(4,14)792.3.6map()、reduce()、filter()内置函数map()把一个可调用对象func依次映射到一个或多个可迭代对象中对应位置的元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原可迭代对象中元素经过可调用对象func处理后的结果。>>>list(map(str,range(5)))#把列表中元素转换为字符串['0','1','2','3','4']>>>defadd5(v):#单参数函数returnv+5>>>list(map(add5,range(10)))#把单参数函数映射到一个可迭代对象的所有元素[5,6,7,8,9,10,11,12,13,14]>>>defadd(x,y):#可以接收2个参数的函数returnx+y>>>list(map(add,range(5),range(5,10)))#把双参数函数映射到两个序列上[5,7,9,11,13]802.3.6map()、reduce()、filter()>>>importrandom>>>x=random.randint(1,1e30)#生成指定范围内的随机整数>>>x839746558215897242220046223150>>>list(map(int,str(x)))#提取大整数每位上的数字[8,3,9,7,4,6,5,5,8,2,1,5,8,9,7,2,4,2,2,2,0,0,4,6,2,2,3,1,5,0]812.3.6map()、reduce()、filter()82标准库functools中的函数reduce()可以将一个接收2个参数的函数以迭代的方式从左到右依次作用到一个可迭代对象的所有元素上,并且允许指定一个初始值。>>>fromfunctoolsimportreduce>>>seq=list(range(1,10))>>>reduce(lambdax,y:x+y,seq)452.3.6map()、reduce()、filter()内置函数filter()将一个单参数函数作用到一个可迭代对象上,返回其中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None,则返回其中等价于True的元素。>>>seq=['foo','x41','?!','***']>>>deffunc(x):returnx.isalnum()#测试是否为字母或数字>>>filter(func,seq)#返回filter对象<filterobjectat0x000000000305D898>>>>list(filter(func,seq))#把filter对象转换为列表['foo','x41']832.3.7range()range()是Python开发中非常常用的一个内置函数,语法格式为range([start,]end[,step]),有range(stop)、range(start,stop)和range(start,stop,step)三种用法。该函数返回的range对象中包含左闭右开区间[start,end)内以step为步长的整数。参数start默认为0,step默认为1。>>>range(5)#start默认为0,step默认为1range(0,5)>>>list(_)[0,1,2,3,4]>>>list(range(1,10,2))#指定起始值和步长[1,3,5,7,9]>>>list(range(9,0,-2))#步长为负数时,start应比end大[9,7,5,3,1]842.3.8zip()zip()函数用来把多个可迭代对象中对应位置的元素组合到一起,返回一个可迭代的zip对象,其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组,如同拉拉链一样。>>>list(zip('abcd',[1,2,3]))#压缩字符串和列表[('a',1),('b',2),('c',3)]>>>list(zip('123','abc',',.!'))#压缩3个序列[('1','a',','),('2','b','.'),('3','c','!')]>>>x=zip('abcd','1234')>>>x<zipobjectat0x00000219F18E0980>>>>list(x)[('a','1'),('b','2'),('c','3'),('d','4')]852.3.9综合应用-打字练习程序例2-1打字练习程序。每次运行程序时随机输出100个字,为防止练习者不认识,为每个字标注拼音。练习者输入完成后,程序输出成绩。fromtimeimporttimefromoperatorimporteqfromrandomimportchoicesfrompypinyinimportpinyincharacters='''黍煤勇入圾厨找匿坯叮残讣钉都够敞猜褪氓棵趾番搔培吱对\击窥夷汉聪众卯捻闷叶寿喘龚瞻凝乒萧卞凑誊盅封辊晶箔玛粕颓邪圈阅挨瞄件翘\旱熏藐幽拢侈娠实哪嫡固壶逆需度崭脊斧韵依轮彭绽幼驳密拿臃踌锄瑚年驳庐湖\散甚慰柄溪潜党代沂墅钥船癣傲耳粳懈浴妙篡董捂侈豆乏卑畏客瑰丹险什拣誉乘\狗班遗障欺碟丁祈侧盗豺粟卑朝饲澈烬奸区始油匈泅拈多重诲啊改钧疽匿新刮一\友簇抒腋万镊盗种女胶牡诡溺词筹冯鳞但床惨帧写扩跟犁涸硬蹭邱馁右够出耶欣\票贮汽腑败请蛰婶皋挚吓刮若窖菜位茵渴五杖森酉舜都继讨北耘咖奸瘩狂鹿腥胸\堰杆项涌膝絮丧闺曲饭襟窜台斑厄亩名岩志溺刁值帮潞志泳孤箕哮烂咸盛县官眩\汽饱拇箩轨猩臻吱舰卯筏以大竣置塞诺娠署荐惜喧静溃循莽秉赌汉炒钒泊勇参'''862.3.9综合应用-打字练习程序origin=''.join(choices(characters,k=100))prompt=''.join(map(''.join,zip(origin,map(str,

pinyin(origin))))).replace("'","")print('原文:',prompt,sep='\n')start_time=time()user_input=input('请开始输入,回车表示输入完成:\n')time_span=time()-start_timeright=sum(map(eq,origin,user_input))print(f'原文共有{len(origin)}个字,\n'f'您输入了{len(user_input)}个字,其中正确字数为{right},'f'正确率:{right/len(origin):.2%}。\n'f'用时:{round(time_span,2)}秒,'f'打字速度{round(len(user_input)/time_span,2)}字/秒,'f'正确打字的速度为{round(right/time_span,2)}字/秒')872.4了解Python关键字Python关键字只允许用来表达特定的语义,不允许通过任何方式改变它们的含义,也不能用来做变量名、函数名或类名等标识符。在Python开发环境中导入模块keyword之后,可以使用print(keyword.kwlist)查看所有关键字。882.4了解Python关键字89关键字含义False常量,逻辑假None常量,空值True常量,逻辑真and逻辑与运算as在import或except语句中给对象起别名assert断言,用来确认某个条件必须满足,可用来帮助调试程序break用在循环中,提前结束break所在层次的循环class用来定义类continue用在循环中,提前结束本次循环def用来定义函数del用来删除对象或对象成员elif用在选择结构中,表示elseif的意思else可以用在选择结构、循环结构和异常处理结构中except用在异常处理结构中,用来捕获特定类型的异常finally用在异常处理结构中,用来表示不论是否发生异常都会执行的代码for构造for循环,用来遍历可迭代对象中的元素from明确指定从哪个模块中导入什么对象,例如frommathimportsin;还可以与yield一起构成yield表达式2.4了解Python关键字90关键字含义global定义或声明全局变量if用在选择结构中import用来导入模块或模块中的对象in成员测试is同一性测试lambda用来定义lambda表达式,类似于函数nonlocal用来声明nonlocal变量not逻辑非运算or逻辑或运算pass空语句,执行该语句时什么都不做,常用作占位符raise用来显式抛出异常return在函数中用来返回值,如果没有指定返回值,表示返回空值Nonetry在异常处

温馨提示

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

评论

0/150

提交评论