小甲鱼《零基础入门学习》Python(15)--格式化

前言

上节课我们介绍了字符串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

格式化浮点数字,可指定小数点后的精度
>>> '%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.n

m 是显示的最小总宽度,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'

 



Python 的转义字符及其含义
 

符号

说明

\'

单引号
>>> 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')
1111111

 

\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)

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="")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值