题目名称:小玉家的电费
时间限制:1000ms内存限制:256M
题目描述
夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。
输入描述:
输入一个整数,表示用电总计(单位以千瓦时计),不超过10000。
输出描述:
输出一个数,保留到小数点后1位(单位以元计,保留到小数点后1位)。
示例
示例1
输入267复制
输出121.5复制
提示
无
解题思路:
1、阶梯电价采用分段条件判断
if amount <=150:
result=amount*0.4463
elif amount <=400 and amount>150:
result=150*.4463+(amount-150)*0.4663
elif amount>400:
result = 150 * .4463 + (400 - 150) * 0.4663+(amount-400)*0.5663
2、保留到小数点后1位,按浮点数输出:
方法1:浮点格式化
无论如何都可以保留两位小数,而且符合四舍五入规则。
print("%.2f" %result)
# 1、结果存在,按四舍五入规则计算
# 2、当小数位不足时,会在尾部补充0。
# 3、当不存在小数时,会在尾部补充0至要求位数。
方法2: round(内置函数):较为简洁
小数部分位数大于等于要保留的位数时,四舍五入输出。
PS:假设需要保留2位小数,但当计算结果无2位及以上小数时,直接输出,不会补充0。
方法3: decimal(精确计算):四舍六入五成双
from decimal import Decimal
result= 121.50209999999998
Decimal(result).quantize(Decimal("0.00")) #保留小数点后两位
Out[10]: Decimal('121.50')
参考代码:
class Solution:
def __init__(self) -> None:
pass
def solution(self, amount):
result = None
# TODO: 请在此编写代码
if amount <=150:
result=amount*0.4463
elif amount <=400 and amount>150:
result=150*.4463+(amount-150)*0.4663
elif amount>400:
result = 150 * .4463 + (400 - 150) * 0.4663+(amount-400)*0.5663
return round(result, 1)
if __name__ == "__main__":
amount = int(input().strip())
sol = Solution()
result = sol.solution(amount)
print(result)