Python程序设计方法408_第1页
Python程序设计方法408_第2页
Python程序设计方法408_第3页
Python程序设计方法408_第4页
Python程序设计方法408_第5页
已阅读5页,还剩403页未读, 继续免费阅读

下载本文档

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

文档简介

第1章程序及程序的运行Python程序设计方法1.1程序及程序的运行1.1.1程序的一般结构人解决问题的方法:第一步,接收原始信息第二步,分析处理信息第三步,表达出最终答案计算机信息处理能力_通过运行程序实现:程序看作函数

f(x)程序及其运行时所需数据一并输入计算机

启动计算机运行程序:

接收原始数据x(原始数据集X的子集)

经过计算机系统的运算处理

产生结果数据y(可能结果集Y的子集):y=f(x)例1-1根据下面的函数,由已知的x值计算y值接收用户输入(使用键盘或其他设备)的x值根据该值所属范围,

调用相应的数学算式计算y值输出y值Python语言编写的程序:x=float(input("自变量x=?"))ifx>=0:

y=2*x+1else:

y=-xprint("函数值y=",y)注:Python编译器区分英文字母大小写,

即大写字母与相应小写英文字母当作不同字符这段程序代码:三个Python语句:

输入数据、计算、输出结果(1)输入数据——为变量x赋值x=float(input("自变量x=?"))(2)计算——求y值ifx>=0:

y=2*x+1else:

y=-x第2个语句中,嵌入了两个赋值语句:y=2*x+1y=-x功能:计算等号右边表达式的值,

计算结果赋予等号左边变量Python语言规定:程序中的if语句按照上述格式书写:嵌入语句比if行或else行向右缩进

不能左侧对齐最好同一级别嵌入语句前都用Tab键缩进同样深度

使得同一级别的多个语句左侧对齐(3)输出结果——y的值print("y=",y)功能:将y值按默认格式输出到标准设备(显示器)该程序在执行后,屏幕显示程序再次运行,输入提示符后输入另一数字并按回车键

如,当输入−3时,屏幕显示自变量x=?9y=19自变量x=?-3y=31.1.2程序设计语言程序:程序设计语言表示的一系列有序指令的集合,用来完成指定的任务

软件:计算机程序、方法和规则、相关的文档资料以及在计算机上运行它所必需的数据的总称使用计算机:运行程序(软件)购买通用的商品软件和共享软件:如 文字处理软件:Word、WPS、MATLAB

定制软件:请专业公司或个人设计自编软件:使用程序设计语言或集成开发环境FORTRAN、C、Pascal、VisualC++、Delphi1.机器语言:计算机能直接执行。如,00000011000001101100100000000000写成16进制:0306C800H汇编:源程序翻译成机器代码A100000306C800A3CC00Movax,en1Addax,com1Movsum1,ax2.汇编语言:助记符代操作码;符号地址代操作数

如,addax,com1

实现:sum1=en1+com1

比较内存中两个数的大小地址机器指令注释-------------------------------------------0000B85F5F;取数据段地址00038ED8 ;设置数据段寄存器0005A10000 ;把数1(var1)的值送到ax寄存器00088B1E0002 ;把数2(var2)的值送到bx寄存器000C3BC3 ;比较两个数000E7207 ;如果数1小于数2则转移到001BH00108D16001C ;取字符串'数1大于等于数2'的指针0014EB05 ;转显示00168D160004 ;取字符串'数1大于等于数2'的指针001AB409 ;调用DOS的显示字符串功能001CCD21 ;显示字符串001EB44C ;退出程序0020CD21机器语言编写的程序比较内存中两个数的大小汇编语言编写的程序标号汇编指令注释---------------------------------------------

movax,data ;取数据段地址

movds,ax ;设置数据段寄存器

movax,var1 ;把数1(var1)的值送到ax寄存器

movbx,var2 ;把数2(var2)的值送到bx寄存器

cmpax,bx ;比较两个数

jble1 ;如果数1小于数2则转移到001BHgr1:leadx,grea ;取字符串'数1大于等于数2'的指针

jmpdis ;转显示le1:leadx,less ;取字符串'数1大于等于数2'的指针dis:movah,9 ;调用DOS的显示字符串功能

int21h ;显示字符串

movah,4ch ;退出程序

int21h3.高级语言面向应用。接近自然语言、数学语言传统语言:FORTRANIV、Algol60、CFORTRAN集成开发环境:TurboPascal、TurboC可视化环境:VB、Delphi、VC++、C++BuilderAlgolPascalSmalltalkCCPL→BCPL→BC++BasicJava153.语言的平台无关性不同的语言有不同的适用范围FORTRAN数值计算Algol60→Pascal语法严谨,风格优C灵活、便于操纵硬件_系统软件语言与CPU、操作系统有关源程序翻译成OS支持、CPU可执行的目标代码平台无关性与编译程序理论上,高级语言程序可用于任何计算机实际上,某些语言只有某种系统的版本,如

VisualC++,基于Windows操作系统的开发环境,不便用于Unix1.1.3程序运行的一般方式按以下方式编写和运行程序冯·诺依曼(VonNeumann)计算机:一个程序中包含若干条机器指令每条指令都规定了计算机应该执行的操作(加法、减法、数据传送、转移、停机等)以及执行时所需要的数据例如从存储器读出一个数送到运算器就是一条指令从存储器读出一个数并和运算器中原有的数相加也是一条指令按以下方式编写和运行程序冯·诺依曼计算机:第一步:编程序求解过程分解为一个个便于计算机执行的操作步骤,各用一条或多条指令写出,构成程序程序及数据通过输入设备送入计算机,以二进制代码形式存放在存储器中第二步:执行程序控制器从存储器中逐条取出指令分析指令规定的操作种类和性质根据分析结果向其他部件发出操作信号,控制各部件协同工作,完成指令规定的操作。若执行的是输出指令,则会控制输出设备输出操作结果1.2Python程序设计的一般过程Python,开放源代码的解释性高级语言,Linux上标志性语言之一。GuidovanRossum1989年底始创。1991年初,第一个公开发行版系统编程:提供API_应用编程接口,便于系统维护和管理图形处理:有图形库支持,便于图形处理数学处理:提供标准数学库接口文本处理:支持正则表达式,提供SGML,XML分析模块,可用于XML程序的开发数据库编程:PythonDB-API(数据库应用程序编程接口)规范模块与SQLServer,Oracle,Sybase,DB2,Mysql等数据库通信。提供完整SQL环境Python语言环境的安装和使用下载地址/download/,版本:Python2.7.1和Python3.1.3不兼容,但有转换程序不同:print“helloworld”print(“hwlloworld”)默认安装路径是c:\python36,选项出现在Windows开始菜单中两种使用Python的方式:提示符后键入命令、打开并运行源程序文件1.2.1使用交互式带提示符的解释器打开Python交互式解释器窗口:开始|程序|Python3.1|IDLE(PythonGUI)

命令提示符+插入点光标(闪烁)退出:按Ctrl+Q或选择菜单项file|Exit1.2.1使用交互式带提示符的解释器完全命令行方式:

..|Python(commandline)

命令提示符+插入点光标(闪烁)退出:按Ctrl+z或按Esc键同时输出字符串和计算结果的命令命令:Python语句+回车,>>>之后输入键入输出字符串的命令键入赋值命令输出命令的执行结果

命令提示符+插入点光标(闪烁)1.2.2集成开始环境运行Python程序S1

调用Pythonshell编辑源程序S2

以圆面积.py为文件名,存入c:\python36目录S3运行程序S1

调用文本编辑器,如“记事本”,编辑源程序S2

以.py为文件扩展名,保存源程序文件S3选择菜单项:开始|程序|附件|命令提示符进入Windows命令提示符方式S4

转到Pythonth处理程序所在的文件夹:如

c:↙

,到C盘当前目录

cd\↙

,到C盘根目录

cd\python31,进入python文件夹S5

python圆面积_体积.py,执行python程序完全命令方式编辑并运行Python程序1.2.3Python程序的执行方式实现Python语言处理系统时,需考虑:如何表示该语言的语义:确定表示该语言语义解释的虚拟计算机关键问题:程序执行时的基本表示采用实际计算机上的机器语言,还是特定虚拟机的机器语言据此将程序设计语言划分为两大类:编译型语言和解释型语言编译型语言运行之前翻译成机器语言程序。如C语言:(1)编译器读取源程序(字符流),将C语言代码转换为功能等效的机器指令代码。源文件的编译过程包含以下两个主要阶段编译阶段:通过编译器对C语言代码进行词法和语法分析,将其转换为功能等效的汇编指令代码汇编阶段:通过汇编器将汇编语言代码转换成相应的机器可执行的目标代码,编译后可生成多个目标代码模块。(2)目标文件不立即执行,可能有问题。如程序中可能调用了某个库文件中的函数某个源文件中的函数可能引用了另一个源文件中定义的符号等链接程序的主要工作:将有关目标文件彼此连接将当前程序与库文件中的函数连接起来将一个文件中引用的符号同该符号在另外一个文件中的定义连接起来使得所有目标文件成为一个能够被操作系统装入执行的统一整体编译型语言程序运行前一次性翻译成机器语言程序,执行时不再翻译,执行效率高解释型语言执行时才由解释器逐行动态翻译和执行解释器一般都有两个主要模块解释模块:负责按源程序的动态执行顺序逐个输入语句,并对单个语句进行分析和解释,包括检验语法和语义的正确性、生成等价的中间代码和机器语言代码、提供错误信息等运行模块:负责运行语句的翻译代码,并输出中间结果或最终结果解释程序的设计思想->运行模块执行方式不同:方式1:解释模块直接生成机器语言代码。运行模块控制代码的执行并保存或输出中间结果方式2:解释模块生成一种等价于语句但不同于机器语言代码的中间代码,运行模块负责选择相应功能部分、控制中间代码的执行,并处理相关运行结果一般来说,解释型语言程序的执行速度比编译型语言程序的执行速度慢Python程序的编译Python程序:解释执行,但提供编译方法Python程序执行:每个源语句分解为单一步骤,从而将所有源语句翻译成一组字节码指令。编译之后得到字节码的.pyc文件,保存在源代码文件所在文件夹Python程序再次运行时,若上次保存字节码以来尚未修改过,则自动加载.pyc文件并跳过编译步骤。总体上提高了执行效率Python是解释型语言,程序编译成字节码不是强制性操作第2章数据的计算机表示与操作Python程序设计方法程序中每个数据都归属于某种特定的数据类型Python程序中可使用表示单个数据的内置数据类型,如数值型和逻辑型也可定义并使用较为复杂的数据结构,如字符串、列表、元组和字典等,以便成批保存数据并方便地访问其中每个数据程序对数据的处理主要体现在表达式的求值运算上第2章

数据的计算机表示与操作2.1数值型和逻辑型数据数据:常量、变量常量:直接写出来的数字、布尔值和字符串等变量:通过变量名引用其值的数据,程序中可为变量赋值或改变其值Python语言中,变量的值占据一块内存空间,称为对象,通过变量名来引用值对象Python语言的内置数据类型:整数、浮点数和逻辑值等常量,以及引用这些常量的变量Python语言内置了许多函数,可用于数据的求值、获取以及类型确认等操作2.1.1标识符和名字1.标识符:数据(常量、变量、函数、函数中的参数)用标识符命名标识符:字母或下划线开头,由字母、数字或下划线组成的字符序列标识符由字母、数字、下划线构成标识符可包括英文、数字及下划线,但不能以数字开头标识符“大小写敏感”。程序中同一字母的大写和小写被当作不同的字符。例如,xBox、XBOX和Xbox是三个的标识符2.1.1标识符和名字标识符中适当运用下划线、混用大、小写字母等,有助于提高程序的可读性

例如,变量名studentCount(学生人数)

函数名read_student_file(读学生档案)可约定:标识符加上一个标志性前缀。如所有表示整数的标识符都以“i”开头、浮点数以“f”2.名字标识符只有在源程序中给出定义或说明之后才具有特定意义,成为名字可将每个名字看成计算机中一个抽象的存储区域,其内容为名字的值Python中名字可分为两大类:

专用名字和普通名字Python中的保留字就是专用名字,不能作为一般名字使用普通名字是用户根据标识符构造规则自己定义的程序本身的标识符。可称为用户标识符3.保留字保留字是专用于表示特定语法成份的关键字,

不能再用于变量名、函数名和模块名等普通名字例2-1查看Python的所有保留字。Python系统的keyword模块中包含了Python语言的保留字列表及判断字符串是否保留字的函数导入keyword模块,即可查看所有保留字并使用这个函数3.保留字2.1.2数字与逻辑值1.常量:具体的数据,程序执行过程中不会变值Python常量主要指字面量,即书写形式直接反映其值和意义的数据

例如,数字2、1.823、10.25E-3Python常量:整数(int)、浮点数(float)、复数(complex)、逻辑值等

都属于Python语言内置的数据类型

可按特定的语法生成:2.1.2数字与逻辑值

例如>>>293.56实际上是正在运行一个常量表达式,这个表达式生成并返回一个新的浮点数对象。这就是Python语言生成这个对象的特定语法一旦创建了一个对象,该对象就占据一块内存空间且绑定一个特定的操作集合。例如,创建了一个整数对象之后,就可以用它来进行加减乘除四则运算了2.整数Python3种类型数字:整数(int)、浮点数(float)和复数(complex)、二进制、八进制、十六进制整数。例如,0xE8C6是十六进制整数3.浮点数

带小数点的实数,如-0.5和5.63等可用科学计数法表示浮点数。例如,19.3E-5,表示数字19.3*10-5

执行语句>>>print('5.63+19.3E-5=',5.63+19.3E-5)输出5.63+19.3E-5=5.6301934.复数形式上由实部和虚部构成,都以Python语言的浮点型数字表示出来虚数是-1的平方根的倍数,用

j表示。例如

(-5+4j)、(8.2-3.9j)执行语句>>>print('(-5+4j)+(8.2-3.9j)=',(-5+4j)+(8.2-3.9j))输出(-5+4j)+(8.2-3.9j)=(3.1999999999999993+0.10000000000000009j)5.布尔值逻辑值:True和False,分别表示真值、假值True和False虽然是关键字,但分别对应的值却是数字1和0,可与其他数值一起进行算术运算。例如,

执行语句>>>print((2+1)>3)

输出False

执行语句>>>print('True+9=',True+9,'3-False=',3-False)

输出True+9=103-False=32.1.3数值型与逻辑型变量一个变量:参与运算的数据,变量名标识,其值保存在若干个内存单元变量使用前赋值,赋值后才会创建每个变量都属于某种特定的数据类型,Python语言中变量的数据类型就是赋予它的值的类型若需整数值,将整数赋值给相应变量(如

i=10

)即可。在后台,Python创建一个整数对象,并将新对象的引用(内存空间地址)赋值给变量Python语言允许使用汉字字符作为变量名1.变量赋值Python:动态类型化语言,变量赋值即可使用同一变量多次赋予不同数据类型的值,从而定义为不同类型的对象、参与不同种类的运算例如,语句X=10创建一整数对象,其值10,该对象分配给变量x

即将其内存空间首址赋值给变量x语句

x=20创建另一整数对象,其值20,该对象分配给变量xx丢弃原有对象,成为当前对象的引用语句

Y=X+13计算算术表达式X+13,生成新的整数对象,该对象分配给变量y例2-2变量赋值及运算#--coding:utf-8--#例2-2_变量赋值及运算a=10;b=True+9.3jprint('a=',a,'b=',b)a=a+0j; print('a+0j=',a)a=a+b; print('a+b=',a)b=a.real+3.5+a.imag+6.9jprint('b=a.real+3.5+a.imag+6.9j=',b)a=b-(5>10); print('a=b-(5>10)=',a)分析:⑴第一行的注释是为了通知Python解释器,要按照UTF-8编码读取源代码,否则,输出源代码中的中文字符时可能会有乱码⑵用分另“;”将同行中的两个语句隔开⑶用a.real提取复数实部;

用a.imag提取复数虚部⑷逻辑值可以参与数值计算⑸比较算符的运算结果为逻辑值运行:2.多重赋值Python允许同时为多个变量分配单个值

例如,语句x1=x2=x3=15

创建一整数对象,值15,给所有三个变量分配相同的内存位置Python允许将多个对象分配给多个变量

例如,语句x,y,z=20,32,"Zhang"

将两个值为20和32的整数对象分别分给x和y,并将一个值“Zhang”的字符串对象分给z3.变量的删除Python垃圾回收机制:

当一个对象占用的内存空间不再使用(计数为0)时,自动释放。也就是说,Python的垃圾空间回收是自动完成的可用del命令删除既有变量

被删变量占用的内存空间由操作系统释放,该变量就不存在了

相当于程序主动释放空间,将其归还给操作系统2.1.4内存组织与变量引用Python变量中保存的是值对象所在的存储实间的位置而非值本身。有别于C等传统语言的变量1.内存储器组织方式内存分存储单元,每单元存一字节内存地址码以二进制表示

10位可编码范围0~210-1,即1K(1024个)

20位可编码范围0~220-1,即1M(1024K个)常用16和十进制数表示地址,例如,地址011111111111111111111111写成7FFFFFH或83886082.1.4内存组织与变量引用2.变量引用内存中,系统为一个数据分配包含若干个存储单元的内存空间,将这个称为对象的数据放入其中如果放入的是整数,就成为int类型对象如果放入的是字符串,就属于str类型对象将对象赋予一个变量名后,该变量随即成为指向所赋对象的指示器,同时获得该对象的数据类型这种通过地址间接访问对象数据的方式,称为引用例2-3

变量与两个引用对象之间的关系执行语句x=35.69Python创建值为35.69的浮点数对象,分给变量x,x成为引用浮点数的指示器(得35.69首址1000)再执行语句x=33Python创建值为33的整数对象,分给x。又可用变量名x引用这个整数对象了注意:当变量x引用的对象从35.69变为33时,另外开辟了一个存储空间,存入值33的整数,并将整数对象首址(假定2000)赋值给变量x例2-3

变量与两个引用对象之间的关系35.69x3335.69xx35.693310002000①②例2-4变量与两个引用对象之间的关系s='HelloPython‘x=sprint('s<——字符串:\t\tx<——s:')print('type(s)=',type(s),'type(x)=',type(x))print('id(s)=',id(s),'\tid(x)=',id(x))print('s=',s,'\tx=',x)s=567.89print('s<——浮点数:\t\tx不变:')print('type(s)=',type(s),'type(x)=',type(x))print('id(s)=',id(s),'\tid(x)=',id(x))print('s=',s,'\t\tx=',x)例2-4变量与两个引用对象之间的关系s='HelloPython‘x=sprint('s<——字符串:\t\tx<——s:')print('type(s)=',type(s),'type(x)=',type(x))print('id(s)=',id(s),'\tid(x)=',id(x))print('s=',s,'\tx=',x)s=567.89print('s<——浮点数:\t\tx不变:')print('type(s)=',type(s),'type(x)=',type(x))print('id(s)=',id(s),'\tid(x)=',id(x))print('s=',s,'\t\tx=',x)例2-4变量与两个引用对象之间的关系2.1.5常用内置函数1.数字工厂函数某种特定运算需要相应运算对象,例如,x=input("请输入一个整数:")print(x+1)运行时发生了错误,显示信息:其中包含“int对象和str对象混用”字样原因:input()函数接收键入的数字并作为一个字符串赋予x变量,使得print()函数中表达式x+1因为数据类型不匹配而生错数据工厂函数可解决问题:type(<表达式>)#获得表达式的数据类型int(‘56’)#转换为整数int('1101',2)#二进制串转换为十进制整数float(’43.5’)#转换为浮点数str(93)#转换为字符串bin(33)

#十进制整数转换为二进制数2.数学函数求幂、三角函数等数学运算,需调用Python标准库中的math模块:使用数学函数前,先在程序中包含语句行

importmath调用数学函数的例子:math..log10(10) #以10为底的对数math.sin(math.pi/2)#正弦函数、单位弧度math.pi#常数pi,3.141592653589793math.exp(8) #e的8次幂math.pow(32,4) #32的4次幂2.数学函数math.sqrt(2) #2开平方math.cos(math.pi/3)#余弦函数math.fabs(-32.90)

#求绝对值math.factorial(n)#求n的阶乘使用math函数时:先输入“math.”再将鼠标移到“.”上稍停,则弹出math菜单使用光标上移箭头或者下移箭头,选择合适的菜单项,然后按左移箭头或者右移箭头,所选择的函数名便会出现在“math.”之后3.

python标准库除math之外,Python标准库中还有以下几种常用的标准模块os模块:提供了不少与操作系统相关联的函数glob模块:提供了一个函数用于从目录通配符搜索中生成文件列表re模块:为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案。random模块:提供了生成随机数的工具有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从urls接收的数据的urllib2以及用于发送电子邮件的

smtplibdatetime模块:为日期和时间处理同时提供了简单和复杂的方法。支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。该模块还支持时区处理。以下模块直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及tarfile2.2数据的运算及输入输出2.2.1运算符与表达式2.2数据的运算及输入输出2.2.1运算符与表达式2.2数据的运算及输入输出2.2.1运算符与表达式使用表达式应注意以下几点:(1)运算符的正确书写:

相等“==”,整除“//”,求余数“%”(2)运算符与运算对象的关系

单目表达式:负值、取地址、

双目运算符:多数运算

三个或更多操作数复合表达式(3)运算符有优先级和结合方向:如果一个操作数两边有不同的运算符,首先执行优先级别较高的运算如果一个操作数两边的运算符级别相同,则应按自左而右的方向顺序处理如果对运算符的优先顺序没有把握,可使用括号来明确其运算顺序例2-5四个高10米半径1米圆塔,圆心

(2,2)、(-2,2)、(-2,-2)、(2,-2)

对任一坐标点,求相应高度(10或0)#程序2-5_求指定坐标点高度h=10x0=2;y0=2x=float(input("坐标点(x,y)中,x=?"))y=float(input("坐标点(x,y)中,y=?"))d1=(x-x0)*(x-x0)+(y-y0)*(y-y0);d2=(x-x0)*(x-x0)+(y+y0)*(y+y0);d3=(x+x0)*(x+x0)+(y-y0)*(y-y0);d4=(x+x0)*(x+x0)+(y+y0)*(y+y0);ifd1>1andd2>1andd3>1andd4>1:h=0print("(",x,",",y,")点的高度为",h)}2.2.2运算顺序2.2.2运算顺序例2-6混合多种运算符的逻辑表达式X=6C1='A'C2='B‘L=FalseResult=X+1>10orC1+C2>'AA'andnotL

print(Result)运行结果True,表达式

X+1>10orC1+C2>'AA'andnotL运算过程:⑴X+1得7,C1+C2得'AB'⑵X+1>10得False,C1+C2>'AA'得True⑶notL得True,TrueandTrue得True,FalseorTrue得True2.2.3数据的输入输出<变量名>=input(<提示信息>)例2-7input函数及输入语句姓名=input('学生姓名?')班级=input(姓名+'同学所在班级?')年龄=int(input(班级+'班的'+姓名+'同学的年龄?'))print("姓名","\t班级","\t\t年龄")print(姓名,"\t",班级,"\t",年龄)1.数据的输入<变量名>=input(<提示信息>)例2-7input函数及输入语句1.数据的输入2.数据的输出print(<表达式列表>)表达式列表:

表达式1,表达式1,…,表达式n,sep=’,’,end=’\n’值之间以sep指定符号分隔,以end指定符号结束sep字符默认为空格;end字符默认为换行表达式中还可用格式化字符串控制输出格式:

格式化字符串%对象格式化字符:%d格式化整数、%f格式化浮点数、%e格式化为科学计数法格式、%s格式化字符串、%x格式化无符号十六进制数例2-8输出语句的使用雇员=input('姓名?')职务=input('职务?')性别=input('性别(男/女)?')工资=int(input('工资(小于15000的整数)?'))津贴=int(input('津贴(小于20000的整数)?'))print(职务+雇员,'月薪',sep=':',end='')print('%d+%d=%d元,'%(工资,津贴,工资+津贴),end='')if性别=="女":

补贴=工资*0.01else:

补贴=0print('实薪%d元。'%工资+津贴+补贴)例2-8输出语句的使用序列:字符串、列表、元组

一个序列容纳有序排列的多个数据,

通过下标偏移量访问Python三类别数据:⑴

非容器类数据:整数、浮点数、布尔值等

直接存取⑵序列类型:顺序排列的多个数据的容器

容器内元素从0编号,按索引号访问。可一次多访⑶映射类型(字典等):元素无序存放,

通过唯一的键值访问2.3序列和字典2.3.1字符串的种类及运算1.字符串的种类⑴

使用单引号的字符串:

其中所有空白(空格或制表符)都按原样保留⑵

使用双引号的字符串:

与单引号字符串用法相同⑶

使用三引号(‘’‘或“”“)的字符串:

文档字符串。可指定一个多行字符串;

还可在三引号中使用单引号和双引号。

可保留文本中的换行信息doc1="""\t要想木头说话\n\t至少三冬三夏"""doc2="""\tIcelebratemyself,andsingmyself\tAndwhatIassumeyoushallassume,\tForeveryatombelongingtomeasgoodbelongstoyou."""print('len(doc1)=',len(doc1));print(doc1)print('len(doc2)=',len(doc2));print(doc2)例2-9文档字符串及其变量例补1字符串连接、重复、切片例补2取子串:<串名>[<起始处>:<终止处>:<步长>]字符串连接、重复、切片列表:data=[2011,2,9,9,54]内容可改,长度可变多项用逗号隔开,类型可不同,可以是其他列表引用:<列表名>[索引号],索引号从0开始输出在一行2.3.2列表的特点及运算例2-10列表定义定义及操作元组:定义和操作类似于列表

但定义后不能再改(类似于字符串)2.3.3元组的特点及运算无序的对象集合,通过键(key)操作映射类型:关联式的容器类型,存储对象间映射关系字典:存储多个

键值对(

键映射到

值)的关联容器,Python中唯一的映射类型

字典定义的一般形式:<字典名>={键1:值1,键2:值2,键3:值3,…}键1,键2,键3各不相同值可是任何类型的数据,可列表或元组字典中的项用逗号隔开,键和值用冒号隔开只可使用简单的对象作为键,而且不能改变,但可使用不可变或可变的对象作为字典的值2.3.4字典的特点及运算例补3程序2-3计算购物款任务:输入所购买物品的品名和数量这两个数字以及相应的折扣规则计算应付款金额思路:先将

价目表、折扣物品最小购买量(折扣量)分别存入不同的字典然后

按用户输入的品名,在价目表字典中查找单价,在折扣量字典中查找是否有折扣再按单价、数量和折扣计算应付款金额最后输出金额程序3-3计算购物款程序3-3计算购物款谢谢!第3章算法及程序的控制结构Python程序设计方法第3章算法及程序的控制结构算法:解算实际问题的一系列操作的有穷集合,这些操作分别构成多个控制结构,有机地连接或套叠成一个整体,按照人−机(计算机)系统认可的工作方式完成对数据对象的运算和操作,从而得到预期的结果算法可以用自然语言、流程图等多种形式表示出来,用程序设计语言表示出来的算法就是程序算法设计是程序设计的基础和关键3.1算法与程序设计科学计算:问题转化为数学公式,一次性计算解题

如力学:G=g*m1*m2/R2(万有引力)

实际问题:常遇__难找公式或计算太难,如背包、迷宫问题、偏微分方程往往数值方法近似计算计算学科(计算机+各学科):常无终极公式;反复计算逐步得近似解;每步解一部分或得到一个更好近似解(简单问题的解逐步逼近原始问题解)优点:算法易找,适合于计算机求解3.1.1算法的概念例3补-1辗转相除法(求两整数最大公约数)定理:两个整数的最大公约数

等于

较小数与两数之差的最大公约数如,252、105

最大公约数:21

∵252−105=147

∴147、105

最大公约数:21算法:用计算机解决某一问题的方法和步骤数值算法:解决一般数学解析方法难解的问题:求超越方程的根、求定积分、解微分方程等非数值算法:对非数值数据进行查找、排序等算法:求两个整数的最大公约数3.1.2算法的描述算法可以表现为各种形式:伪代码(英文、中文、类Pascal、类C语言)流程图(框形、盒图、PAD图)、程序(汇编语言、高级语言源程序)_执行算法的流程图描述:X≥0Yy=2x+1y=-xN输入x输出y开始结束处理框判断框I/O框起止框流程线流程图符号例6-2:求y值

y=2x+1(X≥0)-x(X<0)3.1.3算法的基本特征有穷性:一个算法应该在有限(合理)的时间和步骤内执行完毕确定性:算法的每个步骤都应确切无误,没有歧义可行性:算法的每个步骤都必须是计算机能够有效执行、可以实现的,并可得到确定的结果输入性:一个算法可以有0或多个输入数据。输出性:一个算法必须有一个或多个输出结果算法需要表现为程序,才能由计算机理解和执行一般地,可先用流程图或伪代码设计算法再转换成计算机能够执行的“程序”3.1.4结构化程序设计思想1.传统程序的弊端(规定三种基本结构的理由):流程线指出各框执行顺序流程可随意转向,可能使流程图毫无规律,要花很大精力追踪流程,难以理解算法的逻辑2.结构化程序设计的思想基本思想:自顶向下,逐步求精拆分:问题复杂时,拆分成规模小、易理解、易实现且互相独立的功能模块,每个模块还可继续拆分,直到所有子模块都易理解或实现为止模块内部:所有操作都按其内在联系组织成一个一个的“单入口、单出口”的控制结构,可以是顺序结构、选择结构或者循环结构,然后再把这些结构有机地串接成一个整体优点:这样设计出来的程序结构清晰,容易阅读,方便修改和维护,从而提高了程序的可靠性并保证了程序的质量3.结构化程序设计的问题数据和操纵数据的过程分别构建为相互独立的实体,编程时必须考虑数据的格式,不便于实现代码重用例如,在需要对不同的数据格式进行同样的处理,或对相同的数据格式进行不同的处理时,都需要编写不同的程序难以保证数据和过程始终相容,若使用错误的数据来调用过程,或者数据虽然正确但所调用的过程错误,则都不会达到预期的目标结构化程序设计存在的问题可以通过面向对象程序设计方法加以解决。3.1.5算法中的数据处理和控制结构1.算法中数据对象的运算和操作算法的实现平台多种多样,但最基本操作功能相同

一般计算机系统中,基本的运算和操作(1)算术运算:主要包括加、减、乘、除等运算(2)关系运算:

主要包括大于、小于、等于、不等于等运算(3)逻辑运算:主要包括与、或、非等运算(4)数据传输:

主要包括赋值、输入、输出等操作顺序结构语句序列2语句序列12.程序的三种基本结构:FT条件语句序列当型循环结构TF条件语句序列直到型循环结构TF语句序列2条件语句序列1选择结构顺序结构:二数排序

选择结构:求y的值输入A、BA

T开始输出A、B结束B

AT

BTF-x

yx≥0x+1

y输入x的值开始输出y的值结束例补3-1输入十个数,挑最大数并输出

擂台赛—算法:输入一数,假定为最大数;再输入下一数,与前一数比较,保留较大数;依次输入其它数,与上次保留的数比较并保留较大数,直到输入了10个数并比较了9次为止,最后留下的是最大数例补3-2:辗转相除法

n≥mYr=mm=nn=rN输入m,n1开始r<>0Yr=nn=mN输出n结束1r=m/n的余数r=m/n的余数例3-6求前100个自然数之和⑴

n

100⑵

Sum

0.5*n*(n+1)⑶输出累加和Sum⑷算法结束⑴

Sum

0⑵

i

1⑶

Sum

Sum+i⑷判断i≤100?若是,则i

i+1转到⑶⑸输出累加和Sum⑹算法结束补充:算法的评价若算法有缺陷或不适合于具体问题,就不能很好完成预期的任务。解决同一问题的不同算法所需要的时间和空间也可能有所不同算法的优劣可用空间复杂度与时间复杂度衡量算法的时间复杂度:

指执行算法所需要的时间开销

程序的执行时间不宜作为评价标准约定,

问题的规模,即算法处理的数据元素个数为n

执行一条基本语句(如加法)的时间开销记为1

则,时间复杂度是问题规模n的函数:f(n)嵌套:实现复杂功能多个循环语句可嵌套在一起循环语句和分支语句可相互嵌套例如,两个循环语句嵌套(伪代码描述):

循环(i从0到n):

循环(j从1到m):

x

x+1执行,i=0时,j:1→m,x

x+1i=1时,j:1→m,x

x+1…i:0→n时间复杂度:Q(1)——单个语句、

Q(n)——循环、Q(n2)——二重循环⑴

s=input("Pleaseinputadata")

键入一串字符并赋值给s⑵a=int(input(“Pleaseinputadata”))

键入一整数(数字样字符串),转换为整数并赋值给a⑶b=float(input(“Pleaseinputanumber”))

键入一数(数字样字符串),转换为浮点数并赋值给b⑷print(“Helloworld”)

输出字符串⑸print(“z=”,z)

输出数字及字符串复习:输入和输出语句复习:

运算符及表达式+ 加- 减* 乘

除**幂//取整除% 取模<<左移>>右移& 按位与| 按位或^ 按位异或~ 按位翻转< 小于> 大于<=小于等于>=大于等于==等于!= 不等于not布尔“非”and布尔“与”or 布尔“或”3.2.1分支语句if<条件>:<if块>else:<else块>注意:条件写法、冒号、缩进格式ifa>b:print(a,'ismaximum')else:print(b,'ismaximum')3.2程序中的分支语句和循环语句2.条件表达式条件表达式的一般形式:

XifCelseYifx>=0:y=2*x+1else:y=-xy=2*x+1ifx>=0else-x3.多重条件表达式#例3-8_计算应付货款金额n=float(input('请输入物品件数:'))p=float(input('请输入物品单价:'))ifn<10:money=n*p #10件以下原价elifn<20:money=n*p*0.9 #10~20件,打9折elifn<30:money=n*p*0.85 #20~30件,打8.8折elifn<60:

money=n*p*0.8 #30~60件,打8折else:money=n*p*0.75 #60件以上,打7.5折print('您应付',money,'元!')3.2.2While循环语句while<条件>:

<循环体>条件循环体例3-9输出二进制数各小数位上权值,

直到权值小于十进制数0.001时为止weight=1/2count=1epsilon=float(input('大于最小权值的ε=?'))whileweight>=epsilon:print('2的-',count,'次方=',weight,sep='')count+=1weight/=2else:print(weight,'<',epsilon)for<循环变量>in<序列>:<循环体>3.2.3for循环语句逐个使用序列中每项,

每项均使循环体执行一次for<循环变量>inrange(N1,N2,N3):<循环体>1.使用range()内建函数的for循环循环变量←N1(初值),开始循环

每执行一次循环体,

循环变量+N3(步长)

判断:循环变量<N2(终值)?是则

继续

否则终止输出

如foriinrange(1,10,3):print(i)1472.用于序列类型的for循环例3-10nameL=['张京',"王莹",'李玉','陈良','林向']三种方式遍历nameL列表:(1)序列项遍历:输出全部5个元素foreachinnameL: print(each)(2)序列索引遍历:输出全部5个元素foriinrange(len(nameL)): print(nameL[i])(3)项和索引遍历:fori,eachinenumerate(nameL): print("%d%s"%(i+1,each))3.列表解析列表解析:列表推导式,选择集合对象中元素或运算

例如,语句intList=[1,2,3,4,5,6,7,8,9]oddList=[i+10foriinintListifi%2==1]print('oddList=',oddList)

执行结果:oddList=[11,13,15,17,19]

等效for语句和if语句组合:oddList=[]foriinintList: ifi%2==1: oddList.append(i+10)print('oddList=',oddList)3.2.4循环语句和选择语句的嵌套多种控制结构的组合:

三种基本结构可以互相嵌套循环语句嵌套:一个循环语句完整包含另一个

执行A组语句n次,A组本身重复执行B组语句

外循环有界,内循环有条件多重循环:内嵌的循环语句再嵌套下一层复杂结构:选择语句和循环语句也可互相嵌套例3-12输出九九乘法表外层循环执行9次,分别输出9行乘法表达式:第1次:执行1次内层循环,输出1个乘法表达式第2次:执行2次内层循环,输出2个乘法表达式……foriinrange(1,10):#循环i从1~9forjinrange(1,i+1):#循环j从1~iprint("%d*%d=%d\t"%(j,i,i*j),end='')print()例3-13输入自然数,按奇偶分别求级数和n=int(input('整数n=?'))sum=0.0ifn%2==0:foriinrange(2,n+1,2):sum+=1.0/ielse:f=1foriinrange(1,n+1,2):sum+=f*1.0/if=-fprint(sum)3.2.5循环控制语句1.break语句终止自身所在当前层循环,

用于while语句和for语句例:for循环输出从1到10,

但break语句使得i值增加到5后终止循环:foriinrange(1,10):

if(i==6):

break;

print("%d\t"%i,end='')2.continue语句提前结束本轮循环:跳过循环体中尚未执行的语句,

进行下次是否循环的判断用于while语句和for语句中一般要与if语句配合使用例:for循环输出从1到10,但continue在i值增到6时中止当次(第6次)循环而进入下一次,最终输出的数字中因第6次未执行页缺少6foriinrange(1,10):

if(i==6):

continue

print("%d\t"%i,end='')例3-14验证用户输入的密码password=('ang789',)valid=Falsecount=3whilevalid==Falseandcount>0:strInput=input("请输入密码:").strip()

#验证密码

forcharWordinpassword:

ifstrInput==charWord:

#若密码正确,则结束循环

valid=True

break

ifnotvalid:#密码正确则结束本次循环,循环次数减1

print("输入无效!",end='')

count-=1

continue

else:

break3.3递推和迭代递推和迭代:

复杂问题求解分解成连续若干步的简单运算

降低问题求解复杂度递推:从已知项出发,按规则逐步推出未知项迭代:按规则由旧值生成新值,

再将新值作为旧值继续生成下一个新值递推和迭代:充分利用计算机的特点各种尤其是数值计算赖以生存发展的基本算法

3.3.1递推法例3-15确定平面一般位置上的n个相交的

圆所形成的区域数n=int(input('圆的个数n=?'))hn=2foriinrange(1,n+1):hn=hn+2*(i-1)3.3.2倒推法importmathn=1Integral=1.0/math.exp(1.0)whilen<=20:print(n,"",Integral)例3-16求定积分当n值分别为1,2,…,20时的值In=1−nIn−1,,…3.3.2倒推法,…问题:n=17时积分值反而增大,当n=18时积分值又变成了负的,这是误差放大导致的

3-16_改利用倒推法求定积分importmathn=20Integral=0whilen>0:

print(n,"",Integral)

n=n-1

Integral=(1.0-Integral)/(n+1)3.3.3递推法与代数解法自学:数列的递推式和数列的通项公式是数列的两种不同表现形式,前者适用于在计算机中通过逐步递推的方式解题,而后者可以直接计算出结果。3.3.4迭代法迭代法:计算机中最常用算法迭代:递推算法中,若一个(或一组)变量x存放每次推出的值,则每次循环都执行同一个语句,给同一个变量赋新值,即用一个新值代替旧值程序中的变量x称为迭代变量,其值不断变化递推可用迭代处理:例如,在求阶乘的算法中,由前一个数的阶乘推出后一个数的阶乘,该过程是递推;若用同一个变量存放递推出的结果,则该过程就是迭代。并非所有递推关系都可用迭代法来处理#3-18_利用迭代法求Fibonacci数列n=int(input('项数n=?'))twoF=0oneF=1print(twoF,"",oneF)foriinrange(2,n,1):

f=oneF+twoF

print(f)

twoF=oneF

oneF=f例3-19

无穷电阻网络,上面电阻都r1,下面都r2

求A、B两点间的等效电阻解析式:importmathr1=float(input('上电阻r1=?'))r2=float(input('右电阻r2=?'))r0=r1+r2whileTrue:

r=r0*r2/(r0+r2);

r=r1+r

ifmath.fabs(r-r0)<1e-9:

break

r0=rprint(r)谢谢!第4章函数Python程序设计方法第4章函数函数:代码块,函数名及一组参数调用Python函数分为两种:Python系统的内置函数,如ord(),直接使用用户自定义函数函数可嵌套定义和调用:

一个函数中定义或调用另一个函数函数可递归调用:一个函数中调用自身Python提供匿名函数、高阶函数及函数的递归调用等,用于编写函数式程序可与其他数据类型一样,赋值给变量可作为参数传入另一个函数可作为其他函数的返回值用表达式代语句,每步都是有返回值的单纯运算避免修改变量:不用变量而用参数保存运行时“状态”,是无副作用而只返回新值的纯函数由函数组合且以计算执行所有任务,其中函数的运行不依赖外部变量或状态而只依赖于输入的参数。函数中只要参数相同,返回值必相同错误少、易理解、便于模块化组合函数式程序:4.1函数及函数的参数程序设计过程中:代码重用:常用程序段定义为函数,必要时调用模块化设计:设计复杂程序时,划分为相互独立的模块,各以不同函数实现,降低难度且程序结构、可读性好语法方面:函数的要素:函数名、参数表(0~多个)、作用域(访问权限)、函数体函数功能由函数体中一系列语句实现,常有结束函数运行将返回执行结果的语句模块化程序:mainabcfghdeie可使用库函数可使用自编函数程序设计中要善于利用函数,可减少重复编写程序段的工作量,同时便于模块化程序设计4.1.1函数的定义和调用例:名为printStr的函数,两个参数str、n1.定义函数def<函数名>(<形式参数表>): <函数体>defprintStr(str,n):"输出str字符串n遍"foriinrange(n):print(str)2.函数的返回值defnFunc(x1,x2):

y1=x1+x2

y2=x1*x2

returny1,y2

函数的返回值赋予函数名return<表达式>return语句功能:退出函数时,向调用方返回一个值、一个表达式或由多个返回值组成的元组不带参数值的return语句返回none若函数无返回值,则可不写return语句例:nFunc函数,两参数x1、x2,返回值y1、y23.函数的调用printStr('HelloPython!',3)调用:函数名(实参表)例:调用库函数printStr(),

三次打印“HelloPython!”字符串a,b=nFunc(2,3)print('a=',a,';b=',b)例:二整数作参数,调用nFunc()并显示其结果例4-1求两个数中的较大数。importrandomdefabMax(a,b):

ifa<b:

a=b

returnaprint("%s和%s中较大的数为%s"%('A','a',abMax('A','a')))x=int(input('第一个整数x=?'))y=int(input('第二个整数y=?'))xyMax=abMax(x,y)print("%d和%d中较大的数为%d"%(x,y,xyMax))x=random.uniform(10,20)y=random.uniform(10,20)print("随机数%d和%d中较大的数为%d"%(x,y,abMax(x,y)))注意:注:seed()给随机数对象一个种子值,改变所产生的随机数序列

seed()省略参数时,将时间秒数等变化值作为种子值(1)不能在函数定义之前调用该函数(2)内置函数random.uniform(10,20):

生成一个10到20之间的随机整数

使用该函数需导入random模块4.1.2参数的传递函数定义时:形参可看成“点位符”

函数被调用时,形参通过相应实参得值Python函数调用时传递的是对象的引用若形参指向与相应实参不同的对象

不影响实参若形参通过传递来的引用修改了对象,

则实参随之改变

因为形参与实参指向同一个对象1.可变类型与不可变类型Python数据类型属于对象,变量没有数据类型

如语句

a=[5,6,7]

中变量a只是一个列表类型对象[5,6,7]的引用

当成一个指向该对象的指针

若其后执行语句a="jyWang"

则又成为一个字符串类型对象“jyWang”的引用1.可变类型与不可变类(重要)Python中的字符串、元组和数值均为不可变类型例如,

温馨提示

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

评论

0/150

提交评论