版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章Python语言概述CCBY-NC-SA4.0嵩天学习目标了解程序设计与程序设计语言的相关概念;了解Python语言的发展和特点;了解Python语言的开发环境与代码执行过程;理解Python的语言元素和语法规范;理解IPO模式和基本输入/输出函数。1.1程序设计语言CCBY-NC-SA4.0嵩天1.1.1程序设计语言的概念专门与计算机进行交流的语言程序就是用于指挥计算机进行各种动作,使计算机完成指定任务的指令序列机器语言汇编语言高级语言1.1.2算法概述算法一般具有特征:有穷性,确定性,可行性,输入,输出算法的主要表示方法:自然语言流程图伪代码算法示例例1-1
设计一个算法,输出20以内的所有质数并统计数量。【问题解答】(1)质数判定算法输入:整数n。输出:是或否。算法:对2~n-1之间的每一个整数i,从小到大依次执行如下操作:如果n可以被i整除,直接输出“否”。如果直到i增加到n-1时仍然无法整除n,则输出“是”。(2)最终算法输入:无。输出:所有的质数及质数数量。算法:设定一个计数器,用它来记录总数,并将其初值设置为0。例如,对于2~20之间的每一个数n,调用质数判定算法,如果n是质数,则输出n,同时计数器加1。最后,输出计数器的值。算法示例例1-2
设计一个算法,给定两个正整数,输出其最大公约数。【问题解答】#伪代码{
输入两个正整数m,n
如果m<n,则min=m,否则min=n
i初始值设置为min,依次减1,终止值为1,执行下列子代码段{
如果m和n能同时被i整除,则输出i后程序终止}}1.1.3程序设计的基本步骤确定数学模型(或数据结构)描述算法编写、调试程序测试程序1.1.4编译与解释高级语言可以分为静态语言和脚本语言两类编译是将源代码转换成目标代码的过程解释是将源代码逐条转换成目标代码,同时逐条执行目标代码的过程Python语言编写的程序就是采用解释方式执行的1.2Python程序设计语言CCBY-NC-SA4.0嵩天1.2.1Python的历史Python语言由荷兰人吉多·范罗苏姆(GuidovanRossum)设计并领导开发而成Python解释器的全部代码都是开源的Python形成了Python2.x和Python3.x两个版本,彼此之间不兼容本书的程序是基于Python3.5版本1.2.2Python的特点简单易学源码开放跨平台性可扩展性应用于各种领域1.3Python程序的运行CCBY-NC-SA4.0嵩天1.3.1Python程序的运行原理解释器将源代码翻译成字节码(即中间码),然后由虚拟机解释执行1.3.2Python的开发环境下载和安装PythonIDLE(Python3.564-bit):启动Python自带的集成开发环境IDLE。Python3.5(64-bit):以命令行的方式启动Python解释器。Python3.5Manuals(64-bit):打开Python的帮助文件。Python3.5ModuleDocs(64-bit):以内置服务器方式打开Python模块帮助文件。PyCharm1.3.3Python程序的建立和运行交互方式文件方式1.4Python程序的语言要素CCBY-NC-SA4.0嵩天1.4.1Python基本语法元素常量:值一直保持固定不变变量:值是可以发生变化运算符:对数据进行操作的符号表达式:常量或变量用运算符连接起来构成的合法式子函数:相对独立的单元,完成一定的功能语句:由常量、变量、函数调用、表达式等构成类与对象模块与包1.4.2Python关键字与标识符关键字调用代码importkeywordprint(keyword.kwlist)运行结果如下:['False','None','True','and','as','assert','break','class','continue','def','del','elif','else','except','finally','for','from','global','if','import','in','is','lambda','nonlocal','not','or','pass','raise','return','try','while','with','yield']1.4.2Python关键字与标识符标识符命名规则如下由包含下画线、字母字符、数字字符或Unicode字符(如汉字字符)等的字符组成。英文字母大小写敏感。必须以下画线或者字母字符开头。不能是关键字。1.4.3Python程序语法规范命名规范:下画线开头的变量在Python中有特殊含义,自定义变量时也要尽量避免使用。前后有下画线的变量名通常为系统变量,例如:_name_、_doc_等。以下画线开头的变量(如_abc)不能被from…import*语句从模块中导入。以双下画线开头、末尾无下画线的变量(如__abc)是类的私有变量。以双下画线开头和结尾的变量是专用标识名,例如,__init___()表示构造函数。Python程序语法规范缩进规范:采用代码缩进和冒号“:”1>>>defmul(a,*b):#b为可变参数2print(type(b))#b数据类型为元组3foriinb:4a*=i#a与b中数据累乘,结果存储于a中5returnaPython程序语法规范注释规范:单行注释方式#Sum(a,b,c)函数的定义print("和为:",Sum(a,b,c))#调用该函数注释规范:多行注释方式"""函数功能:注册用户开发者:韩梅梅版权所有:计算机与信息学院开发时间:2021-4版本号:2.0"""Python程序语法规范编码规范:采用代码缩进和冒号“:”长语句行:每行不要超过80个字符str=("不负韶华,只争朝夕。""不忘初心,砥砺前行。")print(str)括号:不使用不必要的括号空行空格模块导入1.5Python编程入门CCBY-NC-SA4.0嵩天1.5.1IPO模式程序的数据处理过程模式,即数据输入、数据处理和数据输出,被称为IPO模式输入(I)是一个程序的开始处理(P)是程序对输入数据进行计算并产生输出结果的过程输出(O)是程序展示运算结果的方式1.5.2基本输入/输出函数input()函数:获取键盘输入数据一般格式为:variable=input([提示字符串])print()函数:将待输出数据输出到屏幕一般格式为:print(<输出值1>[,<输出值2>,…,<输出值n>,sep='间隔字符',end='结束字符'])eval()函数:可以执行一个字符串表达式,返回表达式的值一般格式为:variable=eval([输入字符串])1.5.3编写Python程序可以分为分析、设计、实现、测试、运行等阶段自顶向下、逐步求精和模块化设计程序总是顺序结构、选择结构和循环结构组成编写Python程序例1-3
根据输入的圆半径,圆周率取常量3.14,计算并输出圆的周长和面积。样例输入:1.8样例输出:半径为1.8的圆面积是10.1736,周长是11.304。【问题分析】本题完全符合IPO编程模式。首先需要从键盘上获取半径数据,并将其转换成对应的实数存储在变量中,然后进行圆的面积和周长的计算,将结果分别保存在另外两个变量中,最后按照要求的格式,设计好输出的字符串。【问题解答】#计算圆的面积和周长PI=3.14r=float(input())area=PI*r*rperimeter=2*PI*rprint("半径为{}的圆面积是{},周长是{}。".format(r,area,perimeter))本章小结CCBY-NC-SA4.0嵩天本章小结介绍程序设计语言的一些基本概念阐明了程序设计的基本步骤介绍了Python语言的特点和应用领域介绍了Python语言的基本语法规范讲解如何使用Python语言编写程序第2章Python数据类型CCBY-NC-SA4.0嵩天学习目标理解Python的基本数据类型有哪些;理解数值类型的含义及数值类型数据的基本操作方法;理解字符串类型的含义及字符串类型数据的基本操作方法;学习应用字符串类型数据解决实际问题的方法。
2.1数值类型CCBY-NC-SA4.0嵩天2.1.1数值类型的种类整数类型:简称整型,用于表示整数十六进制:开头是0X或0x八进制:开头是0O或0o二进制:开头是0B或0b>>>3+47>>>(0x3F2+1010)/0o17622.0数值类型的种类浮点型浮点型(float),用于表示实数可以用科学记数法表示复数类型复数类型(Complex),用于表示复数一个复数至少有虚部,如1j、-1j、0j、0.0j布尔型布尔型(bool)即逻辑型,用于表示逻辑判断的结果2.1.2数值运算基本运算操作符及运算描述X+YX与Y的和X-YX与Y的差X*YX与Y的积X/YX与Y的商结果为浮点数X//YX÷Y的整数部分X%YX除以Y的余数-XX的负值+XX本身X**YX的Y次幂数值运算复合运算运算符含义举例等效语句+=加x+=y+5x=x+(y+5)-=减x-=y+5x=x-(y+5)*=乘x*=y+5x=x*(y+5)/=除x/=y+5x=x/(y+5)//=取整x//=y+5x=x//(y+5)%=求余x%=y+5x=x%(y+5)**=乘方x**=y+5x=x**(y+5)<<=左移x<<=yx=x<<y>>=右移x>>=yx=x>>y&=按位与x&=y+5x=x&(y+5)|=按位或x|=y+5x=x|(y+5)^=按位异或x^=y+5x=x^(y+5)数值运算数值运算函数函数描述abs(x)x的绝对值divmod(x,y)(x//y,x%y),输出为二元组形式(也称为元组类型)pow(x,y)或pow(x,y,z)x**y或(x**y)%z,幂运算round(x)或round(x,d)对x四舍五入,保留d位小数。无参数则返回x四舍五入的整数值max(x1,x2……xn)x1,x2……xn中的最大值。n没有限定,可以是任何数min(x1,x2……xn)x1,x2……xn中的最小值。n没有限定,可以是任何数
2.2字符串类型CCBY-NC-SA4.0嵩天2.2.1字符串的创建可以用单引号''或双引号""来创建利用三引号表示多行字符串转义字符表示的字符\''\''''\\\\n换行符\tTab键\b退格2.2.2作为序列操作字符串取字符串的某个字符或片段字符串中字符的位置是固定的,从前到后可对每个字符位置编号为0、1、2、……n-1,一般称之为下标,n为字符串的长度。下标也可以从后往前编号为-1,-2,……-n。通过“字符串名[下标]”的形式可以取得某个字符,下标的范围不能大于n-1,不能小于-n>>>s='abcdef'>>>s[0]作为序列操作字符串两个字符串的连接连接两个字符串用加号即可,例如:>>>s1='abc'>>>s2='123'>>>s1+s2字符串的重复生成使用星号(*)生成。例如:>>>s1='Hi!'*2>>>s1'Hi!Hi!'作为序列操作字符串字符串之间比较大小字符串之间可以用“<”、“<=”、“>”、“>=”,“==”、“!=”比较大小,结果是逻辑值True或False>>>s1="abc">>>s2='abxz'>>>sl>s2False判断某个字符串是当前字符串的子串使用in或notin可以判断某个字符串是否为当前字符串的子串>>>s='abc123'>>>'bc12'insTrue作为序列操作字符串求字符串的长度、最大元素和最小元素使用len()函数,max()函数,min()函数>>>s3='欢迎Jack来中国!'>>>len(s3)10遍历字符串中每个元素可以用for循环依次访问每个元素>>>s1='abc'>>>forchinal:print(ch)2.2.3字符串特有的操作数字与字符串的相互转换使用str()函数、int()函数、float()函数格式化生成字符串基本格式为:'目标字符串格式'(数据1,数据2,……数据n)转换字符串格式表示的含义%[m]s将字符串写入宽为m的字符串%[m]d将整数写入宽为m的字符串%[m.n]f将实数写入宽为m的字符串(实数保留n位小数)%[.n]e将实数按科学计数法写入字符串(实数保留n位小数)%%将一个百分号写入字符串2.2.4字符串本身的函数子串查找与替换函数str.find(sub)str.rfind(sub)str.replace(old,new)查找子串位置函数index()函数统计元素出现次数count()函数字符串本身的函数裁掉特定字符的函数lstrip()、rstrip()和strip()分割字符串成若干子串str.split(sep)字符串大小写相关函数str.lower():将str所有字符转换为小写字符str.upper():将str所有字符转换为大写字符str.swapcase():将str所有字符大小写互换字符str.capitalize():将str的首字母大写字符str.islower():str.isupper():2.2.5format()方法的基本使用语法格式如下<模板字符串>.format(<逗号分隔的参数>)例如:>>>"{}曰:学而时习之,不亦说乎。".format("孔子")'孔子曰:学而时习之,不亦说乎。'>>>"{1}日:学而时习之,不亦{0}。".format("说乎","孔子")'孔子日:学而时习之,不亦说乎。'2.2.6format()方法的格式控制语法格式为:{<参数序号>:<格式控制标记>}:<填充><对齐><宽度><,><精度><类型>引导符号用于填充的单个字符<左对齐;>右对齐;^居中对齐当前槽的输出字符宽度数字的千位分隔符,适用于整数和浮点数浮点数小数部分的精度或字符串的最大输出长度整数类型包含b、c,d、o、x、X;浮点数类型包含e、E、f、%
2.3实例解析1:中英文分离CCBY-NC-SA4.0嵩天2.3实例解析1:中英文分离例2-1已知一个字符串包含许多组英文单词和中文解释,英文与中文交错排列。请将中文与英文分开,并将中文连接后输出、将英文连接后输出,且要求词汇之间以空格分隔。
2.4实例解析2:最长公共子串求解CCBY-NC-SA4.0嵩天2.4实例解析2:最长公共子串求解例2-2输入两个字符串,求两个字符串共有的最长子串。子串是原字符串中一段连续的字符。本章小结CCBY-NC-SA4.0嵩天本章小结讲解了计算机中常用的数值类型及操作字符串类型及格式化、字符串操作符、字符串处理函数和字符串处理方法等类型判断和类型转换的基本方法讲解来帮助读者加深对数值类型和字符串类型操作的实例第3章程序控制结构CCBY-NC-SA4.0嵩天学习目标掌握程序的分支结构编程方法;掌握程序的循环结构编程方法;掌握break和continue在循环控制中的使用;了解程序的异常处理:try...except。
3.1程序控制结构概述CCBY-NC-SA4.0嵩天3.1.1程序流程图程序流程图中包括6种基本元素名称流程图中的元素说明起止框表示程序逻辑的开始或结束判断框表示判断条件,依据判断结果选择不同的执行路径处理框表示一组处理过程输入/输出框表示数据的输入或输出流向线表示程序的控制流程连接点表示连接方式3.1.2程序的3种基本控制结构及其扩展顺序结构分支结构循环结构
3.2顺序结构CCBY-NC-SA4.0嵩天顺序结构例
输入一个3位数,并交换其个位与十位的值,输出新的3位数。【问题解答】x=input('请输入一个3位数:')#变量x用以存放输入的3位数字符串b,s,g=x[0],x[1],x[2]#分离x的百位、十位与个位s,g=g,s#交换十位与个位的值y=b+s+g#得到新的三位数yprint(y)#输出y
3.3分支结构CCBY-NC-SA4.0嵩天3.3.1判断条件及其组合关系运算符及其含义关系运算符运算符含义<
小于<=小于或等于>
大于>=大于或等于==等于!=不等于判断条件及其组合逻辑运算符及其含义逻辑运算符逻辑表达式运算符含义notnotx“非”运算符为单目运算符。若x为True则运算结果为False;若x为False则结果为Trueandxandy“与”运算符为双目运算符。若x与y同时为True则运算结果为True,否则运算结果为Falseorxory“或”运算符为双目运算符。若x与y同时为False则运算结果为False,否则运算结果为True3.3.2单分支结构Python的单分支结构使用if关键字,其语法格式如下。if条件:
语句块单分支结构例3-4
某考试规定成绩超过70分为合格,否则就是不合格。现要求输入某学生的成绩,输出该成绩是否合格。【问题解答】score=eval(input('请输入成绩:'))result='合格'ifscore<=70:result='不合格'print('考试结果:{}'.format(result))单分支结构例3-5
判断一个3位数的正序或逆序是否为7的倍数。【问题解答】x=input('请输入一个3位数:')iflen(x)==3:y=x[::-1]x=eval(x)y=eval(y)r='不'ifx%7==0ory%7==0:r=''print('{}或{}{}是7的倍数'.format(x,y,r))3.3.3双分支结构Python的双分支结构使用if、else关键字,其语法格式如下。if条件:
语句块1else:
语句块2双分支结构例3-6
现提供3条边的边长,请判断这3条边能否构成一个三角形。【问题解答】a1,a2,a3=eval(input('请输入3条边长:'))ifa1+a2>a3anda1+a3>a2anda2+a3>a1:print('这3条边可以构成一个三角形')else:print('这3条边无法构成一个三角形')
双分支结构例3-7
对例3-6进行修改。【问题解答】a1,a2,a3=eval(input('请输入3条边长:'))s='可以'ifa1+a2>a3anda1+a3>a2anda2+a3>a1else'无法'print('这3条边{}构成一个三角形'.format(s))3.3.4多分支结构多分支结构使用if、elif与else关键字,其语法格式如下。if条件1:
语句块1elif条件2:
语句块2...else:
语句块n多分支结构例3-8
输入一个人的体重(kg)与身高(m),计算BMI指数,公式如下:BMI指数与体型的关系:
BMI指数体型≤18.4偏瘦>18.4且<24正常≥24且<28过重≥28肥胖3.3.5异常处理语法格式如下。try:
语句块1except:
语句块2例3-9
对输入的整数判断奇偶性,如果输入不符合要求会产生错误(即引起异常),则显示“输入错误!”。异常处理例3-10
输入两个整数后,要求输出这两个整数的商且该商大于或等于1。【问题解答】try:x=int(input('请输入一个整数:'))y=int(input('请输入一个整数:))ifx<y:x,y=y,xz=x/yprint('{}/{}={}'.format(x,y,z))exceptZeroDivisionError:print('除数为0的错误!')exceptValueError:print('输入错误')异常处理例3-11
输入4位整数,输出百位与个位上数相加的和。【问题解答】try:s=input('请输入4位整数:')x=int(s)if(x>9999):print('超出4位数!')else:d1=s[1]d2=s[3]m=int(d1)+int(d2)print('{}+{}={}'.format(d1,d2,m))exceptValueError:print('输入错误!')except:print('某种原因出错了!')
3.4循环结构CCBY-NC-SA4.0嵩天3.4.1遍历循环语法格式如下。for循环变量in遍历结构:
语句块其中,遍历结构可以是range()函数、字符串或文件等可迭代的对象。遍历循环
遍历循环例3-13
对用户输入的文本内容统计元音字母(“a”“i”“o”“e”“u”)出现的总次数。【问题解答】text=input("请输入一段英文:")n=0forcintext:ifcin"aeiou":n+=1print("元音字母个数为:{}".format(n))遍历循环例3-14
用户从键盘上输入拟定的密码字符串,程序负责检查该密码字符串是否由大写字母、小写字母、数字和其它字符构成,如果是则输出“密码强度强”,否则输出“密码强度不够,请重设”。【问题解答】pwd=input("请输入拟定的密码:")uppercnt,lowercnt,numcnt,othercnt=0,0,0,0foriinpwd:if'A'<=i<='Z':uppercnt+=1elif'a'<=i<='z':lowercnt+=1elif'0'<=i<='9':numcnt+=1else:othercnt+=1ifuppercnt>0andlowercnt>0andnumcnt>0andothercnt>0:print("密码强度强")else:print("密码强度不够,请重设")3.4.2无限循环语法格式如下。while条件:
语句块其中,条件是一个表达式,它可以是算术表达式、关系表达式,也可以是逻辑运算表达式,甚至可以是常量。无限循环例3-15
由键盘输入两个正整数x与y,计算x与y的最大公约数并输出。【问题解答】x,y=eval(input())r=x%ym,n=x,y#保存初始时x与y的值whiler!=0:x,y=y,rr=x%yprint("{}与{}的最大公约数为:{}".format(m,n,y))无限循环例3-16
用户输入一组数,输入“#”表示输入结束,计算这组数的和并输出。【问题解答】print("请输入一组数,以#结束")x=input()s=0whilex!='#':s=s+int(x)#int(x)是将字符串x转换为整数x=input()print("和为:{}".format(s))3.4.3循环控制使用关键字break或continue完成相应的循环控制例3-17
用户输入整数x,判断x是否为素数。素数就是只能被1和自身整除的数。x=int(input())ifx<2:print("非素数")else:flag=True#flag为True则表示x是素数,否则不是foriinrange(2,int(x**0.5)+1):ifx%i==0:flag=Falseprint("非素数")breakifflag:print("素数")循环控制例3-18
用户输入文本text,若输入“#”则程序结束,否则显示文本text中首个元音字母前的字符。【问题解答】alph="aeiou"whileTrue:text=input()iftext=='#':breakforcintext:ifcinalph:breakprint(c,end='')print()循环控制例3-19
用户输入文本text,若输入“#”则程序结束,否则显示文本text中所有非元音字母的字符。【问题解答】alph="aeiou"whileTrue:text=input()iftext=='#':breakforcintext:ifcinalph:continueprint(c,end='')print()
3.5实例解析:猜拳游戏CCBY-NC-SA4.0嵩天3.5实例解析:猜拳游戏编一个程序,与计算机玩一次猜拳游戏fromrandomimportrandintx=randint(1,3)≤a=int(input("请输入数字(1-石头,2-剪刀,3-布):"))
ifa<1ora>3:print("输入非法")else:print("计算机出拳:{},你出拳:{}".format(x,a))ifa==x:print("平局!")elif(a==1andx==2)or(a==2andx==3)or(a==3andx==1):print("本局你赢了!")else:print("本局计算机赢了!")本章小结CCBY-NC-SA4.0嵩天本章小结介绍了程序的3种基本控制结构分支结构包括单分支结构、双分支结构和多分支结构循环结构主要包括遍历循环和无限循环介绍了控制结构的扩展:异常处理try...except和循环控制语句break与continue实例猜拳游戏第4章函数CCBY-NC-SA4.0嵩天学习目标了解程序模块化设计思想;理解函数的概念并掌握函数的基本使用;理解函数的几种参数传递方式;理解变量的作用域和函数的返回值;了解lambda函数;理解函数递归的定义及使用方法。
4.1函数概述CCBY-NC-SA4.0嵩天4.1.1模块化程序设计模块化程序设计的基本思想是自顶向下、逐步分解、分而治之紧耦合:尽可能合理划分功能块,功能块内部耦合紧密。松耦合:模块间关系尽可能简单,功能块之间耦合度低。函数是迈向模块化程序设计过程的重要一步。4.1.2函数的基本概念函数是可以实现某个特定功能的小程序块Python中的函数包括内置函数、标准库函数、第三方库函数和用户自定义函数Python库可以分为标准库和第三方库,这两种库内的函数称为标准库函数和第三方库函数统称为库函数用户根据自己的要求自行定义函数
4.2函数的使用CCBY-NC-SA4.0嵩天4.2.1函数的定义语法格式如下。def<函数名>(<参数列表>):<函数体>return<返回值列表>函数定义的相关说明如下。(1)函数名可以是任何有效的Python标识符。(2)参数列表是调用该函数时传递给它的值,其可以有0个、一个或多个参数。(3)函数体采用缩进格式。(4)return语句是可选项函数的定义例4-1
编写函数判断用户输入的字符串首字符是否为数字字符。【问题解答】defisnum(s):if"0"<=s[0]<="9":returnTrueelse:returnFalse4.2.2函数的调用一般语法如下:<函数名>(<实际赋值参数列表>)函数调用的相关说明如下。(1)调用程序在调用处暂停执行,转向被调函数;(2)实参值按照一定的规则传递给形参;(3)执行函数体语句;(4)函数若有return语句则给出返回值并结束调用,函数调用结束后返回暂停处继续执行。函数的调用例4-2
编写求n!的函数。【问题解答】deffact(n):s=1foriinrange(1,n+1):s*=ireturns调用此阶乘函数,其运行结果如下:>>>fact(5)120函数的调用函数调用一般有如下几种形式。语句调用defhappy():print("Happynewyear!")#定义happy()函数happy()#语句调用该函数表达式调用defSum(a,b,c):returna+b+c#Sum(a,b,c)函数的定义a,b,c=eval(input("请输入3个数:"))print("和为:",Sum(a,b,c))#表达式调用该函数avg=Sum(a,b,c)/3#表达式调用该函数
4.3函数的参数与返回值CCBY-NC-SA4.0嵩天4.3.1函数的参数参数主要用于建立程序与函数之间的数据联系程序中使用的参数称为实际参数(简称实参),函数中与实际参数对应的参数称为形式参数(简称形参)实参默认是按照位置传递给形参还有参数名称传递、可选参数传递、可变参数传递等函数的参数参数名称传递语法格式如下。函数名(参数名1=值1,参数名2=值2,…)>>>defSub(x,y):returnx-y>>>print(Sub(y=8,x=10),Sub(8,10))函数的参数可选参数传递语法格式如下。def<函数名>(<非可选参数列表>,<可选参数>=<默认值>): <函数体> return<返回值列表>>>>defmul(a,b,c=2):#c为可选参数,其默认值为2 returna*b*c>>>print("S=",mul(1,2,3))#程序提供的实参3,所以c为3S=6>>>print("S=",mul(1,2))#程序没有提供实参,所以c采用默认值2S=4函数的参数可变参数传递语法格式如下。函数名(参数1,参数2,…,*参数)参数名前加*表示这个参数是元组,元素个数可以是0、1或多个。>>>defmul(a,*b):#b为可变参数
print(type(b))#b数据类型为元组foriinb:a*=i#a与b中数据累乘,结果存储于a中returna>>>mul(1,2,3)#调用函数时,a的值为1,b的值为(2,3)4.3.2函数的返回值函数运行结果是通过return语句来实现返回的。return语句是可选的,可以返回0个、一个或多个返回值函数的返回值无返回值的函数>>defmul(x,y):s=x*yreturn返回一个值的函数>>>defSub(x,y): returnx-y返回多个值的函数>>>deffunc(x,y): returnx-y,x+y,x*y
4.4变量的作用域CCBY-NC-SA4.0嵩天4.4变量的作用域变量的有效范围是指变量的作用域变量可以分为局部变量和全局变量局部变量是指在函数内部定义或创建的变量全局变量是指在函数之外定义的变量局部变量局部变量只能在函数内部被使用和访问,函数执行结束,函数内部的局部变量会被系统回收。>>>deffun(): a=100#在函数内部定义局部变量a print(a)>>>fun()#调用函数时局部变量a作用有效,输出a的值100>>>print(a)#退出函数时局部变量a消失,无效Traceback(mostrecentcalllast):File"<pyshell#3>",line1,in<module>print(a)NameError:name'a'isnotdefined全局变量全局变量可以被程序的任何部分访问和使用>>>a=100#定义全局变量a>>>deffun(): b=a+10#函数内使用全局变量a求和,然后给局部变量b赋值 print(a,b)>>>fun()#调用并运行函数时,全局变量a和局部变量b均有效100110>>>print(a)#函数外全局变量a有效100
4.5lambda函数CCBY-NC-SA4.0嵩天4.5lambda函数lambda保留字用于定义一种特殊的函数_匿名函数,又称lambda函数用于定义简单的、能够在一行内表示的函数,返回一个函数类型一般会用变量来接受该函数对象,此时变量相当于该函数的函数名语法格式如下。[<函数名>]=lambda<参数列表>:<表达式>
4.6函数的递归CCBY-NC-SA4.0嵩天4.6函数的递归递归就是一种直接或间接调用自身的函数调用方法递归需要具备的两个基本条件。(1)子问题须与原始问题为同样的事,且更为简单。(2)不能无限制地调用本身,其至少有一个出口(基例),且它是确定的表达式。例如,阶乘通常定义为:n!=n(n-1)(n-2)…1,因而可以用如下方式表示:
函数的递归例4-3用辗转相除法求两个正整数的最大公约数,要求用递归方法实现。【问题解答】deff(a,b):ifa%b==0:returnbelse:returnf(b,a%b)a,b=eval(input("请输入两个自然数:"))print(f(a,b))函数的递归例4-4
用递归方法实现斐波那契数列。【问题解答】deff(n):ifn==1orn==2:return1else:returnf(n-1)+f(n-2)foriinrange(1,9):print(f(i),end=",")#输出斐波那契数列的前8项
4.7实例解析:简易登录系统CCBY-NC-SA4.0嵩天4.7实例解析:简易登录系统利用函数设计模拟一个简易的用户注册和登录系统。本章小结CCBY-NC-SA4.0嵩天本章小结函数主要包括于内置函数、标准库函数、第三方库函数和用户自定义函数函数的使用主要包括函数定义和函数调用Python是利用def来定义函数调用函数需要进行实参与形参的传递函数的使用过程中也要理解变量作用域第5章组合数据类型CCBY-NC-SA4.0嵩天学习目标理解元组和集合数据类型的定义及操作函数与操作方法;理解列表数据类型的含义、定义及各种操作函数与操作方法;理解字典数据类型的含义及应用方法;理解组合数据类型的简单实际应用方法。
5.1组合数据类型概述CCBY-NC-SA4.0嵩天5.1组合数据类型概述组合数据类型可以分为3类,即序列类型、集合类型和映射类型序列类型序列类型使用索引标识每个元素的位置序列类型序列类型约有12个通用的操作符和函数操作符和函数描述xins如果x是s的元素,返回True,否者返回Falsexnotins如果x不是s的元素,返回True,否则返回Falses+t连接s和ts*n或n*s将序列s复制n次s[i]索引,返回序列的第i个元素s[i:j]切片,返回包含序列s第i~j个元素的子序列(不包含第j个元素)s[i:j:k]分片,返回包含序列s第i~j个元素以k为步数的子序列len(s)序列s的元素个数(长度)min(s)序列s中的最小元素max(s)序列s中的最大元素s.index(x)序列s中第一次出现的元素x的位置s.count(x)序列s中出现x的总次数
5.2元组类型CCBY-NC-SA4.0嵩天5.2.1元组的定义定义方式一变量=(元素1,元素2,元素3)定义方式二变量=元素1,元素2,元素3定义方式三变量=tuple(字符串)例如:>>>t=tuple("abcab") #将字符串转换为元组>>>t('a','b','c','a','b')5.2.2元组的索引和切片索引和切片操作举例如下。>>>t=(1,'23',[123,'abc'],('python','learn'))>>>t(1,'23',[123,'abc'],('python','learn'))>>>t[2][123,'abc']>>>t[1:]('23',[123,'abc'],('python','learn'))>>>t[2][0] #求这里的t[2][0]对应的元素123>>>t[3][1]'learn'5.2.3元组的应用不需要修改的数据也适合使用元组类型>>>a=(1,2,3,4,5)>>>foriina: #遍历元组a print(i,end="月")函数返回多个值以元组形式返回>>>deff(x,y): return"x+y=",x+y,"x-y=",x-y #返回元组类型>>>f(3.14,2.71)('x+y=',5.85,'x-y=',0.43000000000000016)5.3列表类型CCBY-NC-SA4.0嵩天5.3.1列表的定义是包含0个或多个元素的有序序列,没有长度限制,可自由增删元素,属于序列类型定义方式一变量=[元素1,元素2,元素3]定义方式二变量=list(参数)5.3.2列表的索引和切片索引用于获得列表的一个元素>>>a=['2',3,'abcde'] #定义一个列表>>>a[0]切片用于获得列表的一个片段<列表或列表变量>[N:M]>>>a=['2',3,'abcde'] #定义一个列表>>>a[1:] #列表的切片操作对列表进行的遍历操作for<循环变量>in<列表变量>:<语句块>5.3.3列表的操作符操作符描述xins如果x是是的元素,返回True,否者返回Falsexnotins如果x不是s的元素,返回True,否则返回Falses+t连接s和ts*n或n*s将序列s复制n次ls[i]=x替换列表ls第i数据项为xls[i:j]=lt用列表lt换列表ls中第i到第j项数据(不含第j项)ls+=lt将列表lt元素增加到列表ls中ls*=n更新列表ls,其元素重复n次5.3.4列表的操作函数列表的操作函数>>>lst=['Python','Java','C++']>>>len(lst)操作函数描述len(ls)计算并返回列表ls的元素个数,结果是整数max(ls)计算并返回列表ls的最大值,结果是一个元素;这里要求列表的元素可比较min(ls)计算并返回列表ls的最小值,结果是一个元素;这里要求列表的元素可比较list(x)将x转换为列表,结果是一个列表5.3.5列表的操作方法函数或方法描述ls.index(x)列表ls中第一次出现元素x的位置ls.count(x)列表ls中出现x的总次数ls.append(x)在列表ls最后增加一个元素xls.extend(lb)将列表lb的所有元素添加到ls的末尾ls.clear()删除ls中的所有元素ls.copy()生成一个新列表,复制ls中的所有元素ls.insert(i,x)在列表ls的第i位置增加元素xls.pop(i)将列表ls中的第i项元素取出并删除该元素ls.remove(x)将列表中出现的第一个元素x删除ls.reserve()列表ls中的元素反转ls.sort()对列表ls的所有元素进行从小到大的排序列表的操作方法例5-1输入10个不同的数值,从小到大输出,并输出最大值、最小值和平均值。【问题解答】#定义一个列表data,用于保存数值data=[]#从键盘读取10个不同的数值num=0whilenum<10:value=eval(input("请输入一个数值:"))ifvalueindata:print("该数值已经存在,请输入其他数值!")else:data.append(value)num+=1#列表数据排序data.sort()#计算并输出列表数据的最大值、最小值和平均值print(data)print("最大值是:",max(data))print("最小值是:",min(data))print("平均值是:",sum(data)/len(data))
5.4集合类型CCBY-NC-SA4.0嵩天5.4.1集合的定义定义方式一变量=set(参数)功能:使用函数set()定义一个集合。参数可以是字符串、元组、列表;如果不带参数则返回一个空集合。>>>a=(1,2,3,3,2,1)>>>s=set(a) #将元组转换为集合定义方式二变量={元素1,元素2,元素3}将各个元素用大括号表示,元素无顺序,至少包含一个元素>>>s3={"facebook",123} #通过{}直接创建5.4.2集合的操作符操作符描述S|T返回一个新集合,其包括在集合S和T的所有元素S&T返回一个新集合,其包括同时在集合S和T中的元素S-T返回一个新集合,其包括在集合S但不在T中的元素S^T返回一个新集合,其包括集合S和T中非相同的元素集合的操作符集合的并集运算>>>A={1,3,7}>>>B={4,6,7,8}>>>A|B #两个集合的并集运算{1,3,4,6,7,8}集合的交集运算>>>A=set("hello")>>>B=set("howareyou")>>>A&B #两个集合的交集运算{'e','o','h'}集合的差集运算集合的补集运算集合的操作符判断两个集合关系的运算符>>>a=set(['q','i','s','r','w'])>>>c=set(['q','i'])>>>c<a #c是a的子集True运算符及运算描述A==BA是否等于BA<BA是否是B的子集5.4.3集合的操作函数或方法操作函数或方法描述s.add(x)添加操作,如果不包含元素x则将x添加到集合s中s.remove(x)删除操作,从集合s中删除元素x。如果s中不存在x,将引发异常s.clear()清除操作,清除集合s中的所有元素len(s)返回集合s的元素个数xins如果集合s包含元素x,则返回True,否则返回Falsexnotins如果集合s不包含元素x,则返回True,否则返回False集合的操作函数或方法例5-2输入10个数值,消除重复的数值,从小到大输出,并输出最大值、最小值和平均值。【问题解答】#定义一个集合data,用于保存数值data=set()#从键盘读取10个数值,保存到集合中,自动消除重复数值num=0whilenum<10:value=eval(input("请输入一个数值:"))data.add(value)num+=1#将集合类型转换为列表类型datalist=list(data)#列表数据排序datalist.sort()#计算并输出列表数据的最大值、最小值和平均值print(datalist)print("最大值是:",max(datalist))print("最小值是:",min(datalist))print("平均值是:",sum(datalist)/len(datalist))
5.5字典类型CCBY-NC-SA4.0嵩天5.5.1字典类型字典类型是“键-值”数据项的组合格式如下:{<键1>:<值1>,<键2>:<值2>,…,<键n>:<值n>}>>>Dic={"中国":"北京","美国":"华盛顿","法国":"巴黎"}>>>print(Dic){'中国':'北京','美国':'华盛顿','法国':'巴黎'}>>>print(Dic["中国"])北京5.5.2字典的定义定义方式一字典变量={<键1>:<值1>,<键2>:<值2>,…,<键n>:<值n>}功能:创建一个字典,如果不含任何元素,则创建一个空字典定义方式二字典变量=dict()功能:定义一个空字典定义方式三利用元组构建字典,方法如下:>>>name=(["first","Google"],["second","Yahoo"])>>>website=dict(name) #定义字典5.5.3字典的索引字典中键值对的访问格式<字典变量>[<键>]例如:>>>d={"1001":"安徽","1002":"江苏","1003":"浙江"}>>>print(d["1001"])安徽利用键和赋值符号(=)可以添加元素到字典中<字典变量>[<键>]=<值>例如:>>>d={"1001":"安徽","1002":"江苏","1003":"浙江"}>>>#添加一个新元素:1004,福建>>>d["1004"]="福建">>>print(d){'1001':'安徽','1002':'江苏',"1003":"浙江",'1004':'福建'}字典的索引利用索引和赋值符号(=)可以修改字典中某元素的值<字典变量>[<键>]=<值>例如:>>>d={"1001":"安徽","1002":"江苏","1003":"浙江"}>>>#修改元素:1003,福建>>>d["1003"]="福建">>>print(d){'1001':'安徽','1002':'江苏','1003':'福建'}应用in或notin操作符可以判断字典是否包含某索引值5.5.4字典的操作函数>>>d={"1001":"安徽","1002":"江苏","1003":"浙江"}>>>len(d)>>>d={"1001":"安徽","1002":"江苏","1003":"浙江"}>>>max(d)>>>d2={1:"left",2:"right",3:"middle"}>>>max(d2)操作函数描述len(d)计算并返回字典d的元素个数,结果是整数max(d)计算并返回字典d中键的最大值,要求键可比较min(d)计算并返回字典d中键的最小值,要求键可比较dict()生成一个空字典5.5.5字典的操作方法操作方法描述d.keys()返回字典所有的键数据d.values()返回字典所有的值数据d.items()返回字典所有的键值对d.get(key,default)键存在则返回相应值,否则返回默认值d.pop(key,default)键存在则返回相应值,同时删除键值对,否则返回默认值d.popitem()随机从字典中取出一个键值对,以元组(key,value)形式返回d.clear()删除字典所有的键值对字典的操作方法>>>d={1:"left",2:"right",3:"middle"} #定义字典>>>d.keys() #返回字典的键数据dict_keys([1,2,3])>>>d={1:"left",2:"right",3:"middle"} #定义字典>>>d.values() #返回字典的值数据dict_values(['left','right','middle'])get(key,default)根据键key的值查找对应的值,如果不存在键key则返回默认值(default)。参数default可以省略。如果省略default参数,则默认值为空。例如:>>>d={1:"left",2:"right",3:"middle"} #定义字典>>>d.get(1) #查找键1对应的值'left'>>>d.get(4,"none") #查找键4对应的值'none'5.6实例解析:文本词频统计CCBY-NC-SA4.0嵩天5.6实例解析:文本词频统计给定一篇英文文章,要求统计其中的英文词语及各个词语出现的次数,并按照次数排序。本章小结CCBY-NC-SA4.0嵩天本章小结阐述元组类型、列表类型、集合类型和字典类型的定义、操作符、操作函数和操作方法组合数据类型之间可以互相转换,某些操作函数或方法对参数有特定要求第6章文件和数据格式化CCBY-NC-SA4.0嵩天学习目标了解文件的两种类型;掌握文件的打开和关闭;掌握文件的读写方法;了解数据的维度及其特点;掌握数据的存储格式和读写方法;文件的综合运用。
6.1文件概述CCBY-NC-SA4.0嵩天6.1文件概述文件是存储在外部存储介质中的相关数据的集合,用文件名标识计算机中文件按数据的组织形式分成两类:文本文件二进制文件使用文件的流程:新建文件或者打开已有文件对文件进行操作,如写入数据、读出数据及修改数据保存并关闭文件
6.2文件的操作CCBY-NC-SA4.0嵩天6.2.1文件打开通过open()函数打开文件,函数格式如下变量名=open(文件名[,模式字符,encoding=参数])例如,打开D盘“练习”文件夹下的test文本文件。f=open('D:\\练习\\test.txt','r')模式字符含义'r'或
'rt'以只读方式打开文本文件。如果文件不存在,出错'rb'以只读方式打开二进制文件。如果文件不存在;出错'w'或
'wt'以写方式打开文本文件。如果文件存在,覆盖写;不存在创建写'wb'以写方式打开二进制本文件。如果文件存在,覆盖写;不存在创建写'a'或
'at'以追加写打开文本文件。如果文件存在,追加写;不存在创建写'ab'以追加写打开二进制文件。如果文件存在,追加写;不存在创建写'+'与r/w/a连用增加读写功能,如'r+'打开文件能读写文件打开例6-1
程序中数据保存到D盘“练习”文件夹中,文件名为test1。【问题分析】在程序中把数据保存到文件中,首先要创建文件,使用'w'写的方式打开,打开时必须指定文件保存的路径,打开命令如下:f=open('D:\\练习\\test1.txt','w')文件打开例6-2程序中数据保存到D盘“练习”文件夹中,名为test2。【问题分析】在程序中把数据保存到文件中,也可以使用'a'的方式打开,打开命令如下:f=open('D:\\练习\\test2.txt','a')文件打开例6-3
程序中打开名为picture.png图片文件并使用。【问题分析】要求打开的是图片文件,图片文件是二进制,因此打开命令如下:f=open('picture.png','rb')文件打开open()函数中[encoding=参数]可选项,用于指定打开文件的编码格式,省略采用系统默认的编码格式,一般是GBK编码格式例如'test.txt'文件的编码格式是UTF-8,打开命令如下:f=open('test.txt','r',encoding='UTF-8')6.2.2文件读写常用的文件读写函数函数名功能read([n])读取整个文件数据,返回字符串。参数n是整数,[n]表示n可选,如果有表示读取n个字符(文本文件)或字节(二进制文件)readline()从文本文件中读取一行数据,返回字符串readlines([n])n参数可选,省略时从文件中读取所有行数据,返回列表。每行数据构成列表中一个元素,参数n是整数,[n]表示n可选,如果有表示读取n行数据构成列表write(s)参数s是字符串或二进制流,把s内容写入文件中writelines(s)参数s是列表,把s中每个元素依次写入文件中,不自动添加换行符seek()文件指针移到新位置文件读写例6-4假设D盘“练习”文件夹下test.txt文件中包含如下内容,读取文件中内容并输出。静夜思李白床前明月光,疑是地上霜。举头望明月,低头思故乡。【问题分析】按要求从数据文件中读取内容,用只读方式打开文件,可以直接输出读取的内容print(f.read()),也可以保存到变量中再输出,程序如下:f=open('D:\\练习\\test.txt','r')s=f.read()print(s)f.close()文件读写例6-5依次读出test.txt文件的中每行内容,并输出。【问题分析】read()命令一次性读取文件中所有内容,不符合题意,需要通过循环,依次读出每行内容,程序如下:f=open('D:\\练习\\test.txt','r')Forlineinf:print(line)f.close()文件读写例6-6读取test.txt文件中所有内容,去掉空格和换行符组成一个字符串并输出。【问题分析】使用read()命令可以读取文件中所有内容并保存为一个长的字符串,但其中隐含了换行符,按题目要求还需要去掉换行符,所以最快捷方式是使用readlines()命令读取,程序如下:f=open('D:\\练习\\test.txt','r')ls=f.readlines()print(ls)s=''forlinls:s=s+l.strip('\n')print(s)f.close()文件读写例6-7把“我爱Python程序设计语言”写入D盘“练习”文件夹中,文件名为test1.txt。【问题分析】内容保存到文件中,可以采用覆盖写方式打开文件,程序如下:f=open('D:\\练习\\test1.txt','w')f.write('我爱Python程序设计语言')f.close()文件读写例6-8将列表数据ls=['学号','姓名','入学成绩']写入D盘“练习”文件夹中,文件名为test2.txt。【问题分析】把列表中数据写入文件中,可以使用writelines()函数,写入的是一个长字符串,程序如下:f=open('D:\\练习\\test2.txt','w')ls=['学号','姓名','入学成绩']f.writelines(ls)f.close()文件读写例6-9用'a+'模式打开test2.txt,在文件末尾添加一行数据“2100101张华564”,然后分行输出test2.txt文件中内容。【问题分析】编写程序如下:f=open('D:\\练习\\test2.txt','a+')ls=['\n2100101','张华','564']f.writelines(ls)ls=f.readlines()s=''forlinls:s=s+lprint(s)f.close()6.2.3文件关闭通过close()函数关闭打开的文件,函数格式如下:变量名.close()例如f=open('D:\\练习\\test2.txt','a+')ls=['\n2100101','张华','564']f.writelines(ls)f.close()
6.3数据维度和数据格式化CCBY-NC-SA4.0嵩天6.3.1数据维度数据维度分为一维数据、二维数据和高维(多维)数据一维数据例如,某个班选出5名三好学生:张华、李林、王晓梅、张润、刘玲玲二维数据姓名性别出生年月综合分特长最高奖项张华男2001.492.4游泳、打篮球优秀班长李林男2000.1193.2短跑校数学竞赛一等奖王晓梅女2001.691.5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年规划编制(流程应用)专项测试题及答案
- 小学四年级劳动教学设计《手工缝纫:针线传情 匠心筑梦》
- 小学六年级下册德育班会全学期序列化教案
- 拜访演练案例课件
- 高二生物神经冲动的产生与传导教学设计
- 变更资料组卷归档管理办法
- 2026年考研管理类联考综合能力试卷及答案
- 播放商业课件
- 播放课件的软件课件
- 电力安全法规及现场作业规范知识测试试卷及答案
- 以“麦”相传-麦秆画
- 2025年金字塔原理试卷及答案
- 《小学科学课程标准》(修订稿)
- 西藏酥油茶的课件
- 2026上海电力股份有限公司校园招聘笔试备考题库及答案解析
- 国开2025年秋《农业推广》形成性考核1-3答案
- 冬季矿山五防安全培训课件
- 小儿推拿进修总结汇报
- 2025年上海市公务员《行政职业能力测验(B卷)》试题(网友回忆版)
- 向往混声合唱谱【简谱】
- 解码国家安全-知到答案、智慧树答案
评论
0/150
提交评论