【Python学习笔记】字符串格式化

1. 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 位置 的数据。

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

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

str()内置函数的参数 可以是任何类型的对象,比如:字符串、 整数、 浮点数、列表、元组 等等,都可以。

所以 %s 为占位符, 对应的格式化对象, 不仅仅是字符串,还可以是整数、 浮点数、列表、元组 等等。

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

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

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

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

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

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

指定宽度和对齐

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

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

得到的结果如下

$ python main.py
税前薪资:100000 元
税前薪资:10000 元
税前薪资:1000---------------------------------
税前薪资:    100000 元
税前薪资:     10000 元
税前薪资:      1000---------------------------------
税前薪资:100000     元
税前薪资:10000      元
税前薪资:1000

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

如果希望是左边对齐,而不是右边对齐,就可以加一个 -

%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格式化官网描述

2. f-string 格式化

f-string 格式化就是在字符串模板前面加上f,然后占位符使用{} ,里面直接放入对应的数据对象。Python解释器是3.6 以后的版本才支持。

如下所示

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

完整的代码如下

完整的代码如下

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

运行一下,可以发现输出结果一样。这种方式更加的直观明了。

指定宽度

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

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

比如

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

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

比如上面的输出结果就是

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

完整的一个示例程序如下

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

运行一下结果如下:

税前薪资是:    8000元, 缴税:  2000.0元, 税后薪资是:  6000.0

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

左右对齐

上面的输出结果是不足在前面补空格,对于数字对象来说,缺省为 右边对齐,而字符串缺省为 左边对齐

比如

下面这个表达式
f"|{'abc':10}|{300:10}|"
结果如下
'|abc       |       300|'

指定左右对齐,可以在括号里使用 < > 符号

箭头朝左就是左对齐,箭头朝右就是右对齐

比如

下面这个表达式
f"|{'abc':>10}|{300:<10}|"
结果如下
'|       abc|300       |'

上面的薪资计算代码中,要打印的数字左对齐,就可以这样写

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

上面的例子是对 数字 的不足补零,如果要对 字符串 不足补零,就应该 使用符号 < 或者 > 同时指定左右对齐方式。

>>> var = '34324'
>>> f'{var:08}'
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: '=' alignment not allowed in string format specifier
>>> f'{var:<08}'
'34324000'
>>> f'{var:>08}'
'00034324'

16进制格式化数字

# 用 x 表示格式化为16进制,并采用小写格式
f'数字65535的16进制表示为:{65535:x}'  # 用 X 表示格式化为16进制,并采用大写格式
f'数字65535的16进制表示为:{65535:X}'

字符串内容里有花括号

采用 f-string 方式格式化的 字符串内容本身就有 { 或者 } 符号,一定要 双写 进行转义,否则会被当成是 格式化占位符。

比如 我们要格式化的字符串为 文章中 { 符号 出现了 xx 次

times1 = 1000
times2 = 2000print(f'文章中 {{ 符号 出现了 {times1} 次')
print(f'文章中 }} 符号 出现了 {times2} 次')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年浙大MEM考前80天上岸经验分享

时间过得真快&#xff0c;转眼间已经是十月份了。回想起去年这个时候&#xff0c;我还在为考研而感到焦虑不安。然而&#xff0c;如今我已经在浙大MEM项目学习了一个多月的时间了。在这一个月的学习过程中&#xff0c;我不仅学到了许多专业知识&#xff0c;还结识了很多志同道合…

小白学java--垃圾回收机制(Garbage Collection)

压测过程中&#xff0c;作为测试会时不时听到研发说命中gc了&#xff0c;如果一头雾水&#xff0c;来看看什么是gc。 1、什么是垃圾回收机制 垃圾回收的执行过程会导致一些额外的开销&#xff0c;例如扫描和标记对象、回收内存空间等操作。这些开销可能会导致一定的性能损失和…

QT计时器

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> //计时器类 #include <QTime> //时间类 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widg…

10.20作业

#include “widget.h” #include “ui_widget.h” Widget::Widget(QWidget *parent) QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); t new QTimer(this); connect(t, &QTimer::timeout, this, &Widget::timeout_Slot); ui->text->setPlacehold…

microcom串口调试工具使用

microcom串口助手使用介绍 microcom是一个在终端中使用的串口助手&#xff0c;类似平常使用SSCOM一样的东西&#xff0c;不过是在终端中使用而已。 使用的是busybox构建的文件系统 microcom源码路径&#xff1a;busybox/miscutils/microcom.c microcom 参数&#xff1a; [r…

什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的 IE?

什么是响应式设计: 响应式设计&#xff08;Responsive Design&#xff09;是一种Web设计和开发方法&#xff0c;旨在使网站在不同设备和屏幕尺寸上都能提供一致的用户体验。响应式设计的目标是适应多种终端&#xff0c;包括桌面计算机、笔记本电脑、平板电脑和移动设备&#x…

编程题总结 --- 2018

&#xff08;1&#xff09;输入一串字符串&#xff0c;字符串以“#”结尾&#xff0c;判断输入的字符串中0至9的个数。 #include<iostream>using namespace std;int main(){int sum 0;string s;while(cin >> s){if(s "#") break;int n s.size();for(…

代码随想录算法训练营第二十八天 | LeetCode 491. 递增子序列、46. 全排列、47. 全排列 II

代码随想录算法训练营第二十八天 | LeetCode 491. 递增子序列、46. 全排列、47. 全排列 II 文章链接&#xff1a;递增子序列 全排列 全排列II 视频链接&#xff1a;递增子序列 全排列 全排列II 目录 代码随想录算法训练营第二十八天 | LeetCode 4…

ArrayDeque 源码解析(JDK1.8)

目录 一. 前言 二. 源码解析 2.1. 概览 2.2. 属性 2.3. 构造方法 2.4. 入队 2.4.1. addFirst(E, e) 2.4.2. add(E e) & addLast(E e) 2.4.3. offer(E e) 2.5. 扩容 2.6. 出队 2.6.1. poll() & pollFirst() 2.6.2. pollLast() 2.7. 删除元素 2.8. 获取元…

【学习笔记】RabbitMQ01:基础概念认识以及快速部署

参考资料 RabbitMQ官方网站RabbitMQ官方文档噼咔噼咔-动力节点教程 文章目录 一、认识RabbitMQ1.1 消息中间件&#xff08;MQ Message Queue 消息队列1.2 主流的消息中间件1.3 MQ的应用场景1.3.1 异步处理1.3.2 系统解耦1.3.3 流量削峰1.3.4 日志处理 二、RabbitMQ运行环境搭建…

驱动开发day2

任务&#xff1a;使用模块化编译安装驱动实现三盏LED灯的亮灭 驱动程序 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h>#define PHY_RCC 0X50000A28 #define PH…

[论文笔记]GPT1

引言 今天带来论文Improving Language Understanding by Generative Pre-Training的笔记,它的中文题目为:通过生成式预训练改进语言理解。其实就是GPT的论文。 自然语言理解可以应用于大量NLP任务上,比如文本蕴含、问答、语义相似和文档分类。虽然无标签文本语料是丰富的,…

神经网络中的反向传播:综合指南

塔曼纳 一、说明 反向传播是人工神经网络 &#xff08;ANN&#xff09; 中用于训练深度学习模型的流行算法。它是一种监督学习技术&#xff0c;用于调整网络中神经元的权重&#xff0c;以最小化预测输出和实际输出之间的误差。 在神经网络中&#xff0c;反向传播是计算损失函数…

基于 Qt UDP通信局域网通信

前言 该例程经过实际验证可以正常使用,只简单的使用UDP中的单播模式(一对一), 所用测试系统在同一局域网,其中: QT版本:5.12 PC端UDP模式:单播 UDP通信目标:基于STM32F4+LWIP协议的以太网接口 调试助手: 虚拟串口+串口助手+UDP和TCP调试助手[编程人员必备]一、UDP通…

MySQL数据库下载与安装使用

文章目录 MySQL数据库下面是各个版本完整的生命周期。下载MySQL安装包安装和使用MySQL一些基础MySQL使用命令 MySQL数据库 这里我选择的是免安装绿色解压版本 现在各位开发者使用的MySQL&#xff0c;大部分版本都是 5.7&#xff0c;根据官方说明&#xff0c;MySQL 5.7 将于 202…

18.项目开发之前端项目搭建测试

项目开发之前端项目搭建测试 解压文件&#xff0c;将前端项目目录&#xff0c;拖拽到HBuilder中 前端项目QuantTrade_vue地址&#xff1a;传送门 后端项目QuantTrade地址&#xff1a; https://pan.baidu.com/s/1GF45B0QepApH8JbRIOLY7w?pwd1016 开启idea的项目&#xff0c;先…

智慧油气田方案:视频+AI识别,助力油气田生产与管理智能化转型

一、背景与挑战 根据《“十四五”能源领域科技创新规划》指出&#xff0c;要推动核心技术创新突破&#xff0c;推动煤炭、油田、电厂、电网等传统行业与数字化、智能化技术深度融合。我国油田产业已经摆脱了早期粗放式增长的阶段&#xff0c;需要更加精细化、智慧化、科学化的…

PyQt学习笔记-获取Hash值的小工具

目录 一、概述1.1 版本信息&#xff1a;1.2 基本信息&#xff1a;1.2.1 软件支持的内容&#xff1a;1.2.2 支持的编码格式 1.3 软件界面图 二、代码实现2.1 View2.2 Controller2.3 Model 三、测试示例 一、概述 本工具居于hashlibPyQtQFileDialog写的小工具&#xff0c;主要是…

django建站过程(2)创建第一个应用程序页面

创建第一个应用程序页面 设置第一个页面【settings.py,urls.py,views.py】settings.pyurls.pyviews.py django是由一系列应用程序组成&#xff0c;协同工作&#xff0c;让项目成为一个整体。前面已创建了一个应用程序baseapp,使用的命令 python manage.py startapp baseapps这…

机器学习,神经网络中,自注意力跟卷积神经网络之间有什么样的差异或者关联?

如图 6.38a 所示&#xff0c;如果用自注意力来处理一张图像&#xff0c;假设红色框内的“1”是要考虑的像素&#xff0c;它会产生查询&#xff0c;其他像素产生 图 6.37 使用自注意力处理图像 键。在做内积的时候&#xff0c;考虑的不是一个小的范围&#xff0c;而是整张图像的…