前言
上节课我们介绍了字符串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="")