4. 格式化的精度控制
4.1 格式化字符串的过程中做数字的精度控制
如下代码,完成字符串、整数、浮点数,三种不同类型变量的占位
name = "传智播客" setup_year = 2006 stock_price = 19.99 message = "%s,成立于:%d,我今天的股价是:%f" % (name, setup_year, stock_price) print(message)
代码结果:
传智播客,成立于:2006,我今天的股价是:19.990000
细心的同学可能会发现:
浮点数19.99,变成了19.990000输出
这里我们就要讲解一下,字符串格式化之数字精度控制。
4.2 字符串格式化 - 数字精度控制
我们可以使用辅助符号"m.n"来控制数据的宽度和精度
m,控制宽度,要求是数字(很少使用),设置的宽度小于数字自身,不生效
.n,控制小数点精度,要求是数字,会进行小数的四舍五入
示例:
%5d:表示将整数的宽度控制在5位,如数字11,被设置为5d,就会变成:[空格][空格][空格]11,用三个空格补足宽度。
%5.2f:表示将宽度控制为5,将小数点精度设置为2
小数点和小数部分也算入宽度计算。 如,对11.345设置了%7.2f 后,结果是:[空格][空格]11.35。2个空格补足宽度,小数部分限制2位精度后,四舍五入为 .35
%.2f:表示不限制宽度,只设置小数点精度为2,如11.345设置%.2f后,结果是11.35
体验一下如下代码的快乐吧。
num1 = 11 num2 = 11.345 print("数字11宽度限制5,结果是:%5d" % num1) print("数字11宽度限制1,结果是:%1d" % num1) print("数字11.345宽度限制7,小数精度2,结果是:%7.2f" % num2) print("数字11.345不限制,小数精度2,结果是:%.2f" % num2)
代码结果:
数字11宽度限制5,结果是: 11 数字11宽度限制1,结果是:11 数字11.345宽度限制7,小数精度2,结果是: 11.35 数字11.345不限制,小数精度2,结果是:11.35
4.3 总结
精度控制的语法是:
m.n的形式控制,如%5d、%5.2f、%.2f
m和.n均可省略
如果m比数字本身宽度还小,会发生什么事?
m不生效
.n会对小数部分做精度限制,同时:?
会对小数部分做四舍五入
5. 字符串格式化方式2
5.1 字符串格式化 - 快速写法
目前通过%符号占位已经很方便了,还能进行精度控制。
可是追求效率和优雅的Python,是否有更加优雅的方式解决问题呢?
那当然:有
通过语法:f"内容{变量}"的格式来快速格式化
看如下代码
""" 演示第二种字符串格式化的方式:f"{占位}" """ name = "恒川" set_up_year = 2022 stock_price = 190.9 # f: format print(f"我是{name},我热爱跑步在:{set_up_year}年,我今天的热量是:{stock_price}")
代码结果:
我是恒川,我热爱跑步在:2022年,我今天的热量是:190.9
注意:这种写法不做精度控制,也不理会类型,适用于快速格式化字符串
5.2 总结
可以通过
f”{变量} {变量}”的方式进行快速格式化
这种方式:
不理会类型
不做精度控制
适合对精度没有要求的时候快速使用
6. 对表达式进行格式化
6.1 什么是表达式
刚刚的演示,都是基于变量的。
可是,我想更加优雅些,少写点代码,直接对“表达式”进行格式化是否可行呢?
那么,我们先了解一下什么是表达式。
表达式:一条具有明确执行结果的代码语句
如:
1 + 1、5 * 2,就是表达式,因为有具体的结果,结果是一个数字
又或者,常见的变量定义:
name = “张三” age = 11 + 11
等号右侧的都是表达式呢,因为它们有具体的结果,结果赋值给了等号左侧的变量。
6.2 表达式进行字符串格式化
那么,对于字符串格式化,能否直接格式化一个表达式呢?
可以,上代码:
""" 演示对表达式进行字符串格式化 """ print("1 * 1 的结果是:%d" % (1 * 1)) print(f"1 * 2的结果是:{1 * 2}") print("字符串在Python中的类型名是:%s" % type("字符串"))
代码结果:
1 * 1 的结果是:1 1 * 2的结果是:2 字符串在Python中的类型名是:<class 'str'>
在无需使用变量进行数据存储的时候,可以直接格式化表达式,简化代码哦
6.3 总结
表达式是什么?
表达式就是一个具有明确结果的代码语句,如 1 + 1、type(“字符串”)、3 * 5等
在变量定义的时候,如 age = 11 + 11,等号右侧的就是表达式,也就是有具体的结果,将结果赋值给了等号左侧的变量
如何格式化表达式?
f"{表达式}"
“%s \ %d \ %f” % (表达式、表达式、表达式)
6.4 股价计算小程序练习
定义如下变量:
name,公司名
stock_price,当前股价
stock_code,股票代码
stock_price_daily_growth_factor,股票每日增长系数,浮点数类型,比如1.2
growth_days,增长天数
计算,经过growth_days天的增长后,股价达到了多少钱
使用字符串格式化进行输出,如果是浮点数,要求小数点精度2位数。
示例输出:
提示,可以使用: 当前股价 * 增长系数 ** 增长天数, 用来计算最终股价哦
如,股价19.99 * 系数1.2 ** 7天 = 71.62778419199998,小数点现在精度2位后结果:71.63
本题代码如下:
""" 讲解字符串格式化的课后练习题 """ # 定义需要的变量 name = "传智播客" stock_price = 19.99 stock_code = "003032" # 股票 价格 每日 增长 因子 stock_price_daily_growth_factor = 1.2 growth_days = 7 # 每天都在增长,然后连续增长七天,七天的增长都是1.2,所以是1.2的七次方 finally_stock_price = stock_price * stock_price_daily_growth_factor ** growth_days print(f"公司:{name},股票代码:{stock_code},当前股价:{stock_price}") print("每日增长系数: %.1f,经过%d天的增长后,股价达到了:%.2f" % (stock_price_daily_growth_factor, growth_days, finally_stock_price)) # 这里的f注意要写成保留几位的形式
如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。