前言
上节课我们介绍了字符串N多种奇葩方法的用法,但是我们唯独漏掉了format方法,那为何不把format方法和上节课的内容一起讲呢?
因为小甲鱼觉得format方法,跟今天的主题是如出一辙的,都是讨论字符串的格式问题。哎呀,那有些朋友听到格式化就来劲了,那格式化跟我们的硬盘格式化有关系吗?
没有关系的。
那什么是字符串的格式化呢?又为什么需要对字符串进行格式化呢?
我们举个小例子,给大家讲一下:
某天小甲鱼召开了鱼c国际安全大会,到会的朋友有来自世界各方各地的精英人士,
有这个小乌龟啦,有喵星人啦,有汪星人啦,当然还有这个米奇和唐老鸭,哇塞,那气势
简直就像小甲鱼开了个动物园一样,但是呢,那问题来了,那真是鸡同鸭讲,驴唇不对马嘴,
不知所云,但是呢,小甲鱼还是聪明,想办法把问题解决了,什么办法呢?
小甲鱼在各界找一个翻译,翻译成普通话之后,再开会,最后呢,大会完美举行成功。
举这个例子,是想跟大家说,格式化字符串,就是按照统一的规格去输出,成为一个字符串。如果规格不统一,就可能会造成误会。
例如说,十六进制的10
,十进制的10
,二进制的10
完全就是不同的概念。
十六进制的10 对于 10进制是等于16
十进制的10 对于 10进制等于10
二进制的10 对于 10进制等于2
所以他们是完全不同概念。字符串格式化就是帮助我们纠正规范这类可能出现的问题。
知识点
format 方法,有两个参数,分别是 位置参数
,关键字参数
位置参数:
>>> "{0} love {1}.{2}".format("I","FishC","com")
'I love FishC.com'
#字段0,字段1,字段2,分别用'{}'括起来,表示'字段',
#它通过位置参数"I","FishC","com"传递给我们的format方法,
#然后再用format方法对字符串进行格式化处理,得到了我们最终的目标:'I love FishC.com'
关键字参数
>>> "{a} love {b}.{c}".format("I","FishC","com")
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
"{a} love {b}.{c}".format("I","FishC","com")
KeyError: 'a'
#必须添加关键字赋值
>>> "{a} love {b}.{c}".format(a="I",b="FishC",c="com")
'I love FishC.com'
位置参数
与关键字参数
一起使用
>>> "{a} love {b}.{c}".format(a="I",b="FishC",c="com")
'I love FishC.com'
>>> "{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:.1f}{1}'.format(27.658,'GB')
'27.7GB'
#为什么不是打印27.658GB,而是27.7GB呢?
#位置参数跟以前的不一样,化了点小妆,
#后边多了一个冒号,在替换域中,
#冒号:表示格式化符号的开始,后边接的就是格式化符号。
符串格式化符号含义
符号 | 说明 |
%c | 格式化字符及其 ASCII 码
|
%s | 格式化字符串
|
%d | 格式化整数
|
%o | 格式化无符号八进制数
|
%x | 格式化无符号十六进制数
|
%X | 格式化无符号十六进制数(大写)
|
%f | 格式化浮点数字,可指定小数点后的精度
|
%e | 用科学计数法格式化浮点数
|
%E | 作用同 %e,用科学计数法格式化浮点数
|
%g | 根据值的大小决定使用 %f 或 %e
|
%G | 作用同 %g,根据值的大小决定使用 %f 或者 %E
|
格式化操作符辅助命令
符号 | 说明 |
m.n | m 是显示的最小总宽度,n 是小数点后的位数
|
- | 用于左对齐
|
+ | 在正数前面显示加号(+)
|
# | 在八进制数前面显示 '0o',在十六进制数前面显示 '0x' 或 '0X'
|
0 | 显示的数字前面填充 '0' 取代空格
|
Python 的转义字符及其含义
符号 | 说明 |
\' | 单引号
|
\" | 双引号
|
\a | 发出系统响铃声
|
\b | 退格符
|
\n | 换行符
|
\t | 横向制表符(TAB)
|
\v | 纵向制表符
|
\r | 回车符
|
\f | 换页符
|
\o | 八进制数代表的字符
|
\x | 十六进制数代表的字符
|
\0 | 表示一个空字符
|
\\ | 反斜杠
|
课后习题
测试题
请问以下代码会打印什么内容?
>>> "{{1}}".format("不打印","打印")
运行结果:
'{1}'
如果想要显示Pi=3.14,format前边的字符串应该怎么填写?
''.format('Pi = ', 3.1415)
>>> '{0}{1:.2f}'.format('pi= ',3.1415)
'pi= 3.14'
动动手
编写一个进制转换程序,程序演示如下(提示,十进制转换二进制可以用bin()这个BIF)
while True:
temp=input("请输入一个整数:")
if temp=='Q':
break
else:
if temp.isdigit():
int_num=int(temp)
print('十进制->十六进制:',int_num,'->','%#x' % int_num)
print('十进制->八进制: ',int_num,'->','%#o' % int_num)
print('十进制->二进制: ',int_num,'->','->',bin(int_num))
else:
print('抱歉',end="")