购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

任务二
处理字符串数据

Python的基本数据类型,除了数值型数据外,还有字符串。字符串是用''或""括起来的字符序列。字符串的类型为str,str( )也可以作为函数进行调用,用于创建字符串对象。使用str( )可以将对象转换为字符串。字符串可以使用运算符+进行连接,得到一个新字符串,也可以用*复制字符串。

微课

活动一 从身份证号码中提取出生日期

【问题描述】

输入一个身份证号码,从这个号码中提取出身份证主人的出生日期。

●输入数据:

请输入身份证号码:500101200001018456

●输出结果:

出生日期是:2000 年 01 月 01 日

【题前思考】

根据问题描述,填写表 2-2-1。

表 2-2-1 问题分析

【解题思路】

身份证号码是字符串,可以用索引获取单个字符,用切片获取字符串中的多个字符。字符串的索引号可以是正数,表示从左向右的序号,也可以是负数,表示从右向左的序号。

【程序代码】

【代码分析】

①:num[6:10]表示身份证号码第 6 位到第 9 位的字符构成的一个切片,第一个字符下标为 0,不包括右边界 10。切片的一般格式为num[start:end],表示字符串中,下标从start到end(不包含)的字符构成的新字符串。索引序号可以是正数(从左向右),也可以是负数(从右向左),如图 2-2-1 所示。

图 2-2-1 字符串序列位置索引

②:输出出生年月日,字符串中的%是占位符,将其他变量置入字符串指定位置以生成新字符串。%s代表将对应输出数据转换为字符串格式(%d表示整数,%f表示浮点数)。字符串后的%将其后表达式列表中的项依次映射到字符串中,替换其中的占位符,如图 2-2-2 所示。

图 2-2-2 格式转换映射图

【技术全貌】

切片是从字符串序列中取出一部分字符序列构成一个新字符串的操作,字符串的切片语法格式一般有 3 种,见表 2-2-2。

内置类型及运算

表 2-2-2 切片操作的语法格式

一展身手

编写一个程序,提示用户输入一个 5 位数,并以反向顺序输出。如输入:12345,输出:54321。程序流程图如图 2-2-3 所示。

图 2-2-3 程序流程图

活动二 对齐文本

【问题描述】

将字符串“hello Python”赋给一个变量,再以居中对齐、左对齐、右对齐的方式格式化输出字符串。

●输出结果:

【题前思考】

根据问题描述,填写表 2-2-3。

表 2-2-3 问题分析

【解题思路】

Python中的对齐方式与文字处理软件中的对齐方式一样,有左对齐、居中对齐、右对齐,Python中使用函数ljust( )、center( )和rjust( )实现左对齐、居中对齐、右对齐的功能。

【程序代码】

【代码分析】

①:text.center(30)表示字符串占用 30 个字符的宽度,居中对齐。字符串text本身的长度只有 12,函数要求的宽度为 30,于是在字符串中填充空格,使总长度达到 30,且让原字符串处于中心位置。

②:text.ljust(30) 表示字符串占用 30 个字节的宽度,左对齐。

③:text.rjust(30) 表示字符串占用 30 个字节的宽度,右对齐。

【技术全貌】

字符串对象的方法除了center( )、ljust( )和rjust( )外,还有很多,熟练掌握这些方法可以加快字符串处理。常用字符串对象的方法见表 2-2-4。

str类型

表 2-2-4 字符串对象的方法

续表

一展身手

编写一个程序,打印输出购物小票,内容如下:

活动三 转换数的进制

微课

【问题描述】

输入一个整数,分别将这个整数转换为二进制数、八进制数和十六进制数。

●输入数据:

请输入一个整数:10

●输出结果:

二进制数: 0b1010

八进制数: 0o12

十六进制数: 0xa

【题前思考】

观察输出结果,根据问题描述,填写表 2-2-5。

表 2-2-5 问题分析

【解题思路】

Python提供了强大的内置函数来完成进制数之间的转换,函数bin( )是将对象转换为字符串表示的二进制数,函数oct( )是将对象转换为字符串表示的八进制数,函数hex( )是将对象转换为字符串表示的十六进制数。首先将读入的一个字符串转换为int类型,再利用内置函数bin( )、oct( )和hex( )转换为相应的进制数即可。

【程序代码】

【代码分析】

①:用int( )函数将输入的字符串转换为十进制整数。

②:用bin(n)函数将十进制数n转换为二进制数。

③:用oct(n)函数将十进制数n转换为八进制数。

④:用hex(n)函数将十进制数n转换为十六进制数。

【技术全貌】

使用Python内置函数int( )、bin( )、oct( )和hex( )可实现进制数之间的转换,十进制数、二进制数、八进制数和十六进制数相互转换的具体方法见表 2-2-6。

表 2-2-6 Python常见内置转换函数

一展身手

编写一个程序,将二进制数 101101 分别转换为十进制数、八进制数和十六进制数,并去掉八进制数和十六进制数的前缀。程序流程图如图 2-2-4 所示。

输出结果如下:

十进制数: 45

八进制数: 55

十六进制数: 2d

图 2-2-4 程序流程图

活动四 用指数形式输出一个实数

微课

【问题描述】

输入两个实数,用指数形式(即科学记数法)输出它们的乘积。

●输入数据:

请输入实数a的值:314.15926

请输入实数b的值:29.3892

●输出结果:

314.159260*29.389200=9.23e+03

【题前思考】

根据问题描述,填写表 2-2-7。

表 2-2-7 问题分析

【解题思路】

将实型数据转化为指数形式,调用字符串的format( )方法将实数转换为指数形式,指数形式格式化的转换码是e。

【程序代码】

【代码分析】

①:为了便于查看,将等号后的内容写为□□ 9.23e+03,这里的方格子□表示空格,小数点占一个字符位置,总宽度为 10,四舍五入保留两位小数。在左侧填充两个空格的原因是数据实际宽度为 8。具体格式如图 2-2-5 所示。{}称为占位符,占位符中的内容被冒号分成两个部分,冒号前的数是被格式数据在format( )方法参数中的序号(也可以是在调用format( )方法时指定的参数名称,还可以缺省),冒号后是格式说明符,被格式数据将被格式说明符按其指定格式转换为字符串。程序中格式化的语句还可以写为以下两种形式。

形式 1:

#:前缺省时各占位符依次从format( )方法的参数中取数据作为被格式数据

"{:f}*{:f}={:10.2e}".format(a,b,a*b)

形式 2:

#format( )方法中参数名可以自行命名,此处命名为x,y,z

"{x:f}*{y:f}={z:10.2e}".format(x=a,y=b,z=a*b)

图 2-2-5 数据格式说明

【优化提升】

将实数用指数形式格式化,除了可以用str.format( )方法外,还可以用格式字符串字面量表示为f"{a:f}*{b:f}={a*b:10.2e}"。以f开头的字符串就表示格式字符串,{a*b:10.2e}是占位符,表示用 10.2e的格式输出a*b的值,占位符以外的其他字符原样输出。

【技术全貌】

Python的数据格式化主要有%格式符、format( )函数、str.format( )方法和格式字符串字面量 4 种方式,常用的输出格式转换码见表 2-2-8。

表 2-2-8 常用的格式转换码

format( )函数、str.format( )方法和格式字符串字面量的占位符结构如下所示:

●表达式可以是任意合法的Python表达式。

●填充字符可以是任意字符。当实际宽度小于指定宽度时,将会用填充字符填充字符串,直到宽度达到指定宽度。

●对齐方式包括左对齐、居中对齐和右对齐,分别用符号<,^,>表示。

●+表示任何情况下都有正负号;-表示只在负数的情况下加负号,正数没有符号。

●#表示自动添加各进位制的前缀。如果用二进制输出会加前缀 0b,八进制数加前缀0o,十六进制数加前缀 0x。

●0 表示用 0 来填充符号至第一位整数间的位置。

●最小宽度表示整个占位符要占用的宽度,如果实际宽度小于这个宽度,使用填充符填充,反之原样输出。

●,表示对整数部分使用逗号作为千位分隔符。

●.精度表示小数位数,要四舍五入。

●类型使用表 2-2-8 中的格式转换码。

str.format( )方法格式字符串的使用方法与格式字符串字面量的结构类似,不同点在于str.format( )方法将冒号(:)前的内容放到了参数中,比如以下各print( )函数会输出相同的内容:3.26 +7.85 =11.10。

a=3.256

b=7.848

print(f"{a: <10.2f}+{b: <10.2f}={a+b: <10.2f}")

print("{0: <10.2f}+{1: <10.2f}={2: <10.2f}".format(a,b,a+b))

print("{: <10.2f}+{: <10.2f}={: <10.2f}".format(a,b,a+b))

print("{a: <10.2f}+{b: <10.2f}={c: <10.2f}".format(a=a,b=b,c=a+b))

一展身手

有变量及其值如下:

a,b,c,d=18.9,-3,19.25,"abc"

写出下面语句的输出结果:

print(f"{a:^5.2f}+{b:^5d}={a+b:>6.2f}")

print("{:<10.2f}-{:<10.2f}={:>10.2f}".format(a,b,a-b))

print("{s1}*3={s2:^12s}".format(s1=d,s2=d*3))

print("{a:5d}*{a:5d}={b:5d}".format(a=b,b=b*b))

项目小结

通过本项目的学习,认识了基本的数据类型:整型、实型和字符串。在Python中,默认情况下输入的数据类型为字符串,可以用int( )、float( )函数进行数据类型的转换。整数通常以十进制数表示,也可以转换为字符串形式的二进制数、八进制数和十六进制数。实型数据又称为浮点型数据,可以按照科学计数法表示。字符串是一个字符序列,可以使用切片操作符[ ]存取某个特定的字符或字符串,可以使用+来连接字符串,用*复制字符串,也可以使用字符串转换码、内置函数和字符串方法格式化输出数据。

自我检测

一、选择题

1.下列哪一项不是Python的数据类型?( )

A. int B. str C. float D. rational

2.幂运算的运算符是( )。

A. % B. * C. // D. **

3.用( )函数接收输入的数据。

A. accept( ) B. input( )C. readline( ) D. login( )

4. print输出语句可以将( )作为参数,表示后面指定要输出字符串。

A. %d B. %t C. %c D. %s

5.字符串s从右向左第 4 个字符的索引是( )。

A. s[4] B. s[-4] C. s[0:-4] D. s[:-4]

6.表达式"python".captitalize( )的结果为( )。

A. "PYTHON" B. "python" C. "Python" D. "pYTHON"

7. Python的内置函数( )用来返回序列中的最大元素。

A. min( ) B. max( ) C. sum( ) D. len( )

8.表达式"Hello world!".count("l")的结果为( )。

A. 2 B. 3 C. 4 D. 5

9.有n="abcd",若想将n变成"mbcd",则正确的语句是( )。

A. n[0]="m" B. n.replace("m","a") C. n[1]="m" D. n="m"+n[1:]

二、填空题

1.用于查看数据类型的Python内置函数是____。

2. Python的数值运算符中用来获取余数的是____。

3. Python中两种基本的数值数据类型是____和____。

4.下面代码的显示结果为____。

sum=2+3

print(sum)

s="2"+"3"

print(s)

5._____函数对数字进行四舍五入并将之转换为最近的整数。

6. 29/4 的结果是____,如果希望结果是整数应该写为____。

7.表达式 1234%1000//100 的结果为____。

8.已知x="hello Python",执行语句x.replace("hello","hi")之后,x的值为____。

9.已知x="a234b123c",执行语句x[-4:-1]后,x的值为____。

10.表达式"123"*3 的执行结果为____。

三、阅读程序,写出程序的运行结果

1. message="welcome "+"to "+"Python "

message+="and Python is fun"

print(message)

2. s="hello Python"

print(s[::2])

print(s[::-2])

四、编写程序

1.编写一个程序,把输入的华氏温度转换为摄氏温度。转换公式是C=5/9*(F-32),结果保留一位小数。

2.编写一个程序,输入一个四位正整数,并计算各位数字的和。

3.编写一个程序,提取出“Python”中的“yhn”字符串。

项目评价

阅读有益
中国研发全球最大量子比特数的超导量子体系“祖冲之号”

2021 年 5 月 8 日,拥有全球最大量子比特数的超导量子体系在中国诞生了!这无疑是一次重大突破:中国科学家成功研发出 62比特的超导量子计算原型机“祖冲之号”。衡量“量子计算机”的能力,主要是看它能够操纵的超导量子比特数量,量子比特数量越多,量子计算机的能力就越强,而且还是指数级增强。谷歌“量子计算机”可操纵的超导量子比特数量是 53 个,“祖冲之号”能达到 62 个,比谷歌的多出 9 个! GLEyTi3g9887VHG4F0CCl28v9SFQxAdzDXEQn6uGXEAsyT9XA8lJf1SjaPXcIWfa

点击中间区域
呼出菜单
上一章
目录
下一章
×