51..format
字符串格式化
文章目录
- 51.`.format`字符串格式化
- 1.课题导入
- 2.知识回顾
- 3.`.format`的基本用法
- 3.1{}为空
- 3.2 {}中有编号
- 3.3 {}中有变量名
- 4.浮点数的格式化
- 5.`.format`官方语法
- 6. `.format`格式化语法总结
- 7. 总结
- 8.课堂练习
1.课题导入
【描述】
用input函数输入你每个月的工资、每天消费的平均值及本月的天数,编写代码输出你当月的余额(假设有剩余)。
【参考】
输入
9000
80
31
输出
本月我还剩余6520.0元。
【备注】月工资为9000元,平均每天消费80元,本月有31天。
【体验代码】
字符串拼接法:
# input函数输入你的月工资,用变量gz存储
gz = input('你每月的工资是多少元?')
# input函数输入你每天的平均消费,用变量xf存储
xf = input('你平均每天消费多少钱?')
# input函数输入本月的天数,用户变量x存储
x = input('本月有多少天?')
# 余额=工资-平均消费*天数
yu = float(gz) - float(xf)*int(x)
print('本月我还剩余'+str(yu)+'元。')
【终端输出】
本月我还剩余6520.0元。
【代码解析】
-
input
函数获取的内容是字符串类型。如果获取的内容是需要用于计算的数字,要先将字符串转换成整数或浮点数。 -
float(gz)
和float(xf)
用float函数将终端输入的内容转换成浮点数参与计算。 -
int(x)
用int函数将输入的内容转换成整数参与计算。 -
yu = float(gz) - float(xf)*int(x)
得到的数据类型是浮点数。 -
str(yu)
用str函数将yu
的数据类型转换成字符串和前面的字符进行拼接。
2.知识回顾
上面的代码需要同时输出文本信息和变量,我们用了字符串拼接的方法。
我们发现输出有数值变量的一句话要先判断变量的数据类型,然后用函数统一数据类型,操作比较麻烦。
除了字符串拼接方法,同时输出文本信息和变量,我们还可以用更便捷的方法:字符串格式化。
之前我们学了一种格式化方法:%占位符格式化。
我们先回顾 %
占位符格式化语法。
【目标任务】
【描述】
输入自己的姓名、籍贯和毕业学校,按指定的格式输出到屏幕上。
【输入】
第一行输入姓名。
第二行输入籍贯。
第三行输入毕业学校。
【输出】
大家好,我叫XXX,来自XXX,毕业于XXX!
【示例】
输入:
安迪
云南
复旦大学
输出:
大家好,我叫安迪,来自云南,毕业于复旦大学!
【体验代码1】
name = input()
city = input()
school = input()
print("大家好,我叫%s,来自%s,毕业于%s! " % (name,city,school))
【终端输出】
大家好,我叫安迪,来自云南,毕业于复旦大学!
-
3个
%s
是我要替换的内容。 -
%
是占位符格化语法,是固定用法。 -
name,city,school
是我要替换%s
的变量,我也称它们为要格式化的变量。
3..format
的基本用法
本节我们学第2种字符串格式化方法。
format[ˈfɔːmæt]:格式。
.format
的通常有3种用法:
-
{}
为空。 -
{}
中有编号。 -
{}
中有变量名。
3.1{}为空
为了讲解方便,这里我直接给变量赋值,不再从终端获取数据。
name = "安迪"
city = "云南"
school = "复旦大学"
print("大家好,我叫{},来自{},毕业于{}!".format(name, city, school))
【终端输出】
大家好,我叫安迪,来自云南,毕业于复旦大学!
【编写思路】
一.编写格式化模板。
-
我们要输出的内容是:
大家好,我叫安迪,来自云南,毕业于复旦大学!
-
把要格式化的内容用英文大括号
{}
替换:
安迪
替换为大括号{}
。
云南
替换为大括号{}
。
复旦大学
替换为大括号{}
。
格式化模板为:"大家好,我叫{},来自{},毕业于{}!"
二. 语法关键字。
-
输入一个英文小圆点
.
-
format
关键字
三. 要格式化的变量。
(name, city, school)
英文圆括号中写入要格式化的变量名。
【语法解析】
{}
为空时默认按格式化变量的顺序自动格式化到大括号中。
【调整格式化变量的顺序】
将(name, city, school)
顺序调整为(school, name, city)
。
运行下面的代码,观察输出结果。
name = "安迪"
city = "云南"
school = "复旦大学"
print("大家好,我叫{},来自{},毕业于{}!".format( school, name, city))
【终端输出】
大家好,我叫复旦大学,来自安迪,毕业于云南!
观察输出结果,我们发现在{}
为空时,它是按照后面要格式化变量的顺序进行填充的。
因为school
在第1个,它替换了第1个{}
,输出内容变成了我叫复旦大学。
{}
为空时需要重点关注要格式化变量的顺序。
【{ }中输入了一个空格】
name = "安迪"
city = "云南"
school = "复旦大学"
print("大家好,我叫{ },来自{ },毕业于{ }!".format( school, name, city))
【终端输出】
KeyError: ' '
在编写格式化模板时,我在{}
中敲了一个空格。
我叫{}
变成我叫{ }
。
观察输出结果,程序报错。
初学者千万注意,这里的{}
中是不能写入空格的。
3.2 {}中有编号
print("大家好,我叫{0},来自{1},毕业于{2}!".format("安迪", "云南","复旦大学"))
【终端输出】
大家好,我叫安迪,来自云南,毕业于复旦大学!
【编写思路】
一.编写格式化模板。
-
我们要输出的内容是:
大家好,我叫安迪,来自云南,毕业于复旦大学!
-
把要格式化的内容用英文大括号加编号
{编号}
替换:
安迪
替换为{0}
。
云南
替换为{1}
。
复旦大学
替换为{2}
。
格式化模板为:"大家好,我叫{0},来自{1},毕业于{2}!"
二. 语法关键字。
-
输入一个英文小圆点
.
-
format
关键字
三. 要格式化的内容。
("安迪", "云南", "复旦大学")
英文圆括号中写入要格式化的内容。
【语法解析】
{编号}
:大括号中有编号时,按照格式化变量的编号顺序进行格式化。
【温馨提示】
Python中的正索引是从0开始编号的。
这里的编号顺序也是从0开始。
-
{0}表示要格式化的第1个变量,即"安迪"。
-
{1}表示要格式化的第2个变量,即 “云南”。
-
{2}表示要格式化的第3个变量,即 “复旦大学”。
【多次格式化同一个变量】
print(
"大家好,我叫{0},来自{1},我的同桌也来自{1},我们班有5个同学来自{1}!"
.format("安迪", "云南")
)
【终端输出】
大家好,我叫安迪,来自云南,我的同桌也来自云南,我们班有5个同学来自云南!
【代码解析】
上述代码格式化模板中我用了3个{1}
,即"云南"
我使用了3次。
只要内容相同,我们是可以多次使用的。
【格式化变量的顺序影响输出结果】
name = "安迪"
city = "云南"
school = "复旦大学"
print("大家好,我叫{0},来自{1},毕业于{2}!".format(school, name, city ))
【终端输出】
大家好,我叫复旦大学,来自安迪,毕业于云南!
【代码解析】
根据格式化变量(school, name, city )
的顺序:
{0}
要格式化的变量是school
,因此输出了我叫复旦大学
。
{1}
要格式化的变量是name
,因此输出了来自安迪
。
3.3 {}中有变量名
print(
"大家好,我叫{name},来自{city},毕业于{school}!"
.format(name = "安迪", school = "复旦大学", city = "云南")
)
【终端输出】
大家好,我叫安迪,来自云南,毕业于复旦大学!
【编写思路】
一.编写格式化模板。
-
我们要输出的内容是:
大家好,我叫安迪,来自云南,毕业于复旦大学!
-
把要格式化的内容用英文大括号加变量名
{变量名}
替换:
安迪
替换为{name}
。
云南
替换为{city}
。
复旦大学
替换为{school}
。
格式化模板为:"大家好,我叫{name},来自{city},毕业于{school}!"
二. 语法关键字。
-
输入一个英文小圆点
.
-
format
关键字
三. 要格式化的变量。
(name = "安迪", school = "复旦大学", city = "云南")
英文圆括号中写入已经赋值了的格式化变量。
【代码解析】
-
{name}
要替换的内容也可以直接用英文大括号加变量名表示。 -
(name = "安迪", school = "复旦大学", city = "云南")
给要格式化的变量直接赋值。 -
这种情况下不用考虑格式化变量的顺序。
-
程序会对照变量名进行格式化。
4.浮点数的格式化
【目标任务】
格式化输出3位数的小数。
【示例】
将3.1415926格式化后输出3.142。
【体验代码】
# :是固定语法
# .3 表示保留小数点后3位
# f 表示浮点数
print("{:.3f}".format(3.1415926))
【终端输出】
3.142
【编写思路】
-
输入英文冒号
:
。 -
输入一个英文小圆点
.
。
这里点表示告诉程序后面要采取的是精度操作,即保留小数点位数的操作。
- 输入一个整数,表示小数点保留的位数。
.1
表示保留1位小数。
.2
表示保留2位小数。
.3
表示保留3位小数。
-
f
表示数据类型为浮点数。 -
再输入一个英文小圆点
.
。
这里.format是格式化语法固定搭配。
-
输入
format
关键字。 -
要格式的浮点数本身或浮点数变量名。
【:.1f
保留1位小数】
print("{:.1f}".format(3.1415926))
【终端输出】
3.1
【:.2f
保留2位小数】
print("{:.2f}".format(3.1415926))
【终端输出】
3.14
【:.4f
保留4位小数】
print("{:.4f}".format(3))
【终端输出】
3.0000
5..format
官方语法
【以下内容不需要掌握】
【官方语法参考】
{参数序号:格式控制标记}.format(*args,**kwargs)
-
参数序号是位置参数或关键字参数传递过来的参数变量。
-
英文冒号
:
是固定语法。 -
格式控制标记用来控制参数显示时的格式。这里有9个可选的标记。
有对齐方式:<
表示左对齐;>
表示右对齐;^
居中对齐;=
数字填充。
有精度:精度即用英文小圆点.
表示,后面紧跟一个整数。操作对象为小数表示小数保留的位数;操作对象为字符串表示截取字符的个数。
有输出类型:默认为s;s
表示字符;d
表示整数;f
表示浮点数。
还有6种这里不做介绍。
-
.format
是格式化语法。 -
*args表示位置参数。
-
**kwargs表示关键字参数。
上面是str.format
格式化语法的官方介绍。
很多教材里也都是这么叙述的。
如果我像这样写,初学者很难看懂。
因此我用了大白话对官方描述进行了翻译。
初学者不用理解位置参数、关键字参数等含义,你把它理解成要格式化的对象即可。
其实,Python中很多函数都有很多个可选参数,例如print函数也有4个参数,我都没做详细介绍。
初学者不是研究者,我们先掌握基础语法和常用方法即可。
6. .format
格式化语法总结
{}
name = "安迪"
city = "云南"
school = "复旦大学"
print(
"大家好,我叫{},来自{},毕业于{}!"
.format( name, city, school)
)
【终端输出】
大家好,我叫安迪,来自云南,毕业于复旦大学!
{编号}
print(
"大家好,我叫{0},来自{1},毕业于{2}!"
.format("安迪", "云南","复旦大学")
)
【终端输出】
大家好,我叫安迪,来自云南,毕业于复旦大学!
{变量名}
print(
"大家好,我叫{name},来自{city},毕业于{school}!"
.format(name = "安迪", school = "复旦大学", city = "云南")
)
【终端输出】
大家好,我叫安迪,来自云南,毕业于复旦大学!
:.4f
保留4位小数
print("{:.4f}".format(3))
【终端输出】
3.0000
【备注】.format
格式化语法用例题理解更为直观。
.format
语法主要由3个部分组成:
-
格式化模板,即要输出的内容,需要格式化的地方用{}代替。
-
.format
,格式化语法。 -
要格式化的变量。
7. 总结
8.课堂练习
- 用
.format
格式化语法输出:我是白敬亭,今年29岁。
【体验代码】
# 原样输出:我是白敬亭,今年29岁。
print('我是白敬亭,今年29岁。')
print('我是{},今年{}岁。'.format('白敬亭',29))
print('我是{name},今年{age}岁。'.format(name='白敬亭',age=29))
【终端输出】
我是白敬亭,今年29岁。
我是白敬亭,今年29岁。
我是白敬亭,今年29岁。
- 用
.format
格式化语法输出:今天是12月17日,油价8.5元每升。
【体验代码】
# 方法一
print('今天是{},油价{}元每升。'.format('12月17日',8.5))
# 方法二
print('今天是{data},油价{price}元每升。'.format(data='12月17日',price=8.5))
【终端输出】
今天是12月17日,油价8.5元每升。
今天是12月17日,油价8.5元每升。