【问题描述】
输入两个实数,用指数形式(即科学记数法)输出它们的乘积。
输入数据:
请输入实数a的值:314.15926
请输入实数b的值:29.3892
输出结果:
314.159260*29.389200=9.23e+03
【题前思考】
根据问题描述,填写表2-2-7。
表2-2-7 问题分析
【解题思路】
将实型数据转化为指数形式,调用字符串的format( )方法将实数转换为指数形式,指数形式格式化的转换码是e。
【程序代码】
【代码分析】
①:为了便于查看,将等号后的内容写为□□9.23e+03,这里的方格子□表示空格,小数点占一个字符位置,总宽度为10,四舍五入保留两位小数。在左侧填充两个空格的原因是数据实际宽度为8。具体格式如图2-2-5所示。{}称为占位符,占位符中的内容被冒号分成两个部分,冒号前的数是被格式数据在format( )方法参数中的序号(也可以是在调用format( )方法时指定的参数名称,还可以缺省),冒号后是格式说明符,被格式数据将被格式说明符按其指定格式转换为字符串。程序中格式化的语句还可以写为以下两种形式。
形式1:
#:前缺省时各占位符依次从format( )方法的参数中取数据作为被格式数据
"{:f}*{:f}={:10.2e}".format(a,b,a*b)
形式2:
#format( )方法中参数名可以自行命名,此处命名为x,y,z
"{x:f}*{y:f}={z:10.2e}".format(x=a,y=b,z=a*b)
图2-2-5 数据格式说明
【优化提升】
将实数用指数形式格式化,除了可以用str.format( )方法外,还可以用格式字符串字面量表示为f"{a:f}*{b:f}={a*b:10.2e}"。以f开头的字符串就表示格式字符串,{a*b:10.2e}是占位符,表示用10.2e的格式输出a*b的值,占位符以外的其他字符原样输出。
【技术全貌】
Python的数据格式化主要有%格式符、format( )函数、str.format( )方法和格式字符串字面量4种方式,常用的输出格式转换码见表2-2-8。
表2-2-8 常用的格式转换码
format( )函数、str.format( )方法和格式字符串字面量的占位符结构如下所示:
表达式可以是任意合法的Python表达式。
填充字符可以是任意字符。当实际宽度小于指定宽度时,将会用填充字符填充字符串,直到宽度达到指定宽度。
对齐方式包括左对齐、居中对齐和右对齐,分别用符号<,^,>表示。
+表示任何情况下都有正负号;-表示只在负数的情况下加负号,正数没有符号。
#表示自动添加各进位制的前缀。如果用二进制输出会加前缀0b,八进制数加前缀0o,十六进制数加前缀0x。
0表示用0来填充符号至第一位整数间的位置。
最小宽度表示整个占位符要占用的宽度,如果实际宽度小于这个宽度,使用填充符填充,反之原样输出。
,表示对整数部分使用逗号作为千位分隔符。
.精度表示小数位数,要四舍五入。
类型使用表2-2-8中的格式转换码。
str.format( )方法格式字符串的使用方法与格式字符串字面量的结构类似,不同点在于str.format( )方法将冒号(:)前的内容放到了参数中,比如以下各print( )函数会输出相同的内容:3.26+7.85=11.10。
a=3.256 b=7.848
print(f"{a:<10.2f}+{b:<10.2f}={a+b:<10.2f}")
print("{0:<10.2f}+{1:<10.2f}={2:<10.2f}".format(a,b,a+b))
print("{:<10.2f}+{:<10.2f}={:<10.2f}".format(a,b,a+b))
print("{a:<10.2f}+{b:<10.2f}={c:<10.2f}".format(a=a,b=b,c=a+b))