带不同小费金额的小费计算器:无法保留两位小数问题
小费计算器格式化问题修复
你的代码主要问题出在小费金额的格式化输出上,另外还有几处可以优化的地方:
问题分析
- 错误的格式化写法:你用
{'ten.2f'}这种方式,本质是创建了一个包含字符串的集合,根本没有对变量ten进行保留两位小数的格式化。 - 冗余的类型转换:
bill_amount已经是浮点型,计算小费的结果自然也是浮点型,不需要再用float()包裹。 - 未使用的变量:
tip_option定义后没用到,如果你想让用户选择查看对应比例的小费,可以补充逻辑。
基础修正版代码
先解决格式化问题,让小费金额正确保留两位小数:
bill_amount = float(input('How much is the bill? $')) # 简化计算方式,直接乘以百分比系数 ten = bill_amount * 0.1 fifteen = bill_amount * 0.15 twenty = bill_amount * 0.2 # 使用f-string格式化,保留两位小数 print(f'10% Tip amount is {ten:.2f}') print(f'15% Tip amount is {fifteen:.2f}') print(f'20% Tip amount is {twenty:.2f}')
进阶优化版(支持用户选择)
如果要用到tip_option,让用户选择查看对应比例的小费,可以这样写:
bill_amount = float(input('How much is the bill? $')) tip_rates = { '10': bill_amount * 0.1, '15': bill_amount * 0.15, '20': bill_amount * 0.2 } tip_option = input('Tip Options (10/15/20): ') if tip_option in tip_rates: print(f'{tip_option}% Tip amount is {tip_rates[tip_option]:.2f}') else: print('Invalid tip option! Please choose 10, 15, or 20.')
内容的提问来源于stack exchange,提问作者Rasel Islam
相关产品推荐
相关产品推荐

