![大学计算机(Windows 10+WPS Office 2019)(微课版) 课件 第6章 python程序设计_第1页](http://file4.renrendoc.com/view12/M0B/39/0C/wKhkGWaP7X6ASaX1AAFe4WhE23Y699.jpg)
![大学计算机(Windows 10+WPS Office 2019)(微课版) 课件 第6章 python程序设计_第2页](http://file4.renrendoc.com/view12/M0B/39/0C/wKhkGWaP7X6ASaX1AAFe4WhE23Y6992.jpg)
![大学计算机(Windows 10+WPS Office 2019)(微课版) 课件 第6章 python程序设计_第3页](http://file4.renrendoc.com/view12/M0B/39/0C/wKhkGWaP7X6ASaX1AAFe4WhE23Y6993.jpg)
![大学计算机(Windows 10+WPS Office 2019)(微课版) 课件 第6章 python程序设计_第4页](http://file4.renrendoc.com/view12/M0B/39/0C/wKhkGWaP7X6ASaX1AAFe4WhE23Y6994.jpg)
![大学计算机(Windows 10+WPS Office 2019)(微课版) 课件 第6章 python程序设计_第5页](http://file4.renrendoc.com/view12/M0B/39/0C/wKhkGWaP7X6ASaX1AAFe4WhE23Y6995.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章
Python程序设计大学计算机基础1Python语言概述2Python程序设计入门基础3Python数据类型4程序流程控制结构6.1Python语言概述搭建Python编程环境1.打开Python官网:,下载适合自己电脑的安装包搭建Python编程环境2.安装Python解释器动手编写第一个程序-交互式Python安装完成后,单击windows的“开始”按钮,找到“Python3.9”单击“IDLE(Python3.964-bit)”即可打开编程环境在Python提示符“>>>”右侧输入代码,完整写完一条语句以后按“Enter”键执行。>>>print("helloworld")helloworld>>>23+4568动手编写第一个程序-文件式在IDLE主窗口的菜单栏上,执行“File-NewFile”,打开一个新窗口“untitled”在光标闪烁的地方就可以输入代码,一行语句输入完后按“ENTER”键换到下一行可继续输入下一行代码在菜单栏中执行“Run—RunModule”菜单项或按<F5>,单击“确定”以后弹出一个“另存为”窗口,在窗口下方输入文件名,Python程序文件的扩展名为.py,这里保存为test.py。6.2Python程序入门基础问题引出例2:编写一个程序来计算圆的面积,圆的半径需大于0。关键字与标识符关键字是Python语言本身定义好的有特殊含义的代码元素,Python中有些关键字不能作为标识符。关键字与标识符标识符就是变量、函数、类、模块等需由程序员自己来命名的名称,标识符的命名需遵循一定的命名规则:(1)必须以字母或下画线开头,由字母、数字或汉字组成;(2)区分大小写;(3)不能使用33个关键;最重要的命名规则是,选取的名称应该能够清楚地说明该变量、函数、类、模块等所包含的意义,即“见名知义”,增加代码的可读性。变量变量是表示计算机存储器中表示的一些值的名称,通常是字母字符或字。变量用于存储数据,可以在程序执行过程中被赋值和改变。创建变量>>>x=20#创建变量x,整数类型>>>name="xiangqiaolian"#创建变量y,字符串类型>>>x#输出变量x的值20>>>name#输出变量name的值'xiangqiaolian'变量如何“变”>>>x=20#次对变量x赋值,创建变量x,初值为20>>>x=x+5#再次对x赋值,将右边表达式x+5的结果25重新赋值给x>>>x#输出x的最新值为2525>>>x="abc"#再次对x进行赋值,将字符串”abc”赋值给x>>>x#输出变量x的最新值为”abc”'abc'变量“出错”变量必须先创建后使用,否则系统会报错。例:>>>x=20#创建变量x,赋值为20>>>x=x+y#将右边表达式x+y的结果赋值给x,系统报错,因为y没有创建Traceback(mostrecentcalllast):File"<pyshell#1>",line1,in<module>x=x+yNameError:name'y'isnotdefined对象、名字和引用所有的值都是对象一个变量是一个引用对象的名字一个对象可能有多个名字引用它这个特性在内部修改对象的时候很重要!你可能不得不做出适当的拷贝来得到你要的效果对不可变对象(数字,字符串),这永远不是问题a>>>a=[1,3,2]>>>b=a>>>c=b[0:2]>>>d=b[:][1,3,2]bcd[1,3][1,3,2]>>>b.sort()#'a'被改变!>>>a[1,2,3]标准输入输出程序用来解决某个问题时需要用到数据的输入与输出。数据输入输出的方式很多,从键盘上输入数据的方式称为标准输入,数据在屏幕上显示的输出方式称为标准输出。Python提供内置函数input和print来实现程序的标准输入与输出。标准输入input格式:input([提示信息])说明:暂停程序的运行,等待用户从键盘上输入数据;用户从键盘上输入数据以后,返回字符串;括号内可以加提示信息,也可以不加。标准输入input>>>x=input("请输入一个数:")#等待从键盘上输入一个数,把这个数赋值给变量x请输入一个数:3#光标闪烁的地方输入数字3>>>x#x的值为’3’'3'>>>type(x)#查看x的数据类型为str,即字符串型<class'str'>>>>y=input()#等待从键盘上输入数据,没有提示信息时只有光标闪烁aa#在光标闪烁的地方输入aa>>>y'aa'>>>type(y)<class'str'>标准输出print格式:print(输出项1,输出项2,输出项3……[,sep=’,’][,end=’\n’])说明:标准输出函数,“[]”括起来表示可选项。(1)如果有多项输出,输出项1和输出项2之间用逗号分隔;(2)多项输出的结果在屏幕上显示时默认是空格隔开,可以通过sep=’分隔符’方式指定多个输出项在屏幕上显示时用指定分隔符隔开;(3)默认情况下执行完一条print语句以后,下一条print语句的输出结果会换行显示,如果不换行显示,可以通过end=’分隔符’指定同行显示时的分隔符。标准输出printname='zhangsan'age=20sex='female'print(name)print(name,age,sex)print(name,age,sex,sep=',')print(name,end='')print(age,end='')print(sex)Python代码编写规范-缩进Python程序依靠代码块的缩进来体现代码之间的逻辑关系,同一级别的代码缩进量必须相同。Python代码编写规范-注释(1)单行注释以符号#开始,表示#之后的内容为注释,可以放在代码行后面,也可以单独成一行。(2)多行注释包含在一对三单引号或三双引号之间且不属于任何语句的内容将被解释器认为是注释。Python代码编写规范-续行如果一行代码太长,在行尾加上“\”来续行,表示下面一行接续上一行成为一条完整语句,也可以使用括号来包含多行内容。>>>print("人生苦短\#用“\”续行我用Pyhon")人生苦短我用Pyhon>>>print(1+2#用小括号续行 +3+4+5+6+7)28如何分段很长的行有时,一行代码需要被切为多行显示缩进规则意味着我们没有自由的形式可用"illegalsyntaxexample"ifa_complicated_expressionandanother_complicated_expression:print('thisisillegalsyntax;itwillnotwork‘)选择1:在一行的最后使用连续字符'\'"validsyntaxexample1"ifa_complicated_expressionand\another_complicated_expression:print('thisisvalidsyntax‘)"validsyntaxexample2"if(a_complicated_expressionandanother_complicated_expression):print('thisisvalidsyntax‘)选择2:用圆括号括起表达式在圆括号里面的行可以中断,换行[]与{}也是可以的6.3Python数据类型整数整数就是数学意义上的整数。整数有正整数、0和负整数,Python中可以表示任意大小的整数。浮点数浮点数表示一个实数,由整数部分和小数部分组成,如:1.7,3.14,0.0002等。浮点数也可以用科学计数法表示,如3.14e5,就是3.14*105。由于精度问题,浮点数使用时尽量避免直接进行相等性测试。>>>0.1+0.2==0.3#判断0.1+0.2等于0.3否False#False表示不等>>>0.1+0.2#计算0.1+0.2的值0.30000000000000004复数Python支持的复数类型形式上跟数学上的复数完全一致。>>>x=1+2j#定义一个复数>>>y=3+4j>>>x+y#两个复数相加(4+6j)常用运算>>>2+2.3#加法4.3>>>10/3#除法3.3333333333333335>>>10//3#整商(商的整数部分)3>>>10%3#余数1数字表达式通常的数字表达式运算符:+,-,/,*,**,%,//运算优先级和括号正常工作>>>12+517>>>12+5*222>>>(12+5)*234>>>a=12+5>>>print(a)17>>>b=12.4+a#aisconvertedtofloatautomatically>>>b29.4>>>print(b)29.4>>>4+5.59.5>>>1+3.0**210.0>>>1+2j+3-4j(4-2j)逻辑表达式(布尔表达式)booleanTrue和False为预定义值;实际上是整数1和0值0作为False,所有其他值是True常见的布尔表达式运算符:not,and,or>>>TrueorFalseTrue>>>not((TrueandFalse)orTrue)False>>>True*1212>>>0and10比较运算符产生布尔值比较运算符:<,<=,>,>=,==,!=>>>12<13True>>>12>13False>>>12<=12True>>>12!=13True案例分享例:编写程序,由用户任意输入两个数,计算这两个数的和,并打印输出。num1=eval(input("输入第1个数:"))num2=eval(input("输入第2个数:"))s=num1+num2print("两个数的和为:",s)结果如下:输入第1个数:12输入第2个数:23.23两个数的和为:35.230000000000004字符串stringPython语言中的字符串数据是由定界符单引号、双引号、三单引号或三双引号来定义,如'hello',"我爱中国"。字符串中的单引号如果是作为一个字符单引号出现,则定义这个字符串的时候定界符需要换成双引号,反之亦然。如“I’mateacher”。字符串string单引号和双引号均可用于字符串生成一样的字符串值字符串中的特殊符号:\nnewline,\ttab,others三引号(单、双均可)用于大块的文本内容>>>a='Helloworld!'>>>b="Helloworld!">>>a==bTrue>>>a="Oneline.\nAnotherline.">>>print(a)Oneline.Anotherline.>>>b="""Oneline,anotherline.""">>>print(b)Oneline,anotherline.>>>a="Per'slecture">>>print(a)Per'slecture字符串转换数据类型转换需要用到函数:'str','int','float'函数'eval'将一个字符串解释为Python表达式>>>a="58">>>type(a)<class'str'>>>>b=int(a)>>>b58>>>type(b)<class'int'>>>>c=int('blah')#如果不合法的表达式出现会怎样?Traceback(mostrecentcalllast):File"<pyshell#34>",line1,in-toplevel-c=int('blah')ValueError:invalidliteralforint():blah>>>f=float('1.2e-3')>>>f#uses'repr'0.0012>>>print(f)#uses'str'0.0012>>>eval('23-12')11字符串运算符>>>a="Part1">>>b="andpart2">>>a+''+b#合并,添加字符串'Part1andpart2'>>>s=a*2#重复并合并字符串>>>print(s)Part1Part1>>>s[0]#下标:单个字符,偏移量为0'P'>>>s[0:4]#片段:部分字符串,从0到4的正左方'Part'>>>s[5:]#边界留出:一直到字符串的一端'1Part1'>>>s[6:-1]#负数代表指标计数从右边开始,结束点在-1的正左方'Part'>>>len(s)#函数'len'获得字符串的长度12>>>'p'ins#成员属性测试False>>>'P'insTrue>>>'Part'ins#子串测试True改变字符串:不行!Python中的字符串不可修改!如果你真的要改变一个字符串:用旧的字符串片段生成一个新的>>>s[0]='B'Traceback(mostrecentcalllast):File"<pyshell#68>",line1,in-toplevel-s[0]='B'TypeError:objectdoesn'tsupportitemassignment>>>s='B'+s[1:]>>>s'Bart1Part1'重新生成字符串可能要用到大量的计算机资源如果你要生成许多新串,尝试字符串格式化列表(List)处理能让字符串处理更为有效字符串方法字符串有一组built-in
(内建,内置,内嵌)方法没有方法可以改变原串!有几个方法可以生成新串>>>s='astring,withstuff'>>>s.count('st')#有多少子串?2>>>s.find('stu')#如果可以,给出子串的位置15>>>three='3'>>>three.isdigit()#是纯数字串吗?True>>>supper=s.upper()#转为大写>>>supper'ASTRING,WITHSTUFF'>>>s.rjust(30)#通过加空格来右对齐'astring,withstuff'>>>“newlines\n\n\n”.strip()#一个实际的串也可以调用方法!'newlines'>>>s.replace('stuff','characters')#替换子串(全部出现过的子串)'astring,withcharacters'>>>s.replace('s','X',1)#只替换一次'aXtring,withstuff'字符串的拼接与重复>>>s1="hello">>>s2="python">>>s1+s2#字符串的拼接'hellopython'>>>s1*2#字符串的重复'hellohello'>>>'o'ins1#测试字符’o’是否在字符串s1中True字符串的索引与切片字符串中每个字符有两个“编号”,一个是正向递增的“号”,首字符的“号”为0,另一个是反向递减的“号”,最后一个字符的“号”为-1。用字符串[号]的方法可以访问这个“号”所对应的字符,称为索引操作;用字符串[start:end:step]的方法可以访问多个字符,称为字符串的切片操作;start表示起点,step表示终点后一个字符的编号,step表示步长。字符串的分隔与连接字符串的分割方法:s.split(["分隔符"]),s表示待分割的字符串字符串的连接方法:"连接符".join(ls),ls为待连接的字符串列表>>>string1="apple,banana,tomato,pineapple,watermelon">>>string1.split(",")#将字符串以逗号为界进行拆分,得到一个列表['apple','banana','tomato','pineapple','watermelon']>>>lst1=['a','b','c','d']>>>','.join(lst1)#列表的元素是字符串,用‘,’连接形成一个新的字符串'a,b,c,d'字符串的分隔与连接字符串的分割方法:s.split(["分隔符"]),s表示待分割的字符串字符串的连接方法:"连接符".join(ls),ls为待连接的字符串列表>>>string1="apple,banana,tomato,pineapple,watermelon">>>string1.split(",")#将字符串以逗号为界进行拆分,得到一个列表['apple','banana','tomato','pineapple','watermelon']>>>lst1=['a','b','c','d']>>>','.join(lst1)#列表的元素是字符串,用‘,’连接形成一个新的字符串'a,b,c,d'字符串的查找与替换字符串的查找方法:s.find("s1"),查找字符串s1在字符串s中首次出现的位置,如果不存在,返回-1;字符串的替换方法:s.replace("旧字符串","新字符串"),将s中的旧字符串全部替换成新字符串,返回另一个字符串,原字符串s并没有发生变化。字符串的查找与替换>>>s4="thisisatable">>>s4.find("i")#从字符串左边开始查找字符“i”在s4中首次出现的位置2>>>s4.find("d")#若在字符串中查不到字母”d”,返回-1-1>>>s4.replace("is","haha")#用新字符串“haha”替换s4中的旧字符串“is”'thhahahahaatable'>>>s5="abcabcabcabc">>>s5.replace("abc","efg")#字符串s5中所有的"abc"全部替换成"efg"'efgefgefgefg'#结果得到另一个字符串字符串的format方法<模板字符串>.format()方法作为文本处理工具,提供强大而丰富的字符串格式化功能。<模板字符串>中包含普通字符串和模板字符串,普通字符串原样不变,format函数中的参数按照模板字符串中指定的顺序、指定的格式进行格式化字符串的format方法>>>name1="zhangsan">>>name2="lisi">>>"一个人叫{},另一个叫{}".format(name1,name2)#{}是给name1,name2占位'一个人叫zhangsan,另一个叫lisi'>>>"一个人叫{1},另一个叫{0}".format(name1,name2)'一个人叫lisi,另一个叫zhangsan'说明:{}里的数字是format括号里面参数的序号,第一个参数的序号为0。字符串的format方法>>>x=100.230>>>'x={}'.format(x)#发现小数点后面最后的0没了'x=100.23'>>>'x={:.3f}'.format(x)#{:.3f}表示把x按照小数点后面保留三位的格式进行格式化'x=100.230'>>>s="hello">>>'{:>10}'.format(s)#把s格式化为10个字符的宽度,右对齐'hello'>>>'{:*^10}'.format(s)#把s格式化为10个字符的宽度,居中对齐,不够的用*填充'**hello***'字符串格式化当有多个项需要格式化的时候,要用元组(Tuples)作为操作符元组的长度必须匹配格式化项数不能用列表类型List!>>>c='Python'>>>n=200>>>"Thisisa%scoursewith%istudents."%(c,n)'ThisisaPythoncoursewith200students.'>>>w="Number%iwon!"%12#字符串格式化操作符%>>>w'Number12won!'字符串格式化操作符'%'通常是生成新串的最佳方式类似于C语言的格式化:需要一些技巧,但功能强大多个字符串格式化代码%s:string(usesfunction'str')%r:string(usesfunction'repr')%f,%e,%g:float字符串格式化格式含义'd'带符号的十进制整数.'i'带符号的十进制整数.'o'带符号的八进制值.'u'过时的类型,等于'd'.'x'带符号的十六进制(小写).'X'带符号的十六进制(大写).'e'浮点数指数格式(小写).'E'浮点数指数格式(大写).'f'浮点数十进制格式.'F'浮点数十进制格式.'g'浮点数格式.如果指数小于-4就使用小写指数格式,否则使用十进制格式.'G'浮点数格式.如果指数小于-4就使用大写指数格式,否则使用十进制格式.'c'单个字符(接受整数获这个单个正常字符).'r'字符串(使用函数repr()转为任何python对象).'s'字符串(使用函数str()转为任何python对象).'%'转为%自己.列表list列表是一个存储容器,当需要增加元素的时候可以自动增长,删除元素的时候可以自动收缩。列表是可变序列,是Python中使用频率最高、最通用的数据类型。列表中可以包含任意数据类型的数据,同样可以索引、切片、拼接和重复等操作列表List有序的对象序列;排列异质的;可以包含任意类型的对象的混合>>>r=[1,2.0,3,5]#列表实例,不同的值>>>r[1,2.0,3,5]>>>type(r)<class'list'>>>>r[1]#通过下标来访问;偏移量为02.0>>>r[-1]#负的下标代表从尾部开始计数5>>>r[1:3]#列表的片段;给出新的列表[2.0,3]>>>w=r+[10,19]#合并列表;给出另外的一个列表>>>w[1,2.0,3,5,10,19]>>>r#原列表不变;w和r不同[1,2.0,3,5]>>>t=[0.0]*10#用重复生成一个初始向量>>>t[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]列表的相关运算>>>lst1=[1,2,3,4,5,6,7]#创建列表lst1>>>lst1[0]#索引1>>>lst1[-1]#索引7>>>lst1[:]#切片[1,2,3,4,5,6,7]>>>lst1[::-1][7,6,5,4,3,2,1]>>>lst2=['a','b','c']>>>lst1+lst2#列表的拼接[1,2,3,4,5,6,7,'a','b','c']>>>lst2*3#列表的重复['a','b','c','a','b','c','a','b','c']>>>'a'inlst2#判断列表lst2中是否存在’a’列表List操作列表是可变的,可以改变局部列表是动态的,大小可变>>>r=[1,2.0,3,5]>>>r[3]='word'#通过下标访问改变一个元素(项)>>>r[1,2.0,3,'word']>>>r[0]=[9,8]#表可以嵌套>>>r[[9,8],2.0,3,'word']>>>r[0:3]=[1,2,5,6]#改变列表的一个片段,可以改变列表的长度>>>r[1,2,5,6,'word']>>>r[1:3]=[]#通过设置列表的片段为空集来移除元素>>>r[1,6,'word']>>>len(r)#列表的长度;项的个数3>>>6inr#成员属性测试True>>>r.index(6)#搜索并给出位置,如果没有的话……1列表的方法列表有一组内建的方法有些方法会从内部改变列表>>>r=[1,2.0,3,5]>>>r.append('thing')#在列表尾增加一个项>>>r[1,2.0,3,5,'thing']>>>r.append(['another','list'])#列表被看作一个单一项>>>r[1,2.0,3,5,'thing',['another','list']]>>>r=[1,2.0,3,5]>>>r.extend(['item','another'])#列表的项逐次添加>>>r[1,2.0,3,5,'item','another']>>>k=r.pop()#移除最后一项>>>k'another'>>>r[1,2.0,3,5,'item']方法'append'和'pop'可用于实现栈列表的方法使用内建的'sort'方法:高效排序是内部进行的,不产生新表!>>>r=[2,5,-1,0,20]>>>r.sort()>>>r[-1,0,2,5,20]>>>w=['apa','1','2','1234']>>>w.sort()#字符串:使用ASCII顺序>>>w['1','1234','2','apa']>>>w.reverse()#反转字符串!>>>w['apa','2','1234','1']>>>v=w[:]#首先生成新表>>>v.reverse()#反转这份拷贝>>>v#使用sort['1','1234','2','apa']>>>w['apa','2','1234','1']转字符串为列表'split'对于简单的分解分析很有用否则要用正则表达式模块're';>>>s='biovitrum'#生成字符串>>>w=list(s)#转为字符的列表>>>w['b','i','o','v','i','t','r','u','m']>>>w.reverse()>>>w['m','u','r','t','i','v','o','i','b']>>>r=''.join(w)#使用空串的join方法>>>r'murtivoib'>>>d='-'.join(w)#使用字符-的join方法>>>d'm-u-r-t-i-v-o-i-b'>>>s='afewwords'>>>w=s.split()#基于白空格切分(空格,新行)>>>w['a','few','words']>>>'|'.join(w)#对其他串用方法'join''a|few|words'元组Tuple和表list一样,除了不可变一旦生成,就不可改变某些函数会返回元组>>>t=(1,3,2)>>>t[1]#由下标访问,偏移量03>>>(a,b,c)=t#元组赋值>>>a1>>>b3>>>a,b,c#一个实际上的元组表达式!(1,3,2)>>>a,b=b,a#交换值的技巧>>>a,b(3,1)>>>r=list(t)#转换元组为表>>>r[1,3,2]>>>tuple(r)#转为表为元组(1,3,2)字典Dictionary关键字/值对的无序序列每个关键字映射到一个值也称为映射“mapping”,哈希表“hashtable”或查找表"lookuptable">>>h={'key':12,'nyckel':'word'}>>>h[‘key’]#由关键字访问12>>>h.has_key('nyckel')#(仅用于2.x版本)True>>>h['Per']='Kraulis'#增加一个关键字/值>>>h{'nyckel':'word','Per':'Kraulis','key':12}#输出顺序是随机的>>>h['Per']='Johansson'#替换值>>>h{'nyckel':'word','Per':'Johansson','key':12}关键字通常是一个整数或一个字符串必须是不可变对象可以是任何可hash的对象任何关键字在一个字典中只能出现一次!值可以是任何对象可以出现多次差点忘了:'del'使用命令'del'销毁数据命令!不是函数!实际上移除变量(名字),不是对象>>>a='thing'#定义一个变量>>>a'thing'>>>dela#把这个变量忘掉>>>aTraceback(mostrecentcalllast):File"<pyshell#182>",line1,in-toplevel-aNameError:name'a'isnotdefined>>>h={'key':12,'nyckel':'word'}>>>delh['key']#移除关键字和它的值>>>h{'nyckel':'word'}>>>r=[1,3,2]>>>delr[1]#另一个删除表项的方式>>>r[1,2]字典方法>>>h={'key':12,'nyckel':'word'}>>>'Per'inh#测试是否一个关键字在字典中False>>>h['Per']Traceback(mostrecentcalllast):File"<pyshell#192>",line1,in-toplevel-h['Per']KeyError:'Per'>>>len(h)#字典中的关键字的数量2>>>h.keys()#所有的关键字在无序的表中['nyckel','key']>>>h.values()#所有的值在无序的表中['word',12]>>>h.get('Per','unknown')#返回值,或者返回缺省值'unknown'>>>h.get('key','unknown')12字典方法>>>h['Per']='Johansson'>>>h{'nyckel':'word','Per':'Johansson'}>>>h.update(g)#根据g添加或者更新所有的关键字/值>>>h{'nyckel':'word','key':12,'Per':'Johansson'}>>>g=h.copy()#字典的一个单独拷贝>>>delh['key']>>>h{'nyckel':'word'}>>>g{'nyckel':'word','key':12}6.4程序的流程控制结构在IDLE中编写脚本现在我们要编写合适的脚本并保存到文件中在IDLE中:'File''NewWindow'直接点击'Saveas…'打开目录'Desktop'创建一个文件夹'Pythoncourse'进入这个文件夹输入文件名't1.py'保存在这个叫't1.py'的窗口中输入下述代码:保存这个文件:Ctrl-S,或者进入菜单'File','Save'运行这个脚本:按F5,或者进入菜单'Run','RunModule'""#这是文档字符串print("Helloworld!“)'if'语句;块结构Python的一个让人又爱又恨的特性就是块结构块结构由缩进确定编辑一个新的文件't2.py'在窗口't1.py'中点击'File','NewWindow',之后'SaveAs…应用'if'命令:注意IDLE编辑器会自动帮助添加缩进运行脚本(F5)""person='Luke'ifperson=='Per':status='Pythonist'elifperson=='Luke':status='Jediknight'else:status='unknown'print(person,status)字典Dictionary比if…elif…更好特别地,对于那些硬编码的选择(elif's)…更紧凑,更高效这个模式非常有用""status_map={'Luke':'JediKnight','Per':'Pythonist'}person='Luke'print(person,status_map.get(person,'unknown'))内嵌类型与它们的布尔解释True-1True124True![False]False[]listTrue{'key':'val'}False{}dictTrue!"False"False""strFalse0.0floatFalse0int所有内嵌类型可以直接在'if'命令中使用数字0对应False其他数都对应True空对象(str,list,dict)对应False其它有值的对象对应True使用函数'bool'来获取显示的值'for'语句对一个块语句的重复执行对一个序列进行迭代遍历(list,tuple,string,iterator)""s=0foriin[0,1,2,3,4,5,6,7,8]:#遍历列表中的值,赋给is=s+iifs>10:break#结束'for'循环print("i=%i,s=%i"%(i,s))""r=[]forcin‘thisisastringwithblanks’:#一个字符一个字符地遍历字符串ifc=='':continue#跳过后面的代码块,继续循环r.append(c)print(''.join(r))'while'语句对一个块语句的重复不断循环执行,直到判断变成false或者出现'break'""r=[]n=0last=20whilen<=last:#任何具有布尔值的表达式r.append(str(n))n+=3print(','.join(r))循环中可选的'else'区块如果没有遇到'break'则执行'else'区块经常用来取代success/failure标记对'for'与'while'循环都适用""r=[1,3,10,98,-2,48]foriinr:ifi<0:print('inputcontainsnegativevalue!')break#跳出整个循环,包括'else'else:pass#什么都不做else:#如果循环是正常结束的则执行print('inputisOK')'pass'语句什么都不做可以看做是一个对于不想写代码区块的占位符在一些情况中是有用的异常处理:'try'与'except'程序运行中的错误经常会导致执行失败错误信息能报告出错类型使用'try','except'来捕获并处理异常""numbers=[]not_numbers=[]forsin['12','-4.1','1.0e2','e3']:try:n=float(s)numbers.append(s)exceptValueError:not_numbers.append(s)print('numbers:',numbers)print('notnumbers:',not_numbers)numbers:['12','-4.1','1.0e2']notnumbers:['e3']函数函数参数:固定参数、可变参数参数数量固定与顺序相关""deffixed_args(a,c,b):#注意!:参数的顺序
"Formatargumentsintoastringandreturn."#文档字符串
return"a=%s,b=%s,c=%s"%(a,b,c)#'%s'替换成字符串print(fixed_args('stuff',1.2,[2,1]))可以有任意数量个参数当所需参数数量未知时十分有用参数会保存在一个元组tuple中按照习惯,命名为'args''*'是用来区分的标记""defunspec_args(a,*args):#一般约定写成'args'return"a=%s,others=%s"%(a,args)print(unspec_args('bla','qwe',23,False))a=bla,others=('qwe',23,False)函数参数:默认值参数可以有默认值当调用时没有给定参数,会采用默认值如果既没有默认值,调用时也没有给出参数,那么崩溃显式调用参数,改变参数顺序""defdefault_args(a,b='bar',c=13):return"a=%s,b=%s,c=%s"%(a,b,c)print(default_args('apa'))#全部使用默认值print(default_args('s',b='py'))#重载一个默认值print(default_args(c=-26,a='apa'))#重载参数顺序a=apa,b=bar,c=13a=s,b=py,c=13a=apa,b=bar,c=-26函数参数:关键字关键字/值参数参数会被保存进字典dictionary习惯命名成'kwargs''**'是用来区分的标记首先尝试匹配已有的参数名称""defkeyword_args(a,b='bla',**kwargs):return"a=%s,b=%s,kwargs=%s"%(a,b,str(kwargs))print(keyword_args('stuff',c='call'))print(keyword_args('stuff',c='call',b='apa'))print(keyword_args(c='call',d=12,a='gr'))a=stuff,b=bla,kwargs={'c':'call'}a=stuff,b=apa,kwargs={'c':'call'}a=gr,b=bla,kwargs={'c':'call','d':12}函数参数:显式变量类型检查使用'assert'命令检查布尔表达式是否为真,否则就是异常可以在代码中任一点使用用于健壮性测试可选择性添加错误提示信息""deffixed_args(a,c,b):asserttype(a)==type(1),"'a'mustbeaninteger"return"a=%s,b=%s,c=%s"%(a,b,c)print(fixed_args('a',1.2,[2,1]))Traceback(mostrecentcalllast):File"C:\Pythontests\t15.py",line8,in-toplevel-printfixed_args('a',1.2,[2,1])File"C:\Pythontests\t15.py",line5,infixed_argsasserttype(a)==type(1),"'a'mustbeaninteger"AssertionError:'a'mustbeaninteger函数参数:局部变量参数为局部变量不可变变量的值通过复制赋值可变变量的值依然可被改变:但是要小心
在'def'区块内定义的变量都是局部变量先无视return""deftest_local(a,r):print('localoriginal',a,r)a=12r[1]=999print('localchanged',a,r)a=-5r=[0,1,2]print('globaloriginal',a,r)test_local(a,r)print('globalchanged',a,r)globaloriginal-5[0,1,2]localoriginal-5[0,1,2]localchanged12[0,999,2]globalchanged-5[0,999,2]没有'return'的函数:None值一个函数不一定要有'return'命令如果没有,则与其他编程语言中的'procedure'功能一样实际上函数默认总是会返回一个值:'None'一个没有值的'return'完全是可以的:returns'None''None'是一个特殊的值,意味着'什么都没有'在很多环境下很有用尤其是在面向对象的编程的问题中""defconcat_strings(a,b):str_type=type('')#保存类型的值!iftype(a)==str_typeandtype(b)==str_type:returna+''+bprint('strings:',concat_strings('first','second'))print('integers:',concat_strings(1,2))strings:firstsecondintegers:None
'math'模块:函数与常数模块使用一瞥数学函数在一个单独的模块中""frommathimport*#加载模块'math'中的所有函数print(e,pi)print(cos(radians(180.0)))print(log(10.0))print(exp(-1.0))2.70453.1493-1.02.30460.36787944117144233函数是对象,函数名是引用函数只是另一种对象罢了函数名没什么特别的:可以被改变""frommathimport*defprint_calc(f):print("log(%s)=%s,exp(%s)=%s"%(f,log(f),f,exp(f)))print_calc(1.0)log,exp=exp,log#不良代码!交换对象的名称与引用print_calc(1.0)log(1.0)=0.0,exp(1.0)=2.7045log(1.0)=2.7045,exp(1.0)=0.0一个函数可以作为任意参数传递给另一个函数一个函数可以被赋值给一个变量内嵌函数‘map’、'filter'map是一个操作列表的内嵌函数map需要一个函数与一个列表作为参数这个函数限定为只有一个参数输入,一个返回输出这个函数要依次作用到这个列表上的每一个元素转换结果作为一个列表返回>>>frommathimport*>>>r=[0,1,2,3,4,5,6]>>>list(map(cos,r))[1.0,0.543977,-0.41614683654714241,-0.98999249660044542,-0.65364362086361194,0.28366218546322625,0.966597]>>>r=[0,1,2,3,4,5,6]>>>deflarge(x):returnx>3>>>print(list(filter(large,r)))[4,5,6]filter也是一个操作列表的内嵌函数filter需要一个函数与一个列表它用这个函数来决定哪个项应该被放入过滤结果队列中遍历列表中的每一个值,输入到这个函数中如果这个函数返回True,那么值就放到过滤结果队列中如果这个函数返回False,那么这个值就会被跳过文件操作:读一个文件操作对象由内嵌函数open创建文件对象有一系列函数read函数可以从文件中获取数据队列read:读取整个文件(或者说N字节),返回一个单独的字符串readline:读取一行(然后跳到新的一行)readlines:读取所有的行,返回一个字符串的列表>>>f=open('test.txt')#默认:只读模式>>>line=f.readline()#读一行>>>line'Thisisthefirstline.\n'>>>lines=f.readlines()#读所有剩余行>>>lines['Thisisthesecond.\n','Andthird.\n']有些模块定义的对象类似文件,这些对象具有的方法也让它们表现得像文件一样文件操作:写write函数只是简单地输出给定的字符串字符串不一定是ASCII码,二进制串也是可以的>>>w=open('output.txt','w')#写模式(默认写的是文本)>>>w.write('stuff')#并不自动添加新行>>>w.write('\n')>>>w.write('more\nandevenmore\n')>>>w.close()stuffmoreandevenmore文件操作:用'for'循环读取迭代使用for循环一行行读取文件推荐用法""infile=open('test.txt')#只读模式outfile=open('test_upper.txt','w')#写模式;创建文件forlineininfile:out(line.upper())in()#并不严格要求;系统会自动执行out()注意:每行结尾会尾随一个换行符'\n'使用字符串方法strip或者rstrip来去除它文件操作,老式的读取策略老版本的Python不支持这种特性'forlineinfile'相应地,过去要使用下面这种操作:forlineinin():#把整个文件按行读进一个行的列表中do_something(line)forlineinin():#类似xrange:内存使用更高效do_something(line)line=in()whileline:#只有当读到文件结束时line才是空的do_something(line)line=in()最后一个方案可行是因为'readline'返回的line自动包含一个”\n”换行符只有当读到文件结束时,readline才会返回一个空行,该行的布尔值'False'标准库模块模块're',part1正则表达式:正则表达式就是记录文本规则的代码,是高级字符串模式定义一个模式:定义模式的语法与Perl或者grep的很相似把它应用到一个字符串上处理结果""importretext="Hi,IamShirleyHilton.Iamhiswife."m=re.findall("hi",text)ifm:print(m)else:print('notmatch')['hi','hi']把正则表达式改为“[Hh]i”,结果为:['Hi','hi','Hi','hi']把正则表达式改为“i.”,结果为:['i,','ir','il','is','if']把正则表达式改为“I.*e”,结果为:['IamShirleyHilton.Iamhiswife']把正则表达式改为“I.*?e”,结果为:['IamShirle','Iamhiswife']如果你不觉得正则表达式很难读写的话,要么你是一个天才,要么,你不是地球人。模块'sys'sy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 感统器材列表
- 中职教育二年级上学期装备制造大类《研磨加工六面体》教学课件
- 小学六年级下学期音乐《小纸船的梦》教学课件
- 红色文化融入高职院校思政课教学的优化路径
- 安徽阜南县黄岗柳编种植产业化网络创业方案
- 校团委基层组织建设工作总结
- 动车组地勤机械师 (动力分散型)职业资格鉴定理论考试题库-上(单选题)
- 2024年全国职业院校技能大赛高职组(智能节水系统设计与安装赛项)考试题库-下(多选、判断题)
- 校学生会期末工作感想
- 人教版九年级数学下册投影与视图《课题学习 制作立体模型》示范教学课件
- 2024年安全员-C证理论考试1000题(附答案)
- 黄金珠宝采购协议规范(2024版)
- 2023年全国职业院校技能大赛-商务数据分析赛项规程
- 大学生心理健康教育(第二版)PPT全套完整教学课件
- “基础教育精品课”PPT课件模板
- 部编版五年级上册第一单元集体备课
- 经纬度数转换工具
- 厂区道路设计说明1
- 性与心理健康ppt课件.ppt
- 细胞工程:2植物人工繁殖
- 铣刨机租赁合同模版
评论
0/150
提交评论