课时15:字符串:格式化

Posted dc0307

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课时15:字符串:格式化相关的知识,希望对你有一定的参考价值。

目录:

    一、format()

    二、格式化操作符:%

    三、Python的转义字符及含义

    四、课时15课后习题及答案

 

***************

一、format()

***************

格式化字符串,就是按照统一的规格去输出一个字符串。如果规格不统一,就很有可能造成误会,例如十六进制的10跟十进制的10完全是不同的概念(十六进制的10等于十进制16,二进制10等于十进制2),字符串格式化。正式帮助我们纠正并规范这类问题而存在的。

format()方法接受位置参数和关键字参数(位置参数和关键字参数在函数章节有详细的讲解),二者均传递到一个叫作replacement字段。而这个replacement字段在字符串内由大括号( { } )表示。

>>> "{0} love {1}.{2}".format("I","FishC","com")
I love FishC.com

仔细看,字符串中的{0}、{1}和{2}应该跟位置有关,依此被format()的三个参数替换,那么format()的三个参数就叫作位置参数。那什么是关键字参数呢,再来看一个例子:

>>> "{a} love {b}.{c}".format(a="I",b="FishC",c="com")
I love FishC.com

{a}{b}和{c}就相当于三个标签,format()将参数中等值的字符串替换出去,这就是关键字参数啦。另外,也可以综合位置参数和关键字参数一起使用:

>>> "{0} love {b}.{c}".format("I",b="FishC",c="com")
I love FishC.com

但是要注意的是,如果把位置参数和关键字参数一起综合起来使用,那么位置参数必须在关键字参数之前,否则就会出错;

>>> "{a} love {b}.{0}".format(a="I",b="FishC","com")
SyntaxError: positional argument follows keyword argument

如果把大括号打印出来,你有办法吗?没错,这跟字符串转义字符有点像,只需要用一层大括号包起来即可(要打印转义字符(),只需要转义字符转义本身(\)):

>>> "{{0}}".format("不打印")
{0}

位置参数“不打印”没有被输出,这是因为{0}的特殊功能被外层的大括号( { } )剥夺,因此没有字段可以输出。注意,这并不会产生错误哦。最后再来看另外一个例子:

>>> "{0}:{1:.2f}".format("圆周率",3.14159)
圆周率:3.14

可以看到,位置参数{1}跟平常有些不同,后边多了一个冒号。在替换域中,冒号表示格式化符号开始,“.2”的意思是四舍五入到保留两位小数点,而f的意思是浮点数,所以按照格式化的要求打印除了3.14。

 

**************************

二、格式化操作符:%

**************************

 刚才讲的是字符串的格式化方法,现在来谈谈字符串所独享的一个操作符:%,有人说,这不是求余数的操作符吗?是的,没错!当%左右均为数字的时候,那么它表示求余数的操作;但当它出现在字符串中的时候,它表示的是格式化操作符。下表列举了Python的格式化符号及含义。

符号    说明
%c    格式化字符及其 ASCII 码
%s    格式化字符串
%d    格式化整数
%o    格式化无符号八进制数
%x    格式化无符号十六进制数
%X    格式化无符号十六进制数(大写)
%f    格式化浮点数字,可指定小数点后的精度
%e    用科学计数法格式化浮点数
%E    作用同 %e,用科学计数法格式化浮点数
%g    根据值的大小决定使用 %f 或 %e
%G    作用同 %g,根据值的大小决定使用 %f 或者 %E

下面举几个例子供参考:

>>> %c%97
a
>>> %c%c%c%c%c%(70,105,115,104,67)
FishC
>>> %d转换为八进制是:%o%(123,123)
123转换为八进制是:173
>>> %f用科学计数法表示为:%e%(149500000,149500000)
149500000.000000用科学计数法表示为:1.495000e+08

Python还提供了格式化操作符的辅助指令,如下表所示:

符号    说明
m.n    m 是显示的最小总宽度,n 是小数点后的位数
-      用于左对齐
+      在正数前面显示加号(+#      在八进制数前面显示 ‘0o‘,在十六进制数前面显示 ‘0x‘ 或 ‘0X‘
0      显示的数字前面填充 0 取代空格

同样列举几个例子:

>>> %5.1f%27.658
 27.7
>>> %.2e%27.658
2.77e+01
>>> %10d%5
         5
>>> %-10d%5
5         
>>> %010d%5
0000000005
>>> %#X%100
0X64

 

**********************************

三、Python的转义字符及含义

**********************************

 Python的部分转义字符已经使用一段时间,是时候来给它做个总结了,见下表:

符号    说明
    单引号
"    双引号
a    发出系统响铃声
    退格符

    换行符
	    横向制表符(TAB)
v    纵向制表符

    回车符
f    换页符
o    八进制数代表的字符
x    十六进制数代表的字符
    表示一个空字符
\    反斜杠

 

*******************************

四、课时15课后习题及答案

*******************************

0. 根据说明填写相应的字符串格式化符号

   符   号       说     明
     %       格式化字符及其ASCII码
     %       格式化字符串
     %       格式化整数
     %       格式化无符号八进制数
     %       格式化无符号十六进制数
     %       格式化无符号十六进制数(大写)
     %       格式化定点数,可指定小数点后的精度
     %       用科学计数法格式化定点数
     %       根据值的大小决定使用%f或者%e
     %       根据值的大小决定使用%F或者%E

 1. 请问以下这行代码会打印什么内容?

>>> "{{1}}".format("不打印", "打印")

2. 以下代码中,a, b, c是什么参数?

>>> "{a} love {b}.{c}".format(a="I", b="FishC", c="com")

‘I love FishC.com‘

3. 以下代码中,{0}, {1}, {2}是什么参数?

>>> "{0} love {1}.{2}".format("I", "FishC", "com")
I love FishC.com

4. 如果想要显示Pi = 3.14format前边的字符串应该怎么填写呢?

‘‘.format(Pi = , 3.1415)

 

动动手:

0. 编写一个进制转换程序,程序演示如下(提示,十进制转换二进制可以用bin()这个BIF):

 

 

 

答案:

测试题答案

0. 根据说明填写相应的字符串格式化符号

   符   号       说     明
     %c       格式化字符及其ASCII码
     %s       格式化字符串
     %d       格式化整数
     %o       格式化无符号八进制数
     %x       格式化无符号十六进制数
     %X       格式化无符号十六进制数(大写)
     %f       格式化定点数,可指定小数点后的精度
     %e       用科学计数法格式化定点数
     %E       作用同%e,用科学计数法格式化定点数
     %g       根据值的大小决定使用%f或者%e
     %G       作用同%g,根据值的大小决定使用%F或者%E

 

1. 请问以下这行代码会打印什么内容?

>>> "{{1}}".format("不打印", "打印")
{1}

 

2. 以下代码中,a, b, c是什么参数?

>>> "{a} love {b}.{c}".format(a="I", b="FishC", c="com")
I love FishC.com

关键字参数

 

3. 以下代码中,{0}, {1}, {2}是什么参数?

>>> "{0} love {1}.{2}".format("I", "FishC", "com")
I love FishC.com

位置参数

 

4. 如果想要显示Pi = 3.14format前边的字符串应该怎么填写呢?

>>> {0}{1:.2f}.format(Pi = , 3.1415)
Pi = 3.14

 

动动手答案:

0. 编写一个进制转换程序

 1 q = True
 2 while q:
 3     num = input(请输入一个整数(输入Q结束程序):)
 4     if num != Q:
 5         num = int(num)
 6         print(十进制 -> 十六进制 : %d -> 0x%x % (num, num))
 7         print(十进制 -> 八进制 : %d -> 0o%o % (num, num))
 8         print(十进制 -> 二进制 : %d ->  % num, bin(num))
 9     else:
10         q = False

 

以上是关于课时15:字符串:格式化的主要内容,如果未能解决你的问题,请参考以下文章

如何从我的 DatePicker 片段中传输格式化的日期字符串?

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

蓝鸥Unity开发基础三课时15 刚体和Collider

MongoDB(课时14 正则运算)

我应该如何使用 Outlook 发送代码片段?