今天白月黑羽和大家说说字符串格式化,在python3中,字符串格式化主要有2种方法,今天先和大家介绍类C风格的printf。

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 元

  

另外白月黑羽Python3教程中不断在加入视频讲解帮助大家学习Python,欢迎大家一起学习

Python基础之好玩的字符串格式化之类C风格的更多相关文章

  1. Python基础之好玩的字符串格式化f-string格式

    转自白月黑羽 Python3教程 : http://www.python3.vip/doc/tutorial/python/0010/#f-string-格式化 f-string 格式化 f-stri ...

  2. python基础深入(元组、字符串、列表、字典)

    python基础深入(元组.字符串.列表.字典) 一.列表 1.追加 >>>list = [1,2,3,4] #用于在列表末尾添加新的对象,只能单个添加,该方法无返回值,但是会修改原 ...

  3. Python学习之路——基础篇(1)字符串格式化

    字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式  百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 百分号方式 ...

  4. Python之路第五天,基础(5)-序列化和字符串格式化

    序列化 Python中用于序列化的两个模块 json 用于『字符串』和『python基本数据类型』间进行转换 pickle 用于『python特有的类型』和『python基本数据类型』间进行转换 js ...

  5. Python基础:序列(字符串)

    一.概述 字符串 类似于C中的字符数组(功能上更像C++中的string),它是由一个个 字符 组成的序列.与C/C++不同的是,Python中没有 字符 这个类型,而是用 长度为1的字符串 来表示字 ...

  6. python基础之数字、字符串、列表、元组、字典

    Python基础二: 1.运算符: 判断某个东西是否在某个东西里面包含: in  为真 not in  为假 (1).算术运算符: 运算符 描述 实例 + 加  表示两个对象相加 a + b输出结果3 ...

  7. python基础一数据类型之字符串

    摘要: python基础一中有字符串,所以这篇主要讲字符串. 一,字符串的注释 二,字符串的索引与切片 三,字符串的方法 一,字符串的注释 单引号 双引号 三引号都可以用户定义字符串.三引号不仅可以定 ...

  8. 【Python基础学习四】字符串(string)

    Python 字符串 字符串是 Python 中最常用的数据类型.可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 = 'hello' va ...

  9. 2.python基础深入(元组、字符串、列表、字典)

    一,对象与类 对象: python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,玩的手机就是对象. 我们通过描述属性(特征)和行为来描述一个对象的. 在python中,一个对象的特 ...

随机推荐

  1. mac中导出CSV格式在excel中乱码

    1 - 首先需要查看文档的编码格式: 安装enca:  brew install enca 使用命令 enca  file路径即可查到文件的编码格式 Universal transformation ...

  2. poj 2488 A Knight's Journey

    题目 题意:给出一个国际棋盘的大小 p*q,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. 因为要求字典序输出最小,所以按下图是搜索的次序搜素出来的就是最小的. 初始方向数组:i ...

  3. 主题模型之概率潜在语义分析(Probabilistic Latent Semantic Analysis)

    上一篇总结了潜在语义分析(Latent Semantic Analysis, LSA),LSA主要使用了线性代数中奇异值分解的方法,但是并没有严格的概率推导,由于文本文档的维度往往很高,如果在主题聚类 ...

  4. vdscode连接git服务器(以码云为例)

    准备工作:先下载并安装git客户端 1.在码云或者github上新建项目,获得新建项目的地址,得到一个类似:https://gitee.com/zhangshitongsky/vueTest.git ...

  5. 关于国密算法 SM1,SM2,SM3,SM4 的笔记

    国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.密钥长度和分组长度均为128位. SM1 为对称加密.其加密强度与AES相当.该算法不公开,调用该算法时,需要通过加密芯片的接 ...

  6. poj2828 线段树单点更新

    Buy Tickets Time Limit: 4000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java ...

  7. nodejs 环境配置技巧

    环境:Mac OSX 10.10.3 NodeJS:v0.12.2 NodeJs 安装指需要 1.执行 npm install xxxx -g 时 需要执行 sudo npm install xxxx ...

  8. PowerDesigner执行脚本 name/comment/stereotype互转

    执行方法:工具栏->Tools -> Execute Commands -> Edit/Run Script (Ctrl+Shift+X) 如下图所示: 1.Name转到Commen ...

  9. 面向对象总结、configparser配置文件模块、logging日志模块

    面向对象总结 # 学习态度# python基础 2个月# html css js jq 1个月 # 上课困 # 学习方法 :# 列出知识点# 例子 写了哪些 # 面向对象学了哪些块# 为什么要讲面向对 ...

  10. java.lang.System.setProperty()方法实例

    java.lang.System.setProperty() 方法设置指定键指定的系统属性. 声明 以下是java.lang.System.setProperty()方法的声明 public stat ...