安迪Python

V1

2022/12/23阅读:25主题:默认主题

51.`.format`字符串格式化

51..format字符串格式化

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元。

【代码解析】

  1. input 函数获取的内容是字符串类型。如果获取的内容是需要用于计算的数字,要先将字符串转换成整数或浮点数。

  2. float(gz)float(xf)用float函数将终端输入的内容转换成浮点数参与计算。

  3. int(x)用int函数将输入的内容转换成整数参与计算。

  4. yu = float(gz) - float(xf)*int(x)得到的数据类型是浮点数。

  5. str(yu)用str函数将yu的数据类型转换成字符串和前面的字符进行拼接。

2.知识回顾

上面的代码需要同时输出文本信息和变量,我们用了字符串拼接的方法。

我们发现输出有数值变量的一句话要先判断变量的数据类型,然后用函数统一数据类型,操作比较麻烦。

除了字符串拼接方法,同时输出文本信息和变量,我们还可以用更便捷的方法:字符串格式化。

之前我们学了一种格式化方法:%占位符格式化。

我们先回顾 %占位符格式化语法。

【目标任务】

【描述】

输入自己的姓名、籍贯和毕业学校,按指定的格式输出到屏幕上。

【输入】

第一行输入姓名。

第二行输入籍贯。

第三行输入毕业学校。

【输出】

大家好,我叫XXX,来自XXX,毕业于XXX!

【示例】

输入:
安迪
云南
复旦大学
输出:
大家好,我叫安迪,来自云南,毕业于复旦大学!

【体验代码1】

name = input()
city = input()
school = input()
print("大家好,我叫%s,来自%s,毕业于%s! "  %  (name,city,school))

【终端输出】

大家好,我叫安迪,来自云南,毕业于复旦大学! 
  1. 3个%s 是我要替换的内容。

  2. %是占位符格化语法,是固定用法。

  3. name,city,school是我要替换%s的变量,我也称它们为要格式化的变量。

3..format的基本用法

本节我们学第2种字符串格式化方法。

format[ˈfɔːmæt]:格式。

.format的通常有3种用法:

  1. {}为空。

  2. {}中有编号。

  3. {}中有变量名。

3.1{}为空

为了讲解方便,这里我直接给变量赋值,不再从终端获取数据。

name = "安迪"
city = "云南"
school = "复旦大学"
print("大家好,我叫{},来自{},毕业于{}!".format(name, city, school))

【终端输出】

大家好,我叫安迪,来自云南,毕业于复旦大学!

【编写思路】

一.编写格式化模板。

  1. 我们要输出的内容是:大家好,我叫安迪,来自云南,毕业于复旦大学!

  2. 把要格式化的内容用英文大括号{}替换:

安迪替换为大括号{}

云南替换为大括号{}

复旦大学替换为大括号{}

格式化模板为:"大家好,我叫{},来自{},毕业于{}!"

二. 语法关键字。

  1. 输入一个英文小圆点.

  2. format关键字

三. 要格式化的变量。

  1. (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("安迪""云南","复旦大学"))

【终端输出】

大家好,我叫安迪,来自云南,毕业于复旦大学!

【编写思路】

一.编写格式化模板。

  1. 我们要输出的内容是:大家好,我叫安迪,来自云南,毕业于复旦大学!

  2. 把要格式化的内容用英文大括号加编号{编号}替换:

安迪替换为{0}

云南替换为{1}

复旦大学替换为{2}

格式化模板为:"大家好,我叫{0},来自{1},毕业于{2}!"

二. 语法关键字。

  1. 输入一个英文小圆点.

  2. format关键字

三. 要格式化的内容。

  1. ("安迪", "云南", "复旦大学")英文圆括号中写入要格式化的内容。

【语法解析】

{编号}:大括号中有编号时,按照格式化变量的编号顺序进行格式化。

【温馨提示】

Python中的正索引是从0开始编号的。

这里的编号顺序也是从0开始。

  1. {0}表示要格式化的第1个变量,即"安迪"。

  2. {1}表示要格式化的第2个变量,即 "云南"。

  3. {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 = "云南")
    )

【终端输出】

大家好,我叫安迪,来自云南,毕业于复旦大学!

【编写思路】

一.编写格式化模板。

  1. 我们要输出的内容是:大家好,我叫安迪,来自云南,毕业于复旦大学!

  2. 把要格式化的内容用英文大括号加变量名{变量名}替换:

安迪替换为{name}

云南替换为{city}

复旦大学替换为{school}

格式化模板为:"大家好,我叫{name},来自{city},毕业于{school}!"

二. 语法关键字。

  1. 输入一个英文小圆点.

  2. format关键字

三. 要格式化的变量。

  1. (name = "安迪", school = "复旦大学", city = "云南")英文圆括号中写入已经赋值了的格式化变量。

【代码解析】

  1. {name}要替换的内容也可以直接用英文大括号加变量名表示。

  2. (name = "安迪", school = "复旦大学", city = "云南")给要格式化的变量直接赋值。

  3. 这种情况下不用考虑格式化变量的顺序。

  4. 程序会对照变量名进行格式化。

4.浮点数的格式化

【目标任务】

格式化输出3位数的小数。

【示例】

将3.1415926格式化后输出3.142。

【体验代码】

# :是固定语法
# .3 表示保留小数点后3位
# f 表示浮点数
print("{:.3f}".format(3.1415926))

【终端输出】

3.142

【编写思路】

  1. 输入英文冒号:

  2. 输入一个英文小圆点.

这里点表示告诉程序后面要采取的是精度操作,即保留小数点位数的操作。

  1. 输入一个整数,表示小数点保留的位数。

.1表示保留1位小数。

.2表示保留2位小数。

.3表示保留3位小数。

  1. f表示数据类型为浮点数。

  2. 再输入一个英文小圆点.

这里.format是格式化语法固定搭配。

  1. 输入format关键字。

  2. 要格式的浮点数本身或浮点数变量名。

:.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)

  1. 参数序号是位置参数或关键字参数传递过来的参数变量。

  2. 英文冒号:是固定语法。

  3. 格式控制标记用来控制参数显示时的格式。这里有9个可选的标记。

有对齐方式:<表示左对齐;>表示右对齐;^居中对齐;=数字填充。

有精度:精度即用英文小圆点.表示,后面紧跟一个整数。操作对象为小数表示小数保留的位数;操作对象为字符串表示截取字符的个数。

有输出类型:默认为s;s表示字符;d表示整数;f表示浮点数。

还有6种这里不做介绍。

  1. .format是格式化语法。

  2. *args表示位置参数。

  3. **kwargs表示关键字参数。

上面是str.format格式化语法的官方介绍。

很多教材里也都是这么叙述的。

如果我像这样写,初学者很难看懂。

因此我用了大白话对官方描述进行了翻译。

初学者不用理解位置参数、关键字参数等含义,你把它理解成要格式化的对象即可。

其实,Python中很多函数都有很多个可选参数,例如print函数也有4个参数,我都没做详细介绍。

初学者不是研究者,我们先掌握基础语法和常用方法即可。

6. .format格式化语法总结

  1. {}
name = "安迪"
city = "云南"
school = "复旦大学"
print(
    "大家好,我叫{},来自{},毕业于{}!"
    .format(  name, city, school)
    )

【终端输出】

大家好,我叫安迪,来自云南,毕业于复旦大学!
  1. {编号}
print(
    "大家好,我叫{0},来自{1},毕业于{2}!"
    .format("安迪""云南","复旦大学")
    )

【终端输出】

大家好,我叫安迪,来自云南,毕业于复旦大学!
  1. {变量名}
print(
    "大家好,我叫{name},来自{city},毕业于{school}!"
    .format(name = "安迪", school = "复旦大学", city = "云南")
    )

【终端输出】

大家好,我叫安迪,来自云南,毕业于复旦大学!
  1. :.4f保留4位小数
print("{:.4f}".format(3))

【终端输出】

3.0000

【备注】.format格式化语法用例题理解更为直观。

.format语法主要由3个部分组成:

  1. 格式化模板,即要输出的内容,需要格式化的地方用{}代替。

  2. .format,格式化语法。

  3. 要格式化的变量。

7. 总结

1
1

8.课堂练习

  1. .format格式化语法输出:我是白敬亭,今年29岁。

【体验代码】

# 原样输出:我是白敬亭,今年29岁。
print('我是白敬亭,今年29岁。')

print('我是{},今年{}岁。'.format('白敬亭',29))

print('我是{name},今年{age}岁。'.format(name='白敬亭',age=29))

【终端输出】

我是白敬亭,今年29岁。
我是白敬亭,今年29岁。
我是白敬亭,今年29岁。
  1. .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元每升。

分类:

后端

标签:

Python

作者介绍

安迪Python
V1