您的位置:首页 > 编程语言 > Python开发

零基础入门学习Python(15)--格式化

2018-03-12 17:19 639 查看

前言

上节课我们介绍了字符串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码
>>> '%c' % 97

'a'

>>> '%c %c %c' % (97,98,99)

'a b c'

>>> '%c,%c,%c' % (97,98,99)

'a,b,c'
%s格式化字符串
>>> '%s' % 'I love FishC.com'

'I love FishC.com'
%d格式化整数
>>> '%d + %d = %d' % (4,5,4+5)

'4 + 5 = 9'
%o格式化无符号八进制数
>>> '%o' % 10

'12'
%x格式化无符号十六进制数
>>> '%x' % 10

'a'
%X格式化无符号十六进制数
>>> '%X' % 10

'A'
%f格式化定点数,可指定小数点后的精度,默认6位小数
>>> '%f' % 27.658

'27.658000'
%e用科学计数法格式化定点数
>>> '%e' % 27.658

'2.765800e+01'
%E作用同%e,用科学计数法格式化定点数
>>> '%E' % 27.658

'2.765800E+01'
%g根据值得大小决定使用%f或%e
>>> '%g' % 27.658

'27.658'

>>> '%g' % 271111111111.6581111111111

'2.71111e+11
%G作用同%g,根据值得大小决定使用%F或%E
>>> '%G' % 27.658

'27.658'

>>> '%G' % 271111111111.6581111111111

'2.71111E+11
格式化操作符辅助指定

符号说明示例
m.nm显示最小总宽度,n是小数点后的位数
>>> '%5.1f' % 27.658

' 27.7'

>>> '%.2e' % 27.658

'2.77e+01'

>>> '%10d' % 5

'         5'
有9个空格在5前面
-用于左对齐
>>> '%-10d' % 5

'5         '
有9个空格在5后面
+在正数前面显示加号(+)
>>> '%+d' % 5

'+5'

>>> '%+d' % -5

'-5'
#在八进制数前面显示零
0o
,在十六进制前面显示
0x
0X
>>> '%#o' % 10

'0o12'

>>> '%#X' % 109

'0X6D'

>>> '%#d' % 10

'10'
0显示的数字前面填充
0
取代空格
>>> '%010d' % 5

'0000000005'

>>> '%0-10d' % 5

'5         '
有9个空格在5后面
>>> '%0+10d' % -5

'-000000005'
字符串转义字符含义

符号说明示例
\’单引号
>>> print('\'')

'
\”双引号
>>> print('\"')

"
\a发出系统响铃声
>>> print('\a')


\b退格符
>>> print('1\bf')

1f
\n换行符
>>> print('1\nf')

1

f
\t横向指标符(TAB)
>>> print('1\tf')

1    f
\v纵向制表符
>>> print('1\vf')

1f
\r回车符
>>> print('1\rf')

1

f
\f换页符
>>> print('1\f111111')

1111111
\o八进制代表的字符
>>> print('\o1111')

\o1111
\x十六进制代表的字符
>>> print('\x1111')

11
\0表示一个空字符
>>> print('\01234')


34
\反斜杠
>>> print('\\')

\

课后习题

测试题

请问以下代码会打印什么内容?

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

运行结果:
'{1}'


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

''.format('Pi = ', 3.1415)

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


动动手

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



q = True
while q:
temp = input('请输入一个整数(输入Q结束程序):')
if temp != 'Q':
if temp.isdigit():
i = int(temp)
print('十进制 -> 十六进制:',i,'->','%#x' % i)
print('十进制 -> 八进制:',i,'->','%#o' % i)
print('十进制 -> 二进制:',i,'->',bin(i))
else:
print("抱歉,",end=" ")
else:
q = False

================== RESTART: C:/Users/ThinkPad/Desktop/6.py ==================

请输入一个整数(输入Q结束程序):108
十进制 -> 十六进制: 108 -> 0x6c
十进制 -> 八进制: 108 -> 0o154
十进制 -> 二进制: 108 -> 0b1101100
请输入一个整数(输入Q结束程序):F
抱歉, 请输入一个整数(输入Q结束程序):FS
抱歉, 请输入一个整数(输入Q结束程序):109
十进制 -> 十六进制: 109 -> 0x6d
十进制 -> 八进制: 109 -> 0o155
十进制 -> 二进制: 109 -> 0b1101101
请输入一个整数(输入Q结束程序):Q
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐