python格式化字符串有%和{}两种 字符串格式控制符.
字符串输入数据格式类型(%格式操作符号)
%%百分号标记
%c字符及其ASCII码
%s字符串
%d有符号整数(十进制)
%u无符号整数(十进制)
%o无符号整数(八进制)
%x无符号整数(十六进制)
%X无符号整数(十六进制大写字符)
%e浮点数字(科学计数法)
%E浮点数字(科学计数法,用E代替e)
%f浮点数字(用小数点符号)
%g浮点数字(根据值的大小采用%e或%f)
%G浮点数字(类似于%g)
%p指针(用十六进制打印值的内存地址)
%n存储输出字符的数量放进参数列表的下一个变量中
字符串格式控制
%[(name)][flag][width][.][precision]type
name:可为空,数字(占位),命名(传递参数名,不能以数字开头)以字典格式映射格式化,其为键名
flag:标记格式限定符号,包含+-#和0,+表示右对齐(会显示正负号),-左对齐,前面默认为填充空格(即默认右对齐),0表示填充0,#表示八进制时前面补充0,16进制数填充0x,二进制填充0b
宽度(最短长度,包含小数点,小于width时会填充)
precision:小数点后的位数,与C相同
type:输入格式类型,请看上面
还有一种format_spec格式
{[name][:][[fill]align][sign][#][0][width][,][.precision][type]}
用{}包裹name命名传递给format以命名=值 写法,非字典映射,其他和上面相同
fill = <any character> #fill是表示可以填写任何字符
align = "<" | ">" | "=" | "^" #align是对齐方式,<是左对齐, >是右对齐,^是居中对齐。
sign = "+" | "-" | " " #sign是符号, +表示正号, -表示负号
width = integer #width是数字宽度,表示总共输出多少位数字
precision = integer #precision是小数保留位数
type = "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%" #type是输出数字值是的表示方式,比如b是二进制表示;比如E是指数表示;比如X是十六进制表示
例子
1 print("{:,}".format(123456))#输出1234,56
2 print("{a:w^8}".format(a="8"))#输出www8wwww,填充w
3 print("%.5f" %5)#输出5.000000
4 print("%-7s3" %("python"))#输出python 3
5 print("%.3e" %2016)#输出2.016e+03,也可以写大E
6 print("%d %s" %(123456,"myblog"))#输出123456 myblog
7 print("%(what)s is %(year)d" % {"what":"this year","year":2016})#输出this year is 2016
8 print("{0}{1}".format("hello","fun"))#输出hellofun,这与CSharp的格式化字符(占位符)相似
9 print("{}{}{}".format("spkk",".","cn"))#输出spkk.cn
10 print("{a[0]}{a[1]}{a[2]}".format(a=["spkk",".","cn"]))#输出spkk.cn
11 print("{dict[host]}{dict[dot]}{dict[domain]}".format(dict={"host":"www","domain":"spkk.cn","dot":"."}))#输出www.spkk.cn
12 print("{a}{b}".format(a="python",b="3"))#输出python3
13 print("{who} {doing} {0}".format("python",doing="like",who="I"))#输出I like python
格式化输出中,如果要传入一个字典,需要在占位符%后面加上(key值)再加数据类型s或d
格式化输出中,如果要直接输出一个%号,需要用%来对自己进行转义,即%%
方法一:
name = input('请输入姓名:')
age = int(input('请输入年龄:'))
course = input('请输入科目:')
progress = float(input('请输入学习进度:'))
msg = '''
-----%s的信息-----
姓名:%s
年龄:%d
科目:%s
学习进度:%.2f%%
----- end -----------
'''%(name, name, age, course, progress)
print(msg)
方法二:
dic = {'姓名': '小明', '年龄': 20, '科目': 'Python', '学习进度': 10}
msg = '''
-----%(姓名)s的信息-----
姓名:%(姓名)s
年龄:%(年龄)d
科目:%(科目)s
学习进度:%(学习进度)d%%
----- end -----------
'''%dic
print(msg)
结果:
-----小明的信息-----
姓名:小明
年龄:20
科目:Python
学习进度:10%
----- end -----------
msg = '我叫%s,今年%d,学习进度%.2f%%' % ('小明', 18, 20.555)
print(msg)
#%.2f表示浮点数类型占位,只保留2位小数
format格式化输出,必须按顺序写
msg = 'my name is {0}, and i am {1} years old'
print(msg.format('Tom','20'))
#my name is Tom, and i am 20 years old
#按关键字名称写,无需按顺序,推荐用这种方法
msg2 = 'my name is {name}, and i am {age} years old'
print(msg2.format(age=22, name='Jack'))
#my name is Jack, and i am 22 years old
format比%形式有一个优势是当有一个参数需要多次传入时,%只能多次传入,format只需要传入一次关键字名称就可以
msg = "{name}'s age is {age}, {name}'s job is {job}, {name}'s sex is {sex}"
print(msg.format(name='Tom',age=20,job='IT',sex='male'))
Tom's age is 20, Tom's job is IT, Tom's sex is male
加颜色输出
一、样式开始