Printf-Style String Formatting: Printf风格字符串格式化
salary = input('请输入薪资:')
# 计算出缴税额,存入变量tax
tax = int(salary) *25/100
# 转化为字符串,方便下面的字符串拼接
taxStr = str(tax)
# 计算出税后工资,存入变量aftertax
aftertax = int(salary) *75/100
# 转化为字符串,方便下面的字符串拼接
aftertaxStr = str(aftertax)
print('税前薪资是:' + salary + '元, 缴税:' + taxStr + '元, 税后薪资是:' + aftertaxStr + '元')
字符串的多次拼接比较麻烦,一不下心就可能漏掉一个加号或者引号。
如果我们写成:
税前薪资是 x 元, 缴税:y 元, 税后薪资是:z 元
然后,我们直接将计算好的税前薪资、缴税、税后薪资分别作为x、y、z填入进去。
那这样就不需要麻烦的字符串拼接了。
Python支持这样的操作,这样的操作称为字符串的格式化。
printf格式化字符串的方式:
salary = input('请输入薪资:')
# 计算出缴税额,存入变量tax
tax = int(salary) * 25 / 100
# 转化为字符串,方便下面的字符串拼接
taxStr = str(tax)
# 计算出税后工资,存入变量aftertax
aftertax = int(salary) * 75 / 100
# 转化为字符串,方便下面的字符串拼接
aftertaxStr = str(aftertax)
print('税前薪资:%s 元, 缴税:%s 元, 税后薪资:%s 元' % (salary, taxStr, aftertaxStr))
税前薪资:%s 元, 缴税:%s 元, 税后薪资:%s 元
这个是一个模板,%s就是模板中的占位符,表示这个位置先占着,待会儿有数据要填入到这里。
然后再提供一个元组,里面依次放需要填入到%s位置的数据。
%s 是一种格式化符号, Python 解释器 看到 %s , 就会调用内置函数 str(),并将对应的 格式化对象 作为 参数传入 , 返回的结果字符串填入对应占位符。
简单说 %s 位置填入的结果,就是调用str函数的返回值。
str()内置函数的参数 可以是任何类型的对象,比如:字符串、 整数、 浮点数、列表、元组 等等,都可以。
所以 %s 为占位符, 对应的格式化对象, 不仅仅是字符串,还可以是整数、 浮点数、列表、元组 等等。
salary = input('请输入薪资:')
# 计算出缴税额,存入变量tax
tax = int(salary) * 25 / 100
# 转化为字符串,方便下面的字符串拼接
# taxStr = str(tax)
# 计算出税后工资,存入变量aftertax
aftertax = int(salary) * 75 / 100
# 转化为字符串,方便下面的字符串拼接
# aftertaxStr = str(aftertax)
print('税前薪资:%s 元, 缴税:%s 元, 税后薪资:%s 元' % (salary, tax, aftertax))
格式化字符串里面占位符的个数必须和后面元组中对应的格式化对象数量相同。
记住,元组中只有1个元素的时候,后面别忘了要加一个逗号。
salary = input('请输入薪资:')
# 计算出缴税额,存入变量tax
tax = int(salary) * 25 / 100
# 转化为字符串,方便下面的字符串拼接
# taxStr = str(tax)
# 计算出税后工资,存入变量aftertax
aftertax = int(salary) * 75 / 100
# 转化为字符串,方便下面的字符串拼接
# aftertaxStr = str(aftertax)
print('税前薪资:%10d 元, 缴税:%10d 元, 税后薪资:%10d 元' % (int(salary), int(tax), int(aftertax)))
格式化要求对齐好看,才会有这种需求。
可以参考官网:
f-string格式化字符串:
salary = input('请输入薪资:')
# 计算出缴税额,存入变量tax
tax = int(salary) * 25 / 100
# 计算出税后工资,存入变量aftertax
aftertax = int(salary) * 75 / 100
print(f'税前薪资是:{salary}元, 缴税:{tax}元, 税后薪资是:{aftertax}元')
那这种方式是更加直观,操作起来更加方便。
需要注意的是,这个功能是在python3.6之后的版本才支持。
f-string格式指定宽度:
公共的代码写到函数中,调用这个函数,把变化的值作为参数传进来。
def calcTax(salary):
# 计算出缴税额,存入变量tax
tax = int(salary) * 25 / 100
# 计算出税后工资,存入变量aftertax
aftertax = int(salary) * 75 / 100
print(f'税前薪资是:{salary:10}元, 缴税:{tax:10}元, 税后薪资是:{aftertax:10}元')
calcTax(8000)
calcTax(10000)
calcTax(15000)
左对齐:
def calcTax(salary):
# 计算出缴税额,存入变量tax
tax = int(salary) * 25 / 100
# 计算出税后工资,存入变量aftertax
aftertax = int(salary) * 75 / 100
print(f'税前薪资是:{salary:<10}元, 缴税:{tax:<10}元, 税后薪资是:{aftertax:<10}元')
calcTax(8000)
calcTax(10000)
calcTax(15000)
右对齐就使用>符号。
小数点位数:
def calcTax(salary):
# 计算出缴税额,存入变量tax
tax = int(salary) * 25 / 100
# 计算出税后工资,存入变量aftertax
aftertax = int(salary) * 75 / 100
print(f'税前薪资是:{salary:<10.2f}元, 缴税:{tax:<10.2f}元, 税后薪资是:{aftertax:<10.2f}元')
calcTax(8000)
calcTax(10000)
calcTax(15000)
这样整体还是比较整齐,比较美观。
不足补零:
def calcTax(salary):
# 计算出缴税额,存入变量tax
tax = int(salary) * 25 / 100
# 计算出税后工资,存入变量aftertax
aftertax = int(salary) * 75 / 100
print(f'税前薪资是:{salary:>010.2f}元, 缴税:{tax:>010.2f}元, 税后薪资是:{aftertax:>010.2f}元')
calcTax(8000)
calcTax(10000)
calcTax(15000)
在工作中,可以多看Python的官方文档。