百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python之格式化字符串(格式化字符串python)

off999 2024-09-18 22:35 46 浏览 0 评论


格式化字符串

还记得前面学过的,计算税后薪资 的程序的例子吗?

让用户输入薪资,乘以75% 得到税后薪资,打印到屏幕上。

代码如下

salary = input('请输入薪资:')
# 计算出税后薪资
aftertax = int(salary)*75/100 
# 再转化为字符串,方便下面的字符串拼接
aftertaxStr = str(aftertax) 
print('税后薪资是:' + aftertaxStr)

如果我们要显示的不仅是税后薪资,还有税前薪资,缴税额。像下面这样

税前薪资是 10000元, 缴税:2500元, 税后薪资是:7500元

代码又该怎么写呢?

我想肯定难不倒聪明的你。

对了, 加号可以连接多个字符串,可以这样

salary = input('请输入薪资:')
# 计算出缴税额,存入变量tax
tax = int(salary) *25/100 
# 转化为字符串,方便下面的字符串拼接
taxStr = str(tax) 
# 计算出税后工资,存入变量aftertax
aftertax = int(salary) *75/100 
# 转化为字符串,方便下面的字符串拼接
aftertaxStr = str(aftertax) 
print('税前薪资是:' + salary + '元, 缴税:' + taxStr + '元, 税后薪资是:' + aftertaxStr + '元')

运行一下,是不是确实实现了我们的需求。

但是这里面有问题吗?

对了最后一句代码,写的是不是有点。。。。。烧脑?

字符串的多次拼接比较麻烦,一不小心就可能 漏掉了 一个加号或者引号。

如果我们能够这样写

税前薪资是 x 元, 缴税:y 元, 税后薪资是:z 元

然后,直接将我们计算好的 税前薪资, 缴税额,税后薪资 分别作为 x, y, z 填入进去。

这样就不需要麻烦的字符串拼接了。Python 支持这样的操作,这样的操作称之为字符串的格式化。

可以点击文章末尾【了解更多】,或者百度搜索白月黑羽教Python,一起来学Python吧

python3 中字符串格式化有如下几种方法

printf 风格

这种方式 和 传统的C语言printf函数使用一样的格式化语法。

比如上面的例子里面,我们使用这种方法可以这样格式化字符串

salary = input('请输入薪资:')
# 计算出缴税额,存入变量tax
tax = int(salary) *25/100 
# 计算出税后工资,存入变量aftertax
aftertax = int(salary) *75/100 
print('税前薪资是:%s 元, 缴税:%s 元, 税后薪资是:%s 元' %
(salary,tax,aftertax))

大家运行一下看看,可以发现也能正确的输出结果。

大家可以发现,和前面的字符串拼接不同, 我们使用了下面这样模板一样的字符串

税前薪资是:%s 元, 缴税:%s 元, 税后薪资是:%s 元

其中 %s 就是模板中的占位符,表示这个位置先占着,待会儿要有数据填入到这里。

然后再提供一个元组,里面依次存放需要填入到 %s 占位位置 数据。

这里是使用变量 (salary,tax,aftertax) 。

%s 是一种格式化符号, Python 解释器 看到 %s , 就会调用内置函数 str(),并将对应的格式化对象作为的参数传入 , 返回的结果字符串填入对应占位符。

简单说 %s 位置填入的结果,就是调用str函数的返回值。

str()内置函数,它的参数几乎所有内置类型的对象,字符串、 整数、 浮点数 、list 等等都可以

所以 我们可以用 %s 为占位符, 对应的格式化对象, 不仅仅是字符串,可以是整数、 浮点数 、list 等等。


格式化字符串里面占位符的个数 必须 和 后面对应的格式化对象个数相同,

比如

'税前薪资:%s 元, 缴税:%s 元, 税后薪资:%s 元' %
(salary,tax,aftertax)

占位符是3个,那么后面的元组里面的格式化对象就是3个。

如果占位符是2个,后面的元组里面的格式化对象就应该是2个。像这样

'税前薪资:%s 元, 缴税:%s 元' % (salary,tax)

如果占位符是1个,后面的元组里面的格式化对象就应该是1个。像这样

'税前薪资:%s 元' % (salary,)

还记得,我们说过, 元组里面只有1个元素,后面别忘了加个逗号。

像这种只有一个格式化对象的情况下,可以直接就用格式化对象,不需要放到元组里面,像这样

'税前薪资:%s 元' % salary

指定宽度和对齐

如果我们需要将下面这样的3个字符串进行格式化

'税前薪资:%s 元' % 100000
'税前薪资:%s 元' % 10000
'税前薪资:%s 元' % 1000

得到的结果如下

税前薪资:100000 元
税前薪资:10000 元
税前薪资:1000 元

会发现,由于被格式化的数字对应的字符串长度不同,导致结果不对齐。

这样的输出结果显得不够美观。

我们可以指定格式化结果的字符串长度,比如我想要格式化结果至少10个字符,不足10个字符补空格,就可以这样

'税前薪资:%10s 元' % 100000
'税前薪资:%10s 元' % 10000
'税前薪资:%10s 元' % 1000

%10s 中的 10 就是指定了格式化结果至少10个字符。

得到的结果就是

税前薪资: 100000 元
税前薪资: 10000 元
税前薪资: 1000 元

如果我们希望是左边对齐,而不是右边对齐,就可以加一个 - 好,像这样

'税前薪资:%-10s 元' % 100000
'税前薪资:%-10s 元' % 10000
'税前薪资:%-10s 元' % 1000

可以得到如下结果

税前薪资:100000 元
税前薪资:10000 元
税前薪资:1000 元

%d 和 %f

占位符除了 %s ,还有其它的一些。

常见的是 %d 和 %f 。

%d 用在 格式化对象 是 整数的情况 ,比如

'税前薪资:%d 元' % 10000

%f 用在 格式化对象 是 浮点数的情况,比如

'税前薪资:%f 元' % 10000.32

前面我们说过了 %s 也可以用来格式化 整数和 浮点数,但是有些情况下, %d %f 有特别的用处。

比如,打印数字的时候,我们指定宽度,而且不足宽度,希望补零,而不是补空格,就可以这样

'税前薪资:%010d 元' % 100000
'税前薪资:%010d 元' % 10000
'税前薪资:%010d 元' % 1000

可以得到如下结果

税前薪资:0000100000 元
税前薪资:0000010000 元
税前薪资:0000001000 元

对于小数的格式化,通常使用 %f,如下

'税前薪资:%010f 元' % 1000.4522
'税前薪资:%010f 元' % 1008.6621
'税前薪资:%010f 元' % 1009.3351

可以得到如下结果

税前薪资:1000.452200 元
税前薪资:1008.662100 元
税前薪资:1009.335100 元

如果我们想保留小数点后面2位数字,就可以加上 .2 像这样

'税前薪资:%010.2f 元' % 1000.4522
'税前薪资:%010.2f 元' % 1008.6621
'税前薪资:%010.2f 元' % 1009.3351

可以得到如下结果

税前薪资:0001000.45 元
税前薪资:0001008.66 元
税前薪资:0001009.34 元

参考文档

详细的 printf风格的格式化,可以参考如下官方文档

https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting

我们这里不打算介绍更多了,因为到了Python3.6 ,有另外一种更方便的方式: f-string 格式化

f-string 格式化

f-string 格式化 就是在字符串模板前面加上f,然后占位符使用{} ,里面直接放入对应的数据对象。

如下所示

f'税前薪资是:{salary}元, 缴税:{tax}元, 税后薪资是:{aftertax}元'

完整的代码如下

salary = input('请输入薪资:')
# 计算出缴税额,存入变量tax
tax = int(salary) *25/100 
# 计算出税后工资,存入变量aftertax
aftertax = int(salary) *75/100 
print(f'税前薪资是:{salary}元, 缴税:{tax}元, 税后薪资是:{aftertax}元')

运行一下,可以发现输出结果一样。

这种方式是不是更加的直观明了呢?

要注意的是,这种写法必须要Python解释器是3.6 以后的版本才支持哦。

指定宽度

同样,为了输出对齐,我们需要指定填入的字符串的宽度。

方法是,在括号里面的变量后面加上 :宽度值

比如

salary = 10000
print(f'{salary:10}') 

f'{salary:10}' 就指定了 宽度为10 个字符, 如果填入的字符串不足10个字符,就在前面加上空格

比如上面的输出结果就是

>>> salary = 10000
>>> print(f'{salary:10}')
 10000

完整的一个示例程序如下

# 员工 1
salary = 8000
tax = int(salary) *25/100 
aftertax = int(salary) *75/100 
print(f'税前薪资是:{salary:8}元, 缴税:{tax:8}元, 税后薪资是:{aftertax:8}元')
# 员工 2
salary = 15000
tax = int(salary) *25/100 
aftertax = int(salary) *75/100 
print(f'税前薪资是:{salary:8}元, 缴税:{tax:8}元, 税后薪资是:{aftertax:8}元')
# 员工 3
salary = 100000
tax = int(salary) *25/100 
aftertax = int(salary) *75/100 
print(f'税前薪资是:{salary:8}元, 缴税:{tax:8}元, 税后薪资是:{aftertax:8}元')

运行一下结果如下:

税前薪资是: 8000元, 缴税: 2000.0元, 税后薪资是: 6000.0元
税前薪资是: 15000元, 缴税: 3750.0元, 税后薪资是: 11250.0元
税前薪资是: 100000元, 缴税: 25000.0元, 税后薪资是: 75000.0元

这样,整体就显得很清爽。

当然上面的代码 有很多重复的部分。聪明的你想到怎么优化一下了吗?

对了,用函数。像这样

def calcTax(salary):
 tax = int(salary) *25/100 
 aftertax = int(salary) *75/100 
 print(f'税前薪资是:{salary:8}元, 缴税:{tax:8}元, 税后薪资是:{aftertax:8}元')
# 员工 1
calcTax(8000)
# 员工 2
calcTax(15000)
# 员工 3
calcTax(100000)

左对齐

上面的输出结果是不足在前面补空格,最终的结果就是右边对齐。 如果我们想左对齐,可以在括号里使用 < 符号

像这样 {salary:<8}

def calcTax(salary):
 tax = int(salary) *25/100 
 aftertax = int(salary) *75/100 
 print(f'税前薪资是:{salary:<8}元, 缴税:{tax:<8}元, 税后薪资是:{aftertax:<8}元')
calcTax(8320)
calcTax(15023)
calcTax(100030)

运行结果如下:

税前薪资是:8320 元, 缴税:2080.0 元, 税后薪资是:6240.0 元
税前薪资是:15023 元, 缴税:3755.75 元, 税后薪资是:11267.25元
税前薪资是:100030 元, 缴税:25007.5 元, 税后薪资是:75022.5 元

小数点后位数

如果我们想指定小数点后保留几位,可以像这样 {salary:<8.1f}

后面的.1f就表示小数点后面保留1位

def calcTax(salary):
 tax = int(salary) *25/100 
 aftertax = int(salary) *75/100 
 print(f'税前薪资是:{salary:8.1f}元, 缴税:{tax:8.1f}元, 税后薪资是:{aftertax:8.1f}元')
calcTax(8320)
calcTax(15023)
calcTax(100030)

运行结果如下:

税前薪资是: 8320.0元, 缴税: 2080.0元, 税后薪资是: 6240.0元
税前薪资是: 15023.0元, 缴税: 3755.8元, 税后薪资是: 11267.2元
税前薪资是:100030.0元, 缴税: 25007.5元, 税后薪资是: 75022.5元

不足补零

如果我们想在不足指定宽度的时候不是补空格,而是补数字0,可以像这样 {salary:08}

def calcTax(salary):
 tax = int(salary) *25/100 
 aftertax = int(salary) *75/100 
 print(f'税前薪资是:{salary:08}元, 缴税:{tax:08.1f}元, 税后薪资是:{aftertax:08.1f}元')
calcTax(8320)
calcTax(15023)
calcTax(100030)

运行结果如下:

税前薪资是:00008320元, 缴税:002080.0元, 税后薪资是:006240.0元
税前薪资是:00015023元, 缴税:003755.8元, 税后薪资是:011267.2元
税前薪资是:00100030元, 缴税:025007.5元, 税后薪资是:075022.5元

转义符

我们在代码中定义一个字符串的时候,有些字符不太方便用键盘直接敲出来,或者敲出来看起来也不知道那是一个字符。

比如 换行符, 我们可以用回车键,敲出来。

a = '''abcd
efg'''

其中abcd 和efg之间其实就是有一个换行字符。

有时候像这样的字符出现在字符串中,可以使用转义写法来表示,比如上的字符串就等价于

a = 'abcd\nefg'

‘\n’就是一个转义字符,表示一个换行字符。

处理’\n’ 之外,还有一些其他的字符可以用转义符表示,比如我们还可以用 ‘\t’表示tab字符。

Python字符串中 转义字符都是用反斜杠 \ 开头 。

如果字符串中本身需要有反斜杠,并非转义,比如Windows下面的路径

path = 'c:\windows\temp'

其中的 \t 会被当做一个tab字符,而不是 \ 和 t 两个字符。

这时,可以在在前面再加一个反斜杠, 像下面这样

path = 'c:\\windows\\temp'

也可以在字符前面加上一个 r ,表示字符串内容是raw string, 无需转义,像这样

path = r'c:\windows\temp'

相关推荐

2025年中小学生安全教育(2025年中小学生安全教育日是哪一天)

电脑连接充电器,保证电源充足。连接网线,不间断。一直开着刷时间。这样最简单。不要想偷工减料,只有真正学习到了才是自己的财富。每天两个小时确实有点儿长,这样才能起到安全教育的目的吧。你直接选择五天就可以...

wps下载电脑版官方下载(wps下载电脑版官方下载官网)
  • wps下载电脑版官方下载(wps下载电脑版官方下载官网)
  • wps下载电脑版官方下载(wps下载电脑版官方下载官网)
  • wps下载电脑版官方下载(wps下载电脑版官方下载官网)
  • wps下载电脑版官方下载(wps下载电脑版官方下载官网)
免费的word转pdf转换器(免费word转pdf网站)

有些转换器是需要的呢。但我用的“sanpdf”是不收费。可以尝试。迅捷pdf编辑器转换word的方法如下:1、安装迅捷pdf编辑器软件,在电脑桌面双击快捷方式打开软件。2、在界面上方的菜单栏中点击“p...

单机象棋(单机版)(单机象棋(单机版)无需网络3.9.0版本)

象棋旋风、象棋名手、兵河五四等最顶尖象棋软件,都是单机游戏,还可以连线任何象棋网站下棋,棋力超强人类无法超越,别说什么国家大师、特级大师在软件面前都是小儿科!够厉害了吧棋友们可以关注我每天主页大量象...

怎么下载word2003免费版(如何下载安装word2003)

单击格式工具栏右边第二个的“设计”按钮,在任务窗格里选。任务窗格最后还有一个“MicrosoftOfficeOnline设计模板”,点击可上网下载。

姑娘视频在线观看中国电影(姑娘视频官网下载)

小马宝莉观看顺序如下:1、《小马宝莉第一季》2、《小马宝莉第二季》3、《小马宝莉第三季》4、《小马国女孩1》5、《小马宝莉第四季》6、《小马国女孩2》7、《小马宝莉第五季》8、《小马国女孩3》9、《小...

程序员一般要学多久(程序员的前景和未来)

1 培养兴趣兴趣是能够让人坚持下去的动力。多关心一些行业趣事,多想想盖茨。不是提倡天天做白日梦,但人要是没有了梦想,觉得有味道吗?可能像许多深圳本地农民一样,打打麻将,喝喝功夫茶,拜拜财神爷;每个月就...

cad制图软件电脑版(cad制图软件pc版)
cad制图软件电脑版(cad制图软件pc版)

1.浏览器打开CAD官网,选择菜单栏上的产品点击下方的autoCAD.2.点击下载免费试用版3.商业里点AutoCAD,点下一步。4.点击安装下面的下载即可。1、在搜索引擎中输入cad安装包并点击搜索,选择一款安装包进行下载。2、将下载的c...

2026-01-31 14:43 off999

一起学网校(一起学网校赵越老师个人资料)

一起学和一起学网校是同一个品牌的不同产品。一起学是一个在线教育平台,提供各种学习资源和课程,包括一对一辅导、视频课程等。而一起学网校是一起学平台下的一个子品牌,专注于提供在线学习班和课程,通过直播和互...

电视直播大全在线观看(电视直播大全_网络电视在线观看)

要观看CCTV直播,您可以按照以下几种方法进行操作:1.通过有线电视:如果您有有线电视服务,您可以直接打开电视机,转到CCTV频道,然后选择您想要观看的直播节目。2.通过卫星电视:如果您拥有卫星电...

免费的格式转换器软件(免费格式转换app推荐)

软件一:迅捷音频转换器一款专业的音频编辑工具,拥有音频剪切、音频提取、音频转换等多种功能,能够用多种分割方式进行音频剪切,而且支持批量操作,功能强大,操作简单,绝对是一款不容错过的软件。软件特色1、多...

pubg加速器(Pubg加速器)

现在加速吃鸡的游戏加速器是有专线路线的比较好,专线的稳定很多,不过目前是没有完全免费的加速软件,很多都可以先体验,注册就可以体验的,可以多去体验几款,对比一下。目前的加速器可以分为三个等级第一等级:全...

无限金币无限钻石版游戏大全下载

不能下载,奥特曼无限钻石无限金币是不能进行下载的。我们在进行奥特曼游戏的时候,无限钻石金币这种情况下是使用外挂进行达成的正版游戏,并没有公布这个功能,所以是无法进行下载的,我们还是要支持正版游戏。要下...

手游排行(手游排行榜第一名)
手游排行(手游排行榜第一名)

手机游戏排行榜前十的有:《王者荣耀》、《绝地求生:全军出击》、《荒野行动》、《剑侠》、《4D极速沙滩赛车》、《红色坦克4D》、《镇魔》、《坦克前线帝国》、《舰指太平洋》、《红警天启的狂怒》。1、《王者荣耀》《王者荣耀》已经出了几十位英雄,定...

2026-01-31 13:03 off999

windows11系统下载(windows11下载安装教程)

首先,确保你的电脑符合Windows11的系统要求。然后,前往微软官网下载Windows11安装助手,运行该助手并按照提示进行操作。如果你的设备已经运行Windows10,你可能可以通过Windows...

取消回复欢迎 发表评论: