Python电子教案3-2 基本数据类型PPT_第1页
Python电子教案3-2 基本数据类型PPT_第2页
Python电子教案3-2 基本数据类型PPT_第3页
Python电子教案3-2 基本数据类型PPT_第4页
Python电子教案3-2 基本数据类型PPT_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章 基本数据类型,字符串类型及其操作,字符串是字符的序列表示,可以由一对单引号()、双引号()或三引号()构成,其中,单引号和双引号都可以表示单行字符串,两者作用相同。使用单引号时,双引号可以作为字符串的一部分;使用双引号时,单引号可以作为字符串的一部分。三引号可以表示单行或者多行字符串。三种表示方式如下,字符串类型,单引号字符串: 单引号表示,可以使用双引号作为字符串的一部分 双引号字符串: 双引号表示,可以使用单引号作为字符串的一部分 三引号字符串: 三引号表示可以使用双引号,字符串类型,打印字符串的Python运行结果如下,注意其中的引号部分:,字符串类型,input()函数将用户输

2、入的内容当作一个字符串类型,这是获得用户输入的常用方式。print()函数可以直接打印字符串,这是输出字符串的常用方式。如下例子展示了如何用变量name来存储用户的名字,再输出这个变量的内容:,字符串类型,第2.2.4节已经介绍,字符串包括两种序号体系:正向递增序号和反向递减序号。如果字符串长度为L,正向递增需要以最左侧字符序号为0,向右依次递增,最右侧字符序号为L-1;反向递减序号以最右侧字符序号为-1,向左依次递减,最左侧字符序号为-L。这两种索引字符的方法可以在一个表示中使用。,字符串类型,Python字符串也提供区间访问方式,采用N: M格式,表示字符串中从N到M(不包含M)的子字符串

3、,其中,N和M为字符串的索引序号,可以混合使用正向递增序号和反向递减序号。如果表示中M或者N索引缺失,则表示字符串把开始或结束索引值设为默认值。,字符串类型,字符串以Unicode编码存储,因此,字符串的英文字符和中文字符都算作1个字符。观察下面实例:,字符串类型,反斜杠字符()是一个特殊字符,在字符串中表示“转义”,即该字符与后面相邻的一个字符共同组成了新的含义。例如:n表示换行、表示反斜、表示单引号、”表示双引号、t表示制表符(TAB)等。例如:,字符串类型,Python提供了5个字符串的基本操作符,如表3.10所示。,基本的字符串操作符,与操作符有关的实例如下:,字符串使用实例,程序读入

4、一个表示星期几的数字(1-7),输出对应的星期字符串名称 例如:输入3,返回“星期三”。代码如下: 运行结果如下:请输入星期数字(1-7): 3 星期三,微实例3.1:获取星期字符串,微实例3.1通过在字符串中截取适当的子串来实现星期名称的查找。问题的关键在于找出子串的剪切位置。因为每个星期日期的缩写都由3个字符组成,如果知道星期日期字符串的起始位置,就能很容易获得缩写子串。 通过下面语句,可以获得从起始位置pos开始且长度为3的子串: weekAbbrev = weekstrpos: pos+3,字符串使用实例,使用字符串作为查找表的缺点是,所剪切的子字符串长度必须相同。如果各缩写表示长度不

5、同,还需要其他语句辅助 例如,请读者思考,该如何实现一个“获取月份字符串”呢?要求根据1-12的数字返回月份名称。,字符串使用实例,字符串中可以增加特殊的格式化控制字符,用来输出特殊效果。特殊的格式化控制字符使用反斜杠()开头,常用控制字符如下: a: 蜂鸣,响铃 b:回退,向后退一格 f:换页 n:换行,光标移动到下行首行 t:水平制表 r:回车,光标移动到本行首行 v:垂直制表 0:NULL,什么都不做,特殊的格式化控制字符,Python解释器提供了一些内置函数,详细请参考5.8节。其中,有6个函数与字符串处理相关,如表3.11所示。,内置的字符串处理函数,len(x)返回字符串x的长度,

6、Python 3以Unicode字符为计数基础,因此,字符串中英文字符和中文字符都是1个长度单位 str(x)返回x的字符串形式,其中,x可以是数字类型或其他类型,内置的字符串处理函数,每个字符在计算机中可以表示为一个数字,字符串则以数字序列的方式存储在计算机中。目前,计算机系统使用的一个重要编码是ASCII编码,该编码用数字0-127表示计算机键盘上常见的字符以及一些被称为控制代码的特殊值。例如,大写字母A-Z用65-90表示,小写字母a-z用97-122表示。,内置的字符串处理函数,chr(x)和ord(x)函数用于在单字符和Unicode编码值之间进行转换。chr(x)函数返回Unico

7、de编码对应的字符,其中,Unicode编码x的取值范围是0到1,114,111(即十六进制数0 x10FFFF)。ord(x)函数返回单字符x对应的Unicode编码。如下:,内置的字符串处理函数,设想在某些情况下给朋友传递字条信息,但又不希望传递中途被第三方看懂这些信息,因此需要对字条信息进行加密处理。传统加密算法很多,这里介绍一种非常简单的加密算法凯撒密码。顾名思义,凯撒密码是古罗马凯撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为该字符后面第三个字符,对应关系如下: 原文:A B C D E F G H I J K L M N O P Q R S

8、T U V W X Y Z 密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C,微实例3.2:恺撒密码,假设用户可能使用的信息仅包括小写字母a-z,则该微实例对应的加密代码如下:,微实例3.2:恺撒密码,原文字符P,其密文字符C满足如下条件: C = ( P + 3 ) mod 26 解密方法反之,满足: P = ( C 3 ) mod 26,微实例3.2:恺撒密码,假设用户可能使用的信息仅包括小写字母a-z,则该微实例对应的加密代码如下:,微实例3.2:恺撒密码,微实例运行结果如下:,微实例3.2:恺撒密码,在Python解释器内部,

9、所有数据类型都采用面向对象方式实现,封装为一个类。字符串也是一个类,它具有类似.b()形式的字符串处理函数。在面向对象字典里,这类函数被称为“方法”。字符串类型共包含43个内置方法。鉴于部分内置方法并不常用,限于篇幅,这里仅介绍15个常用的内置方法,如表3.12所示。,内置的字符串处理方法,内置的字符串处理方法,内置的字符串处理方法,str.split(sep=None, maxsplit=-1)方法返回一个列表,列表是一种存储多个数据的数据类型,第6.2节将详细介绍,其中,分割str的标识符是sep,默认分隔符为空格。如果给出maxsplit参数,则只分割前maxsplit个字符,默认max

10、split参数可以不给出。 str.center(width, fillchar)方法返回长度为width的字符串,其中,str处于新字符串中心位置,两侧新增字符采用fillchar填充,当width小于字符串长度时,返回str。,内置的字符串处理方法,str.zfill(width)方法返回长度为width的字符串,如果字符串长度不足width时,在左侧添加字符“0”,但如果str最左侧是字符“+“或者”-”,则从第二个字符左侧添加“0”,当width小于字符串长度时,返回str,内置的字符串处理方法,字符串类型的格式化,为什么会有字符串类型的格式化问题呢?例如,一个程序希望输出如下内容:

11、“2016-12-31: 计算机PYTHON的CPU占用率为10%。” 其中,下划线内容可能会变化,需要由特定函数运算结果进行填充,最终形成上述格式字符串作为输出结果。字符串格式化用于解决字符串和变量同时输出时的格式安排。,format()方法的基本使用,字符串format()方法的基本使用格式是: .format() 由一系列的槽组成,用来控制修改字符串中嵌入值出现的位置,其基本思想是将format()方法的中的参数按照序号关系替换到的槽中。槽用大括号()表示,如果大括号中没有序号,则按照出现顺序替换,format()方法的基本使用,如图3.2所示。如果大括号中指定了使用参数的序号,按照序号

12、对应参数替换,如图3.3所示。调用format()方法后会返回一个新的字符串,参数从0开始编号。,format()方法的基本使用,format()方法的基本使用,format()方法可以非常方便地连接不同类型的变量或内容,如果需要输出大括号,采用表示,表示,例如:,format()方法的基本使用,format()方法中的槽除了包括参数序号,还可以包括格式控制信息。此时,槽的内部样式如下: : 其中,用来控制参数显示时的格式,格式内容如图3.4所示。,format()方法的格式控制,format()方法的格式控制,包括:,6个字段,这些字段都是可选的,可以组合使用,这里按照使用方式逐一介绍 、和

13、是3个相关字段。 指当前槽的设定输出字符宽度,如果该槽对应的format()参数长度比设定值大,则使用参数实际长度。如果该值的实际位数小于指定宽度,则位数将被默认以空格字符补充。,format()方法的格式控制,指参数在内输出时的对齐方式,分别使用和三个符号表示左对齐、右对齐和居中对齐。 指内除了参数外的字符采用什么方式表示,默认采用空格,可以通过更换。,format()方法的格式控制,format()方法的格式控制,表示两个含义,由小数点(.)开头。对于浮点数,精度表示小数部分输出的有效位数。对于字符串,精度表示输出的最大长度,format()方法的格式控制,表示输出整数和浮点数类型的格式规

14、则。 b: 输出整数的二进制方式; c: 输出整数对应的Unicode字符; d: 输出整数的十进制方式; o: 输出整数的八进制方式; x: 输出整数的小写十六进制方式; X: 输出整数的大写十六进制方式;,format()方法的格式控制,对于浮点数类型,输出格式包括4种: e: 输出浮点数对应的小写字母e的指数形式; E: 输出浮点数对应的大写字母E的指数形式; f: 输出浮点数的标准浮点形式; %: 输出浮点数的百分形式。 浮点数输出时尽量使用表示小数部分的宽度,有助于更好控制输出格式。,format()方法的格式控制,文本进度条,进度条是计算机处理任务或执行软件中增强用户体验的重要手段

15、,它能够实时显示任务或软件的执行进度,十分常用。本节将利用Python字符串处理方法实现文本进度条功能。 最简单的,利用print()函数实现简单的非刷新文本进度条。基本思想是按照任务执行百分比将整个任务划分为100个单位,每执行N%输出一次进度条。每一行输出包含进度百分比,代表已完成的部分(*)和未完成的部分(.)的两种字符,以及一个跟随完成度前进的小箭头,简单的开始,%10 *-.,简单的开始,由于程序执行速度远超过人眼的视觉停留时间,直接进行字符输出几乎是瞬间完成,不利于观察。为了模拟任务处理的时间效果,调用Python标准时间库time,使用time.sleep(t)函数将当前程序暂时

16、挂起t秒,t可以是小数。由此可以接近真实的模拟进度条效果输出。,简单的开始,默认情况下,print()函数在输出结尾处会自动产生一个n,即换行符,从而让光标自动移动到下一行行首,这样上一步输出依旧保存在界面上。 采用for循环和print()函数构成程序的主体部分,输出百分比最高为3位数据,为了使输出显得整齐,可以使用:3.0f格式化百分比部分。这个简单的文本进度条代码如下。变量scale表示输出进度条的精度,读者可以修改这个值观察效果。,简单的开始,简单的开始,简单的开始,常用的计算机系统中都有进度条,这些进度条一般只在一行中改变进度比例,与实例代码4.1不同。简单说,这个不同在于原地输出和

17、动态刷新,其基本思想是将每一次进度输出都固定在同一行,并不断地用新生成的字符串覆盖之前的输出,形成进度条不断刷新的动态效果。这种效果简称为“单行动态刷新”,可以通过print()函数实现。,单行动态刷新,采用print()函数的具体方法是:在print()函数中更换参数end的默认值为,即每次使用prin()函数输出时不换行。此时,系统输出指针还停留在上一次输出的行尾,下一次输出在字符串前部增加转义符r,该转义符把输出指针移动到行首而不换行。动态刷新一个百分比的完整代码如下:,带刷新的文本进度条,单行动态刷新,上述程序在IDLE中的执行效果如图,为什么输出没有单行刷新呢? 这是因为IDLE本身

18、屏蔽了单行刷新功能,如果希望获得刷新效果,请使用控制台的命令行执行e4.2TextProgressBar.py程序。以Windows系统为例,启动命令行工具(system32cmd.exe),选择到e4.2TextProgressBar.py文件所在目录执行: :python e4.2TextProgressBar.py,单行动态刷新,将前两小节的程序合并起来,再添上开始和结束提示语,就可以很好的实现带刷新的文本进度条。为了进一步提高用户体验,在文本进度条中增加进程运行时间的监控,这里采用time库中的time.clock()函数。time.clock()函数一般多次出现,第一次调用时计时开始,同一程序中的第二次及后续调用时返回与第一

温馨提示

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

评论

0/150

提交评论