设置数字和字符串的格式(已更新)


如果字符串有一部分是固定的,少部分需要动态改变,就把固定的额部分做成模板,动态的部分预留出位置,然后往里传参数替换。
几种方法都是占位置的方法和替换的方法的区别。

1、%占位符

使用字符串格式化操作符 % 替换,需要指定数据类型,字符串用%s,整数用%d,%.f 表示保留小数位,多个被替换的按顺序提供,使用元祖。经常用!

FormatStr = 'hello %s. Today is %s'
value = ('Mike', 'Wednesday')

print(FormatStr % value)
# hello Mike. Today is Wednesday

对于字符串有%s,浮点型或者整数还有其他格式:

  • %d 与 %.f
FormatStr='圆周率是 %.4f,保留小数点后 %d 位'
value=(pi,4)

print(pi,FormatStr % value)
# 3.141592653589793 圆周率是 3.1416,保留小数点后 4 位
  • 如果同时用到百分号和占位符,需要用两个%
FormatStr='成功率是10%%,如果%s首发成功率是%d%%'
value=('Mike',50)
print(FormatStr % value)
# 成功率是10%,如果Mike首发成功率是50%

2、string中的Template的subtitute方法

  • 通过Template类实例化出来一个模板字符串,$+变量名作为占位符,调用substitute方法,用关键字传参或者字典形式传参。不常用。
from string import Template

s1=Template('今天是$day,$name去上学了')

print(s1.substitute(day='Wednesday',name='Mike'))
# 今天是Wednesday,Mike去上学了
s2 = Template('今天是$day,$name去上学了')
dic = {'day': 'Wednesday', 'name': 'Mike'}
print(s2.substitute(dic))
# 今天是Wednesday,Mike去上学了
  • 用到$表示美元符号时,用两个$$
s1=Template('$num1$$ 能换$num2人民币')
dic={'num1':1,'num2':6.70}

print(s1.substitute(dic))
# 1$ 能换6.7人民币

3、format方法

经常用,比占位符%和$功能要强大。用一对大括号 { } 表示要格式化参数。
format方法主要注意三部分:{指定字段:转换标志+设置格式}

3.1 指定字段

  • 可以按顺序传参,不需要指定数据类型,可以传入支持的任何值!
s1='{} {} {}是好朋友'

print(s1.format('小明','小红','小强'))
# 小明 小红 小强是好朋友
  • 可以按关键字传参,关键字传参不用按照顺序
print('{a} {b} {c}'.format(a=1,c=2,b=3))

# 1 3 2
  • 可以按索引取参,可以混合关键字传参一起用
print('{0}成{s}于{1}{2}'.format('中国','1949年','10月1日',s='立'))
# 中国成立于1949年10月1日
  • 可以用列表。不常用。
NameList=['小明','小强']
s='其他两个人是{name[0]},{name[1]}'
print(s.format(name=NameList))
# 其他两个人是小明,小强

3.2 转换标志

结合格式化类型符

aUnicode形式输出
b整数转二进制输出
f浮点数,默认是6位
o八进制
x十六进制
e科学记数法
%百分比格式

大部分都用冒号,少量用!

print('Unicode编码显示:{s!a}'.format(s='你'))
# Unicode编码显示:'\u4f60'

print('二进制:{n:b}'.format(n=3))
# 二进制:11

print('科学记数法:{n2:e}'.format(n2=100))
# 科学记数法:1.000000e+02

print('百分比:{:%}'.format(0.05))
# 百分比:5.000000%

print('默认6位:{n:f}'.format(n=0.5))
# 默认6位:0.500000

当然转换进制更简单的写法:

# 将其他进制的字符串类型转成十进制
print(int('111',2)) # 将二进制数(字符串类型)转换成十进制
# 7
print(int('189',16)) # 将16进制转换成十进制
# 393
print(int('171',8))
# 121

# 将十进制转换成其他进制
print(bin(3))  # 转二进制
# 0b11
print(hex(11))  # 转十六进制
# 0xb
print(oct(11)) # 转八进制
# 0o13

3.3设置格式

3.3.1 附数字的format格式方法

数字字符串format方法,直接对数字设置样式,格式:format(数字,字符串形式的样式),加一句:浮点数默认是6位。

print(format(0.05,'0.3f'))
# 0.050 设置小数点后位数

print(format(0.05,'0.2%'))
# 5.00%

print(format(123456,','))
# 123,456 千分位逗号分隔

print(format(0.123,'>10.2f'))
# 10个字符长度内,右对齐,保留2位

print(format(0.12345,'0>10.2f'))
# 0000000.12 右对齐>补0,左对齐是<

print(format(0.12345,'@^10.4f'))
# @@0.1235@@ 中心对齐,补@

print(format(0.12345,'e'))
# 1.234500e-01

print(format(0.12345,'0.2e'))
# 1.23e-01

3.3.2字符串的format用法

格式为:
‘{:样式}’.format(值)

  • 对字符串里的数字来说设置宽度,默认右对齐,字符串是左对齐
print('距离{:5}还有{:5}天'.format('高考',10))
# 距离高考   还有   10天
  • 设置宽度,.f,字符串截取字符,数字表示非0整数位和小数位的总位数,或者整数位为0时,小数位的位数。
print('截取字符:{:.2}'.format('你好小朋友'))
# 截取字符:你好

print('设置数字位数:{:.2}'.format(1.12345))
# 设置数字位数:1.1

print('设置数字位数:{:.2}'.format(0.12345))
# 设置数字位数:0.12


t=format(1.12345,'0.2f')
print(type(t),t)
# <class 'str'> 1.12

t2 = '{:.2}'.format(1.12345)
print(type(t2), t2)
# <class 'str'> 1.1

t3 = '{:.2f}'.format(1.12345)
print(type(t3), t3)
# <class 'str'> 1.12
  • 左右中心对齐,不够位数补足,表示方法与数字格式化一致
print('{:!^10}'.format('你好'))
# !!!!你好!!!!

print('{:!<10}'.format('你好'))
# 你好!!!!!!!!

print('{:!>10}'.format('你好'))
# !!!!!!!!你好

print('{:!^9}'.format('你好'))
# !!!你好!!!!
  • 在负号- 与数字之间填充,可以用 = 表示。
print('{:!=10.2f}'.format(-1.123))
# -!!!!!1.12 在符号-和数字之间填充,共10位
  • 大括号之内还可以再嵌套
s1=input('输入要填充的符号')
print('{:{s}^10.2f}'.format(1.12345,s=s1))
# @@@1.12@@@

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值