为什么两个实现累进租金计算的Python函数输入相同输出不同
租金计算函数结果不一致问题排查
calculate_rent_1 逻辑错误
该函数的核心问题是档位阈值和判断对象不匹配:
- 每一层的判断阈值是基于原始收入的档位区间设置的,但实际判断的是已经扣减完前面档位后的剩余收入,导致档位匹配完全错误。
- 以输入23000为例的执行过程:
- 第一档计算:扣减0-9999段的9999,剩余收入为23000-9999=13001,累计租金499.95
- 代码错误判断剩余收入13001>9999,就判定符合第二档区间,直接将13001全部按10%计算,返回结果499.95 + 13001*0.1 = 1800.05
- 实际上第二档对应原始收入10000-19999,扣减完第一档后剩余收入最高只能到9999,剩下的13001里有3001属于第三档(20000+),应该按15%计算,这部分被漏算导致结果偏低。
calculate_rent_2 逻辑正确
该函数自顶向下的累进计算逻辑完全符合规则:
- 从最高档位开始计算,每一步只计算当前档位对应收入段的租金,再把剩余收入降到当前档位的下限,再计算更低档位的租金,不存在阈值匹配错误的问题。
- 以输入23000为例的执行过程:
- 23000属于第三档(20000-49999),计算该段租金:(23000-20000)*0.15=450,剩余收入降为19999,累计租金450
- 19999属于第二档(10000-19999),计算该段租金:(19999-10000)*0.1=999.9,剩余收入降为9999,累计租金1449.9
- 9999属于第一档(0-9999),计算该段租金:9999*0.05=499.95,累计租金1949.85,和函数返回结果一致。
手动计算验证
按照规则分段计算23000的应付租金:
- 0-9999段:9999*5% = 499.95
- 10000-19999段:9999*10% = 999.9
- 20000-23000段:3000*15% = 450
- 总租金:499.95 + 999.9 + 450 = 1949.85,和calculate_rent_2的结果一致。
内容的提问来源于stack exchange,提问作者Yellowjacket11
相关产品推荐
相关产品推荐

