版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章程序设计基础知识程序设计语言01算法及算法描述Python语言Python开发工具介绍020304程序设计语言概述
程序设计语言,也称为编程语言或计算机程序,是按照程序设计语言规则组织起来的一组计算机指令,能够使计算机自动进行各种运算处理,是计算机理解和识别用户操作意图的一种交互体系。
从计算机诞生到现在,程序设计语言发展经历了机器语言、汇编语言到高级程序设计语言。01程序设计语言01程序设计语言机器语言
是由二进制0、1代码指令构成,不同的CPU具有不同的指令系统。机器语言程序难编写、难修改、难维护,需要用户直接对存储空间进行分配,编程效率极低,这种语言已经被渐渐淘汰。汇编语言
是机器指令的符号化,与机器指令存在着直接的对应关系。汇编语言同样存在着难学难用、容易出错、维护困难等缺点。汇编语言可直接访问系统接口,翻译成机器语言,效率较高。高级程序设计语言
是面向用户的、基本上独立于计算机种类和结构的语言。其形式上接近于算术语言和自然语言,高级语言易学易用,通用性强,应用广泛。常见的有Java、C、C++、PHP、Delphi、PASCAL、Python等。01程序设计语言1.机器语言机器语言是计算机能直接识别和执行的语言,完全由二进制数(0和1)组成,是与硬件强绑定的“原生语言”。本质:CPU指令集的二进制编码,无任何可读性,不同架构的CPU(如x86、ARM)机器码完全不同。与特定CPU架构(如x86、ARM)紧密相关,缺乏通用性。示例:x86Assembly(2+3)1011000000000010;加载数值2到寄存器AL0000010000000011;将AL中的值与3相加1011001000000101;存储结果(5)到内存地址01程序设计语言2.汇编语言汇编语言是机器语言的“符号化”版本,用易记的英文缩写(助记符)代替二进制指令,同时用符号地址代替内存地址。本质:机器语言的“翻译版”,与机器码一一对应,仍依赖硬件架构,但可读性大幅提升。示例:x86Assembly(2+3)MOVAL,2;
把2放到寄存器AL(MOV是“移动”的助记符)ADD
AL,3;把AL中的值加3(ADD是“加法”的助记符)MOV[0x05],AL;把AL中的结果存到内存地址0x05处01程序设计语言3.高级语言高级语言接近人类自然语言和数学逻辑,独立于具体硬件,是程序员最常用的语言(如Python、Java、C)。本质:与硬件解耦,专注于逻辑表达,需通过“编译器/解释器”翻译成机器码才能执行。示例:(2+3)Python#计算2+3并存储结果result=2+3print(result)#输出501程序设计语言4.对比01程序设计语言5.总结高级程序设计语言分类和解释
按照不同的计算机执行机制,高级程序设计语言可分成静态语言和脚本语言两类。
采用编译执行的编程语言是静态语言,如C语言、Java语言
采用解释执行的编程语言是脚本语言,如JavaScript语言、PHP、python语言。01程序设计语言01程序设计语言
编译程序也称为编译器,它将源程序翻译成目标语言程序,然后在计算机上运行目标程序。如右图展示了程序的编译和执行过程,编译器将源代码转换成目标代码,计算机可以运行目标代码接收输入,产生输出。解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行。
Python由荷兰数学和计算机科学研究学会的GuidovanRossum于1990年代初设计,是一种解释型、面向对象、动态数据类型的高级程序设计语言,遵循GeneralPublicLicense开源协议。
Python是一种解释型语言,具有简单明确的语法结构,高效的数据结构和有效的面向对象编程,已成为多数平台上脚本和快速开发应用的编程语言。01程序设计语言GuidovanRossum吉多・范罗苏姆1956年1月31日出生于荷兰哈勒姆一个程序应包括两个方面的内容:对数据的描述:数据结构(datastructure)对操作的描述:算法(algorithm)著名计算机科学家沃思提出一个公式:
数据结构+算法=程序
数据结构+算法+程序设计方法+语言工具完整的程序设计应该是:02算法及算法描述02算法及算法描述算法的概念
广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。方法1:1+2,+3,+4,一直加到100加99次方法2:100+(1+99)+(2+98)+…+(49+51)+50=100+49×100+50加51次对同一个问题,可有不同的解题方法和步骤例:求02算法及算法描述
为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法。希望方法简单,运算步骤少。计算机算法可分为两大类别:数值运算算法:求数值解,例如求方程的根、求函数的定积分等。非数值运算:包括的面十分广泛,最常见的是用于事务管理领域,例如图书检索、人事管理、行车调度管理等。02算法及算法描述算法举例及描述例1-1:求1×2×3×4×5
步骤1:先求1×2,得到结果2步骤2:将步骤1得到的乘积2再乘以3,得到结果6步骤3:将6再乘以4,得24步骤4:将24再乘以5,得120如果要求1×2×…×1000,则要写999个步骤太繁琐!
S1:使p=1。
S2:使i=2。
S3:使p×i,乘积仍放在变量p中,
可表示为:p=p×iS4:使i的值加1,即i=i+1。
S5:如果i不大于5,返回重新执行步骤S3以及其后的步骤S4和S5;否则,算法结束。最后得到p的值就是5!的值。
可以设两个变量:一个变量代表被乘数,一个变量代表乘数。不另设变量存放乘积结果,而直接将每一步骤的乘积放在被乘数变量中。设p为被乘数,i为乘数。用循环算法来求结果,算法可改写:02算法及算法描述S1:1→pS2:3→iS3:p×i→pS4:i+2→iS5:若i<1000,返回S3。否则,结束。
如果题目改为:求1×3×5×……×1000算法只需作很少的改动:02算法及算法描述算法简练!
用这种方法表示的算法具有通用性、灵活性。S3到S5组成一个循环,在实现算法时要反复多次执行S3,S4,S5等步骤,直到某一时刻,执行S5步骤时经过判断,乘数i已超过规定的数值而不返回S3步骤为止。此时算法结束,变量p的值就是所求结果。02算法及算法描述例1-2
有50个学生,要求将他们之中成绩在80分以上者打印出来。设n表示学号,n1代表第一个学生学号,代表第i个学生学号。用G代表学生成绩,gi代表第i个学生成绩,算法表示如下:S1:1→iS2:如果其成绩≥80,则打印和,否则不打印。
S3:i+1→iS4:如果i≤50,返回S2,继续执行。否则算法结束
变量i作为下标,用来控制序号(第几个学生,第几个成绩)。当i超过50时,表示已对50个学生的成绩处理完毕,算法结束。02算法及算法描述例1-3
判定2000~2500年中的每一年是否闰年,将结果输出。分析:闰年的条件是:(1)能被4整除,但不能被100整除的年份都是闰年,如1996,2004年是闰年;(2)能被100整除,又能被400整除的年份是闰年。如1600,2000年是闰年。不符合这两个条件的年份不是闰年。02算法及算法描述设y为被检测的年份,算法可表示如下:S1:2000→yS2:若y不能被4整除,则输出y“不是闰年”。然后转到S6。S3:若y能被4整除,不能被100整除,则输出y“是闰年”。然后转到S6。S4:若y能被4整除,又能被100整除,又能被400整除,输出y“是闰年”,然后转到S6。S5:否则输出“不是闰年”。输出y“不是闰年”。S6:y+1→yS7:当y≤2500时,转S2继续执行,如y>2500,算法停止。02算法及算法描述02算法及算法描述
以上算法中每做一步都分别分离出一些范围(巳能判定为闰年或非闰年),逐步缩小范围,直至执行S5时,只可能是非闰年。
“其它”包括能被4整除,又能被100整除,而不能被400整除的那些年份(如1990)是非闰年。例1-4
求算法如下:02算法及算法描述S1:sign=1S2:sum=1S3:deno=2
S4:sign=(-1)×signS5:term=sign×(1/deno)S6:sum=sum+termS7:deno=deno+1S8:若deno≤100返回S4,否则算法结束。单词作变量名,以使算法更易于理解:sum表示累加和,deno是英文分母(denominator)缩写,sign代表数值的符号,term代表某一项。
反复执行S4到S8步骤,直到分母大于100为止。一共执行了99次循环,向sum累加入了99个分数。sum最后的值就是多项式的值。例1-5
对一个大于或等于3的正整数,判断它是不是一个素数。概念:所谓素数,是指除了1和该数本身之外,不能被其它任何整数整除的数。例如,13是素数。因为它不能被2,3,4,…,12整除。分析:判断一个数n(n≥3)是否素数的方法:将n作为被除数,将2到(n-1)各个整数轮流作为除数,如果都不能被整除,则n为素数。02算法及算法描述算法如下:S1:输入n的值S2:i=2(i作为除数)S3:n被i除,得余数rS4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束。否则执行S5S5:i+1→iS6:如果i≤n-1,返回S3。否则打印n“是素数”。然后结束。
实际上,n不必被2到(n-1)的整数除,只需被2到n/2间整数除,甚至只需被2到之间的整数除即可。02算法及算法描述02算法及算法描述有穷性:包含有限的操作步骤。确定性:算法中的每一个步骤都应当是确定的。有零个或多个输入:输入是指在执行算法时需要从外界取得必要的信息。有一个或多个输出:算法的目的是为了求解,“解”就是输出。有效性:算法中的每一个步骤都应当能有效地执行,并得到确定的结果。一个算法应该具有以下特点:算法的特性总结02算法及算法描述可以用不同的方法表示算法,常用的有:自然语言传统流程图结构化流程图伪代码PAD图算法的标准描述方法02算法及算法描述
自然语言就是人们日常使用的语言,可以是汉语或英语或其它语言。用自然语言表示通俗易懂,但文字冗长,容易出现“歧义性”。自然语言表示的含义往往不大严格,要根据上下文才能判断其正确含义,描述包含分支和循环的算法时也不很方便。因此,除了那些很简单的问题外,一般不用自然语言描述算法。用自然语言表示算法02算法及算法描述美国国家标准化协会ANSI(AmericanNationalStandardInstitute)规定了一些常用的流程图符号:起止框判断框处理框输入/输出框流向线连接点用流程图表示算法例1-6
将求5!的算法用流程图表示如果需要将最后结果打印出来,可在菱形框的下面加一个输出框。02算法及算法描述
例1-7
将例1.2的算法用流程图表示。打印50名学生中成绩在80分以上者的学号和成绩。02算法及算法描述例1-2
有50个学生,要求将他们之中成绩在80分以上者打印出来。设n表示学号,n1代表第一个学生学号,代表第i个学生学号。用G代表学生成绩,gi代表第i个学生成绩,算法表示如下:任务:将例1-3判定闰年的算法用流程图表示
用流程图表示算法要比用文字描述算法逻辑清晰、易于理解。02算法及算法描述02算法及算法描述流程图是表示算法的较好的工具。一个流程图包括以下几部分:(1)表示相应操作的框;(2)带箭头的流向线;(3)框内外必要的文字说明。注意:(1)各种不同框的入口线和出口线的条数限制。(2)流向线的汇集方法。小结Python语言的特点
1.简单易学、明确优雅、开发速度快
2.跨平台、可移植、可扩展、交互式、解释型、面向对象的动态语言
3.具有大量的标准库和第三方库
4.社区活跃,贡献者多,互帮互助
5.开源语言,发展动力巨大03Python语言03Python语言
Python语言主要存在三方面的缺点:
第一个缺点就是运行速度相对慢点,和C程序相比较慢,这是解释型语言的特点,Python语句在执行时会地翻译成CPU能理解的机器码,翻译过程非常耗时,而C语言是编译型语言,运行前直接编译成CPU能执行的机器码,执行起来非常快。
第二个缺点是GIL(GlobalInterpreterLock)全局解释器锁,这是一种防止多线程并发执行机器码的互斥锁,是设计Python语言时遗留的一个问题,其后果就是Python在进行多线程任务时候,其实是伪多线程,性能较差。
第三个缺点是Python2和Python3不兼容性。03Python语言搭建Python编程环境,需要完成以下步骤:1.下载Python解释器03Python语言2.安装Python解释器03Python语言3.测试Python安装04Python开发工具介绍Python自带的
IDLE
是指Python的集成开发环境,是Python语言官方提供的一个简易开发环境。IDLE是基于Python内置的Tkinter模块制作的。它提供了一个交互式的Shell(解释器)和一个简单的代码编辑器。它可以让你在一个窗口中输入和执行Python代码,并提供了基本的代码编辑功能,如语法高亮显示、代码缩进和自动补全等。04Python开发工具介绍IDLE使用步骤如下:1.启动IDLE2.IDLE的Shell界面04Python开发工具介绍3.创建文件4.编写Python程序(1)File(文件):包含文件相关的选项,如新建、打开、保存、退出等。(2)Edit(编辑):包含编辑相关的选项,如剪切、复制、粘贴、查找、替换等。(3)Format(格式):包含代码格式化相关的选项,如自动缩进、块缩进、行尾空格等。(4)Run(运行):包含运行代码的选项,如运行模块、运行自定义的PythonShell、重新启动等。(5)Options(选项):包含IDLE环境的各种选项设置,如字体、颜色、缩进等。(6)Windows(窗口):用于管理IDLE环境中的窗口,如打开新的Shell、关闭窗口等。(7)Help(帮助):提供有关IDLE的帮助和文档,包括IDLE快捷键、Python文档等。04Python开发工具介绍5.保存和运行程序04Python开发工具介绍PyCharm的安装与使用PyCharm是一种由JetBrains公司开发的集成开发环境(IDE),专门用于Python编程语言。它提供了许多功能和工具,旨在提高开发人员的生产力和代码质量。1.PyCharm的特点和功能(1)代码编辑器:PyCharm提供了一个强大的代码编辑器,具有自动完成、语法高亮、代码导航和代码重构等功能。(2)调试器:PyCharm内置了强大的调试器,允许开发人员逐行执行代码并检查变量的值。(3)代码版本控制:PyCharm集成了流行的代码版本控制系统,如Git、Mercurial和Subversion。(4)测试工具:PyCharm支持各种测试框架,如unittest、pytest和doctest。(5)代码分析:PyCharm具有强大的静态代码分析功能。(6)虚拟环境支持:PyCharm可以轻松管理Python的虚拟环境。它允许创建、配置和切换虚拟环境,以便在不同项目之间隔离和管理依赖关系。(7)插件生态系统:PyCharm具有丰富的插件生态系统。04Python开发工具介绍2.PyCharm的下载04Python开发工具介绍3.PyCharm的安装04Python开发工具介绍3.PyCharm的安装04Python开发工具介绍4.PyCharm的使用04Python开发工具介绍4.PyCharm的使用04Python开发工具介绍4.PyCharm的使用04Python开发工具介绍4.PyCharm的使用第2章面向对象程序设计面向对象的基本概念01类和对象类属性与实例属性方法020304构造函数与析构函数05多态性07类的继承0601面向对象的基本概念
为了解决大型软件设计危机,在20世纪80年代提出了面向对象程序设计(objectorientedprogramming,OOP)。面向对象程序设计是一种新的编程模式,这种编程模式的中心不再是程序的逻辑流程,而是软件或程序中的对象以及对象之间的关系。面向对象程序设计是针对大型软件的设计而提出的,它能使功能相对独立,能很好地做到代码重用,能使软件易于维护。01面向对象的基本概念抽象实例化抽象对象映射现实世界实体计算机世界类抽象数据类概念世界映射(1)对象对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。(2)对象的状态和行为对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。01面向对象的基本概念(3)类具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。01面向对象的基本概念(4)类的结构在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般--具体结构关系,整体--部分结构关系。①一般--具体结构称为分类结构(继承关系),也可以说是“或”关系,或者是“isa”关系。01面向对象的基本概念(4)类的结构在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般--具体结构关系,整体--部分结构关系。②整体--部分结构称为组装结构(组合关系),它们之间的关系是一种“与”关系,或者是“hasa”关系。01面向对象的基本概念01面向对象的基本概念三大特性封装把客观事物抽象并封装成对象继承允许使用现有类的功能,并在无需重新改写原来的类的情况下,对这些功能进行扩展多态性对象可以表示多个类型的能力02类和对象对象的创建和调用格式如下anObject=类名(参数列表)anObject.对象方法或anObject.对象属性class类名:
类体注意:(1)类使用关键字class声明,类名为有效的标识符(2)类体中可以定义属于类的属性、方法等(3)创建对象后,可访问其属性、调用其方法。(3)类---#定义学生类classStudent:def__init__(self,name):=name#初始化属性
defstudy(self):print(f"{}在学习...")#调用类zhangsan=Student("张三")zhangsan.study()#输出:张三在学习...01面向对象的基本概念02类和对象“万物皆对象”(Everythingisobject),这是python这种面向对象语言所倡导的理念。在C++中,1只是一个整型数,而不是一个对象。但在python中,1却是一个实实在在的对象,可以用dir(1)来显示它的属性。在python中,所有对象都有下面三个特征:*唯一的标识码(identity)*类型*内容(或称为值)一旦对象被创建,它的标识码就不允许更改。对象的标识码可以由内建函数id()获取,它是一个整型数。可以将它想象为该对象在内存中的地址,其实在目前的实现中标识码也就是该对象的内存地址。02类和对象46746200=0x02C94A581这个对象的标识码,也就是它在内存中的地址。>>>classc1:...pass...>>>obj=c1()>>>obj<__main__.c1instanceat0x02C94A58>>>>id(obj)46746200>>>id(1)4488231203类属性与实例属性Python对象的属性有实例属性和类属性 (1)实例属性 实例属性作为某个对象的属性,只为单独的特定的对象所拥有。一般有两种方式定义:方式一:实例属性不在类中,而在类外显示定义。方式二:类属性在类中的构造函数__init__中定义,定义时以self作为前缀。03类属性与实例属性classPeople:name='jack' #类属性name
p=People()p.age=12#实例属性age在类People之外定义print()#正确print(p.age)#正确print(P)#正确print(People.age)#错误03类属性与实例属性classPeople:name='jack'#__init__()是内置的构造方法,在实例化对象时自动调用
def__init__(self,age):self.age=agep=People(12)print()#正确print(p.age)#正确print(P)#正确print(People.age)#错误03类属性与实例属性(2)类属性 类属性是类本身的变量,又分为私有属性和公有属性。不像C++通过public和private关键字区别公有属性和私有属性,Python是以属性命名方式来区分,如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性。03类属性与实例属性classPeople:name='jack'#__init__()是内置的构造方法,在实例化对象时自动调用
def__init__(self,age,height):self.age=ageself.__height=heightp=People(12,110)print()#正确print(p.age)#正确print(p.__height)04方法实例方法类方法的第一个参数(self)通过对象实例调用类方法(@classmethod)属于类本身的方法静态方法(@staticmethod)与类的对象实例无关的方法04方法实例方法类方法的第一个参数(self)通过对象实例调用classDog:def__init__(self,name):=name#实例属性
defbark(self):#实例方法
print(f"{}汪汪!")#创建对象并调用实例方法dog1=Dog("旺财")dog1.bark()#输出:旺财汪汪!04方法类方法(@classmethod)属于类本身的方法classCar:brand="丰田"#类属性(所有汽车共享品牌)
@classmethoddefget_brand(cls):#类方法
returncls.brand#通过类名调用print(Car.get_brand())#输出:丰田#通过实例调用(不推荐)car1=Car()print(car1.get_brand())#输出:丰田04方法静态方法(@staticmethod)与类的对象实例无关的方法classCar:#类级别属性(所有实例共享)
DEFAULT_COLOR="黑色"
def__init__(self,brand):self.brand=brandself.color=Car.DEFAULT_COLOR#默认颜色
@staticmethoddefcalculate_mileage(distance,fuel):"""静态方法:计算里程数(公里/升)"""returndistance/fuel#使用示例car1=Car("丰田")#直接通过类名调用静态方法(不需要实例)mileage=Car.calculate_mileage(600,50)print(f"平均油耗:{mileage:.2f}公里/升")#输出:12.0004方法05构造函数classPerson:def__init__(self,name):=namedefsayHi(self):print('Hello,mynameis',)p=Person("zhou")p.sayHi()class
ClassName:
def
__init__(self,parameter1,parameter2,...):#初始化代码
self.attribute1=parameter1
self.attribute2=parameter2__init__
是Python的约定名称(不是关键字),必须包含
self
参数。每次创建实例时自动调用
__init__。05析构函数classCar:def__init__(self,n):self.num=nprint('numberis',self.num,'objectisborn...')def__del__(self):print('numberis',self.num,'objectisdead...')car1=Car(1)car2=Car(2)delcar1delcar206类的继承继承是为代码重用而设计的,当我们设计一个新类时,为了代码重用可以继承一个已设计好的类。在继承关系中,原来设计好的类称为父类,新设计的类称为子类。06类的继承派生类的声明class派生类名(基类1,[基类2,…]):类体声明派生类时,必须在其构造函数中调用基类的构造函数基类名.__init__(self,参数列表)06类的继承【例】继承的实现。classPerson(object):sex='male'def__init__(self,s1,s2):
self.IDcard=s1=s2
print('__init__(self)ofPerson')defhello(self,friend):
print('hello,',friend,'!
')06类的继承classStudent(Person):#子类Student,父类Persondef__init__(self,num):
self.number=num
deffun(self):
print(self.IDcard,,self.number,Student.sex)06类的继承classTeacher(Person):#子类Teachert,父类Persondef__init__(self,t,s1,s2):
self.title=tsuper(Teacher,self).__init__(s1,s2)
#调用父类的构造函数deffun(self):
print(self.IDcard,,self.title,
Teacher.sex)06类的继承#主程序stud1=Student('2012009')stud1.IDcard=='WangMing'stud1.fun()stud1.hello('Yang')teach1=Teacher('professor',,'YangLipin')Teacher.sex='female'teach1.fun()teach1.hello('Wang')07多态性方法重载方法重载实际上就是在子类中使用方法名与父类的方法名完全相同,从而重载父类的方法。如果仍需使用父类的该方法,需要在父类所生成的对象加‘.’方法名的形式调用。84class
BaseClass:
def
__init__(self):
=
"baseclass"
def
PrintName(self):
print(
+
":hello“)class
ChildClass(BaseClass):
def
PrintName(self):
BaseClass.PrintName(self)
print("Class2hello“)x
=
ChildClass()x.PrintName()[Dbg]>>>baseclass:helloClass2hello07多态性8507多态性classParent: defmyMethod(self):
print(
'Callingparentmethod')classChild(Parent): defmyMethod(self):
print('Callingchildmethod‘)c=Child()p=Parent()c.myMethod()#子类调用重载方法p.myMethod()#父类的方法输出:CallingchildmethodCallingparentmethod8607多态性运算符重载Python支持运算符重载。在C#中,运算符重载是通过使用关键字operator实现。Python的运算符重载方式较为简单,Python规定每一个类都默认内置了所有可能的运算符方法,只要重写这个方法,就可以实现针对该运算符的重载。2026/8/1787方法重载调用__init__构造器方法对象建立:X=Class()__del__析构方法对象回收__add__运算符+X+Y,X+=Y__or__运算符|(位或)X|Y,X|=Y__repr__,__str__打印printX,repr(X),str(X)__call__函数调用X()__getattr__点号运算(取属性)X.attr__setattr__属性赋值语句X.attr=value__getitem__索引运算X[key],没有__iter__时的for循环和其他迭代器__setitem__索引赋值语句X[key]=value__len__长度len(X)__cmp__比较X==Y(优先级比__lt__等低)__lt__小于比较X<Y__eq__等于比较X==Y__iadd__增强的加法+=X+=Y__iter__迭代运算用于循环、测试、理解、列表、映射等8807多态性classOpeClass(): def__init__(self):
self.a=11
self.b=22 def__add__(self,x): returnself.a+self.b def__sub__(self,x): returnself.a-self.ba=OpeClass()b=OpeClass()Print(a+b)Print(a-b)输出:
33-11第3章Python语法基础89Python编码规范01运算符和表达式Python数据类型输入与输出0203049001Python编码规范1.编程运行方式Python程序可以在交互模式编程或脚本编程模式下运行。(1)以交互模式运行:启动Python自带的IDLE或在命令提示符下运行python.exe回车,进入Python环境。例如:>>>print(‘欢迎使用Python’)欢迎使用Python(2)以脚本方式运行:对于大量代码的开发,经常采用以脚本方式运行,即利用编辑器输入Python代码,保存成*.py文件,然后运行。例如使用PyCharm编程程序、调试、运行。01Python编码规范2.Python标识符Python标识符是用来标识一个变量、函数、类、模块或其他对象的名称。(1)必须以下划线(_)或字母开头,后面接任意数量的下划线、字母或数字。(2)变量名区分大小写。Abc和abc是两个不同的变量。(3)禁止使用Python保留字(或称关键字)。01Python编码规范3.行和缩进
Python使用缩进来表示代码块,而不需要使用大括号{}。 缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。例如:
ifScore>90:print("A")else:print("B")01Python编码规范4.注释
Python中注释有单行注释,多行注释,批量注释。Python中单行注释以#开头,多行注释可以用多个#号或三引号'''
'''。5.多行语句
Python通常是一行写完一条语句,如果语句很长,我们可以使用反斜杠(\)来实现多行语句。6.同一行显示多条语句
Python可以在同一行中使用多条语句,语句之间使用分号(;)分割。02运算符和表达式
Python中有丰富的运算符,包括算术运算符、关系运算符、字符串运算符、逻辑运算符。表达式是由运算符和圆括号将常量、变量和函数等按一定规则组合在一起的式子。根据运算符的不同,Python有算术表达式、关系表达式、字符串表达式、逻辑表达式。02运算符和表达式算术运算符和表达式
算数运算符包括加、减、乘、除、取余、取整、幂运算。基本取余02运算符和表达式算术运算符和表达式
算数运算符包括加、减、乘、除、取余、取整、幂运算。取整幂02运算符和表达式算术运算符和表达式
算数运算符包括加、减、乘、除、取余、取整、幂运算。取整幂02运算符和表达式赋值运算符和表达式
赋值运算除了一般的赋值运算(=)外,还包括各种复合赋值运算如+=,-=,*=,/=等。其功能是把赋值号右边的值赋给左边变量所在的存储单元。运算符说明实例=直接赋值x=3;将3的值赋给x;+=加法赋值x+=3;等同于x=x+3;-=减法赋值x-=3;等同于x=x-3;*=乘法赋值x*=3;等同于x=x*3;/=除法赋值x/=3;等同于x=x/3;**=幂赋值x**=3;等同于x=x**3;//=整除赋值x//=3;等同于x=x//3;02运算符和表达式
逻辑运算符和表达式
逻辑运算符是执行逻辑运算的运算符。逻辑运算也称布尔运算,运算结果是逻辑真(True)或逻辑假(False)。Python常用的逻辑运算符有not、and和or操作。100运算符说明实例and逻辑与XandY:X,Y同时为真返回True,否则返回Falseor逻辑或XorY:X,Y只要其中一个为真返回True,都为假时则返回Falsenot逻辑非notX:X为真返回False,X为假返回True02运算符和表达式
关系运算符和表达式
关系运算符也称比较运算符,用来对两个表达式的值进行比较,比较的结果为逻辑值。若关系成立返回True,若关系不成立返回False。101运算符说明实例==等于(5==3)返回False!=不等于(5!=3)返回True<>不等于(‘ABC’<>’abc’)返回True>大于(5>8)返回False。<小于(5<8)返回True。>=大于等于(5>=8)返回False。02运算符和表达式字符串运算符和表达式
在Python中同样提供了对字符串进行相关处理的操作。102运算符说明实例+字符串连接a+b输出结果:HelloPython*重复输出字符串a*2输出结果:HelloHello[]通过索引获取字符串中字符a[1]输出结果e[:]截取字符串中的一部分a[1:4]输出结果ellin成员运算符:如果字符串中包含给定的字符返回True‘H’ina输出结果Truenotin如果字符串中不包含给定的字符返回True‘M’notina输出结果Truer/R原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。print(r'\n')prints\n和printR'\n'prints\n%格式字符串print("%d+%d=%d"%(3,5,8))02运算符和表达式字符串运算符和表达式字符串的格式化
编写程序的过程中,经常需要进行格式化输出,Python中提供了字符串格式化操作符“%”,非常类似C语言里的printf()函数的字符串格式化(C语言中也使用%)。格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式。Python用一个tuple将多个值传递给模板,每个值对应一个格式符。
Python中格式符可以包含的类型,见下表。10302运算符和表达式字符串运算符和表达式字符串的格式化104格式符说明%c转换成字符(ASCII码值,或者长度为一的字符串)%r优先用repr()函数进行字符串转换%s优先用str()函数进行字符串转换%d/%i转成有符号十进制数%u转成无符号十进制数%o转成无符号八进制数%x/%X转成无符号十六进制数(x/X代表转换后的十六进制字符的大小写)%e/%E转成科学计数法(e/E控制输出e/E)%f/%F转成浮点数(小数部分自然截断)%g/%G%e和%f/%E和%F的简写%%输出%(格式化字符串里面包括百分号,那么必须使用%%)02运算符和表达式字符串运算符和表达式字符串的格式化
通过“%”可以进行字符串格式化,但是“%”经常会结合下面的辅助符一起使用。105辅助符号说明*定义宽度或者小数点精度-左对齐+在正数前面显示加号(+)#在八进制数前面显示零(0),在十六进制前面显示“0x”或者“0X”(取决于用的是"x"还是"X")0显示的数字前面填充“0”而不是默认的空格(var)映射变量(通常用来处理字段类型的参数)m.nm是显示的最小总宽度,n是小数点后的位数02运算符和表达式
位运算符和表达式
按位运算符是把数字看作二进制进行计算,Python中的按位运算符及其表达式如表。106运算符说明实例&按位与X&Y|按位或X|Y^按位异或X^Y~按位取反~X<<按位左移X<<Y>>按位右移X>>Y02运算符和表达式
位运算符和表达式按位与:两个操作数X、Y按相同位置的二进制位进行与操作,两个位置上都是1时,位的与结果为1,否则为0。按位或:两个操作数X、Y按相同位置的二进制位进行或操作,只要有一个位置上是1其结果为1,否则为0。按位异或:两个操作数X、Y按相同位置的二进制位进行异或操作,位置上的数相同时结果为0,否则为1。按位取反:操作数X的二进制位中,1取反为0,0取反为1,符号位也参与操作。按位左移:两个操作数X、Y,将X按二进制形式向左移动Y位,末尾补0,符号位保持不变。向左移动一位等同于乘以2。按位右移:两个操作数X、Y,将X按二进制形式向右移动Y位,符号位保持不变。向右移动一位等同于除以2。10702运算符和表达式
运算符的优先级
每一种运算符都有一定的优先级,用来决定它在表达式中的运算次序。表2-11列出了各类运算符的优先级,运算优先级依次从高到低。如果表达式中包含括号,Python会首先计算括号内的表达式,然后将结果用在整个表达式中。如当计算表达式a+b*(c-d)/e时,则运算符的运算次序依次为:()、*、/、+。优先级如下表。10802运算符和表达式
运算符的优先级
109运算符说明**幂运算~按位取反-负号*、%、/、//乘法、取余、除法、取余+、-加法、减法<<、>>向左移位、向右移位&按位与^按位异或|按位或<、<=、>、>=、==、!=小于、小于等于、大于、大于等于、相等、不等notandor逻辑非、逻辑与、逻辑或03Python数据类型
Python3中有六个标准的数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)、Dictionary(字典)。11003Python数据类型Number(数字)
数字是程序处理的一种基本数据,Python核心对象包含的常用数字类型有:整型(int)、浮点型(float)、布尔型(bool)以及与之相关的语法和操作。同时Python提供了复数(complex)以及无穷精度的长整型(long)。其数字类型的复杂程度按照整型、长整型、浮点数、复数的顺序依次递增。此外,Python还允许将十进制的整型数表示为二进制、八进制、十进制。11103Python数据类型Number(数字)(1)整型:整型常量就是不带小数点的数,但有正负之分,例如:1,100,-8080,0等等。在Python3.x中不再区分整型和长整型。(2)浮点型:浮点型由整数部分和小数部分组成,如1.23,3.14,-9.01等等。浮点型也可以使用科学计数法表示(2.5e2=2.5x102=250)。(3)布尔型:bool只有两个值True和False。(4)复数:复数常量表示为“实部+虚部”形式,虚部以j或J结尾。可用complex函数来创建复数,其函数的基本格式为:complex(实部,虚部)。使用type()函数可以查询变量所指的对象类型。11203Python数据类型String(字符串)
字符串是一个有序的字符的集合,用来存储和表现基于文本的信息。 Python字符串有多种表示方式。
1.单引号和双引号
在表示字符常量时,单引号和双引号可以互换,可以用单引号或者是双引号两种形式返回相同类型的对象。同时单引号字符串可以嵌入双引号或在双引号中嵌入单引号。11303Python数据类型String(字符串) 2.三引号
在表示字符常量时,三引号通常用来表示多行字符串,也被称为块字符。在显示时,字符串中的各种控制字符以转义字符显示。三引号还可以作为文档注释,被三引号包含的代码作为多行注释使用。
3.转义字符
在字符中使用特殊字符时,Python用反斜杠(\)转义字符,如下表。11403Python数据类型String(字符串)115转义字符说明\\反斜线\’单引号\”双引号\a响铃符\b退格符\f换页符\n换行符\r回车符\t水平制表符\v垂直制表符\0Null,空字符串\ooo八进制值表示ASCII码对应字符\xhh十六进制值表示ASCII码对应字符03Python数据类型String(字符串) 4.带r或R前缀的Raw字符串
由于在Python中不会解析其字符串中的转义字符,利用Raw字符串来解决打开Windows系统中文件路径的问题。例如:
path=open(‘d:\temp\newpy.py’,’r’) Python会将文件名字符串中的\t和\n处理为转义字符。为避免这种情况,可将文件名中的反斜线表示为转移字符,即为:
path=open(‘d:\\temp\\newpy.py’,’r’)
另一种表示方法,将反斜线用正斜线表示,即为:
path=open(‘d:/temp/newpy.py’,’r’)
或者,使用Raw字符串来表示文件名字符串,例如:path=open(r‘d:\temp\newpy.py’,’r’),这里r或R不区分大小写。11603Python数据类型变量及其赋值
变量是计算机内存中的一块区域,存储规定范围内的值,其值在程序中可以改变。C、C++和Java等都属于静态数据类型语言,要求变量在使用前必须声明其数据类型。而Python属于动态数据类型语言,类型是在运行过程中自动决定,不需要通过代码声明,可以直接使用赋值运算符(=)对其进行赋值操作,根据所赋值来决定其数据类型。Python中变量的命名遵循Python的标识符命名规则。
Python支持多种格式的赋值语句:
1.简单赋值
简单赋值用于为一个变量建立对象引用。
2.序列赋值
序列赋值指等号左侧是元组、列表表示的多个变量名,右侧是元组、列表或字符串等序列表示的值。序列赋值可以一次性为多个变量赋值。11703Python数据类型变量及其赋值
3.多目标赋值
多目标赋值指用连续的多个“=”为变量赋值。
>>>a=b=c=10#将10赋值给变量a,b,c
>>>a,b,c
(10,10,10)
4.增强赋值
增强赋值指运算符与赋值相结合的赋值语句。
>>>a=5
>>>a+=10#等价于a=a+10
>>>a
15
11804输入与输出1.输出语句print()
使用print()函数可以数据显示到屏幕上,其功能类似C语言中的printf()函数。print()可以输出字符串、数字类型,也可以输出数值、布尔、列表、字典等类型,同时指出格式化输出。 print()可以输出多个变量,中间用逗号隔开。2.输入语句input() input()函数可以将用户输入字符串同时保存到变量中。11904输入与输出【例3-6】print()函数的应用举例。>>>print(10) #输出数值常量
10>>>print('HelloWorld') #输出字符串常量HelloWorld>>>x=100>>>print(x) #输出数值型变量100>>>s='HelloWorld' #输出字符串变量>>>print(s)HelloWorld12004输入与输出【例3-7】input()函数的应用举例。name=input('请输入您的名字:') #提示用户输入名字print('你刚才输入的是%s'%name) #显示你刚才输入的字符串%s为字符串转义temp=input(‘请输入一个数字,a=') #输入第一个数a=int(temp) #将输入的数转换为数值型temp=input('请输入第二个数字,b=')b=int(temp)c=a+b #计算a+bprint('a+b=%d'%c) #打印a+b的值c=a-b #计算a-bprint('a-b=%d'%c) #打印a-b的值121第四章组合数据类型序列01集合字典020301序列为什么需要列表思考:有一个人的姓名(TOM)怎么在程序中存储?答:字符串变量思考:如果一个班级100位学生,每个人的姓名都要存储,应该如何书写程序?声明100个变量吗?答:No,我们使用列表就可以了,列表一次可以存储多个数据下面我们来详细学习列表(list)类型。列表的定义基本语法:列表内的每一个数据,称之为元素以[]作为标识列表内每一个元素之间用,逗号隔开列表的定义方式:使用[]的方式定义列表注意:列表可以一次存储多个数据,且可以为不同的数据类型,支持嵌套注意事项嵌套列表的定义列表的下标(索引)如何从列表中取出特定位置的数据呢?我们可以使用:下标索引如图,列表中的每一个元素,都有其位置下标索引,从前向后的方向,从0开始,依次递增我们只需要按照下标索引,即可取得对应位置的元素。列表的下标(索引)-反向或者,可以反向索引,也就是从后向前:从-1开始,依次递减(-1、-2、-3......)如图,从后向前,下标索引为:-1、-2、-3,依次递减。列表的常用操作列表除了可以:定义使用下标索引获取值以外,列表也提供了一系列功能:添加元素删除元素清空列表修改元素统计元素个数等等功能,这些功能我们都称之为:列表的方法修改特定位置(索引)的元素值:
语法:列表[下标]=值
可以使用如上语法,直接对指定下标(正向、反向下标均可)的值进行:重新赋值(修改)插入元素:语法:列表.insert(下标,元素),在指定的下标位置,插入指定的元素追加元素:语法:列表.append(元素),将指定元素,追加到列表的尾部删除元素:
语法1:del列表[下标]语法2:列表.pop(下标)删除某元素在列表中的第一个匹配项
语法:列表.remove(元素)清空列表内容,语法:列表.clear()统计某元素在列表内的数量
语法:列表.count(元素)列表的查询功能统计列表内,有多少元素
语法:len(列表)可以得到一个int类型的数字,表示列表内的元素数量嵌套列表如果列表是嵌套的列表,同样支持下标索引如图,下标就有2个层级了。列表的方法-总览编号使用方式作用1列表.append(元素)向列表中追加一个元素2列表.extend(容器)将数据容器的内容依次取出,追加到列表尾部3列表.insert(下标,元素)在指定下标处,插入指定的元素4del列表[下标]删除列表指定下标元素5列表.pop(下标)删除列表指定下标元素6列表.remove(元素)从前向后,删除此元素第一个匹配项7列表.clear()清空列表8列表.count(元素)统计此元素在列表中出现的次数9列表.index(元素)查找指定元素在列表的下标找不到报错ValueError10len(列表)统计容器内有多少元素列表的特点经过上述对列表的学习,可以总结出列表有如下特点:可以容纳多个元素(上限为2**63-1、9223372036854775807个)可以容纳不同类型的元素(混装)数据是有序存储的(有下标序号)允许重复数据存在可以修改(增加或删除元素等)练习案例:常用功能练习有一个列表,内容是:[21,25,21,23,22,20],记录的是一批学生的年龄请通过列表的功能(方法),对其进行定义这个列表,并用变量接收它追加一个数字31,到列表的尾部追加一个新列表[29,33,30],到列表的尾部取出第一个元素(应是:21)取出最后一个元素(应是:30)查找元素31,在列表中的下标位置为什么需要元组思考:列表是可以修改的。如果想要传递的信息,不被篡改,列表就不合适了。元组同列表一样,都是可以封装多个、不同类型的元素在内。但最大的不同点在于:元组一旦定义完成,就不可修改所以,当我们需要在程序内封装数据,又不希望封装的数据被篡改,那么元组就非常合适了定义元组元组定义:定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。注意事项注意:元组只有一个数据,这个数据后面要添加逗号元组的相关操作-注意事项不可以修改元组的内容,否则会直接报错元组的相关操作编号方法作用1index()查找某个数据,如果数据存在返回对应的下标,否则报错2count()统计某个数据在当前元组出现的次数3len(元组)统计元组内的元素个数元组由于不可修改的特性,所以其操作方法相对少。注意事项元组的特点经过上述对元组的学习,可以总结出列表有如下特点:可以容纳多个数据可以容纳不同类型的数据(混装)数据是有序存储的(下标索引)允许重复数据存在不可以修改(增加或删除元素等)多数特性和list一致,不同点在于不可修改的特性。练习案例:元组的基本操作定义一个元组,内容是:('周杰轮',11,['football','music']),记录的是一个学生的信息(姓名、年龄、爱好)请通过元组的功能(方法),对其进行查询其年龄所在的下标位置查询学生的姓名删除学生爱好中的football增加爱好:coding到爱好list内练习案例:元组的基本操作#定义元组student_info=('周杰轮',11,['football','music'])#查询年龄所在的下标位置age_index=student_info.index(11)print("年龄所在的下标位置是:",age_index)#查询学生的姓名student_name=student_info[0]print("学生的姓名是:",student_name)#删除学生爱好中的'football'#注意:元组本身不能直接修改,但可以修改元组内的可变对象(如列表)student_info[2].remove('football')print("删除'football'后的爱好列表:",student_info[2])#增加爱好'coding'到爱好列表内student_info[2].append('coding')print("增加'coding'后的爱好列表:",student_info[2])字符串就是一串字符,是编程语言中表示文本的数据类型。在Python中可以使用一对双引号"或者一对单引号'定义一个字符串。字符串是以单引号或者双引号括起来的任意文本,也可以是以三引号'''或者"""引起来的任意文本。字符串(String)字符串的下标(索引)和列表、元组一样,字符串也可以通过下标进行访问从前向后,下标从0开始从后向前,下标从-1开始同元组一样,字符串是一个:无法修改的数据容器。所以:修改指定下标的字符
(如:字符串[0]=“a”)移除特定下标的字符
(如:del字符串[0]、字符串.remove()、字符串.pop()等)追加字符等
(如:字符串.append())这些操作均无法完成。如果必须要做,只能得到一个新的字符串,旧的字符串是无法修改的字符串的常用操作查找特定字符串的下标索引值
语法:字符串.index(字符串)字符串的常用操作字符串的替换语法:字符串.replace(字符串1,字符串2)功能:将字符串内的全部:字符串1,替换为字符串2注意:不是修改字符串本身,而是得到了一个新字符串哦可以看到,字符串name本身并没有发生变化而是得到了一个新字符串对象字符串的常用操作字符串的分割语法:字符串.split(分隔符字符串)功能:按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中注意:字符串本身不变,而是得到了一个列表对象可以看到,字符串按照给定的<空格>进行了分割,变成多个子字符串,并存入一个列表对象中。字符串的常用操作字符串的规整操作(去前后空格)语法:字符串.strip()字符串的规整操作(去前后指定字符串)语法:字符串.strip(字符串)注意,传入的是“12”其实就是:”1”和”2”都会移除,是按照单个字符。字符串的常用操作统计字符串中某字符串的出现次数语法:字符串.count(字符串)字符串的常用操作统计字符串的长度语法:len(字符串)可以看出:数字(1、2、3...)字母(abcd、ABCD等)符号(空格、!、@、#、$等)中文均算作1个字符,所以上述代码,结果为20字符串常用操作汇总编号操作说明1字符串[下标]根据下标索引取出特定位置字符2字符串.index(字符)查找给定字符的第一个匹配项的下标3字符串.replace(字符串1,字符串2)将字符串内的全部字符串1,替换为字符串2不会修改原字符串,而是得到一个新的4字符串.split(字符串)按照给定字符串,对字符串进行分隔不会修改原字符串,而是得到一个新的列表5字符串.strip()字符串.strip(字符串
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 食品安全宣传周的个人活动总结
- 市质监工作总结报告
- 保险风险识别与可视化分析
- 大模型在风险预测中的潜力
- 2026中国虚拟现实内容开发生态构建与商业化路径研究报告
- 2026中国投资增值行业市场现状供需分析及投资评估规划分析研究报告
- 2026中国智能手机摄像头技术市场现状供需分析及投资布局规划研究报告
- 2026中国图书音像零售连锁行业市场现状供需分析及投资评估规划分析研究报告
- 2026燃料电池汽车制造行业市场供需分析及投资评估规划分析报告
- 2026清洁能源行业市场前景分析研究与产业投资策略报告
- 2026下半年上海杨浦区卫健系统事业单位专业技术人员招聘93人笔试题库附参考答案详解【模拟题】
- 2026年海南省生态环境监测中心公开招聘事业编制人员(第1号)考试备考题库及答案详解
- 2026年形势与政策题目及答案
- 企业档案盘库管理办法
- 2026年急诊科心电监护仪规范使用护理操作
- 2026年四川省内江市辅警考试真题及答案
- 重庆市“五方面人员”选拔考试题型及答案(完整版)
- 医院医疗质量管理与考核标准及奖惩制度
- 标书制作全流程培训2026版课件
- 2026年生态环境保护培训试题(含答案)
- 2026年电力交易员职业能力水平评价中级题库
评论
0/150
提交评论