Python GIC函数循环返回值与预期不符问题排查
问题:GIC函数返回值与循环输出最终值不匹配
问题背景
代码分为Functions.py和t12.py两个文件,调用gic函数计算复利时,循环输出的第10年值为1628.89,但函数返回的最终值却是1710.34,两者不匹配。
当前代码
Functions.py
def gic(value, years, rate): print(f"\n{'Year':<2}{'Value $':>10s}") print("--------------") final_value = value for x in range(years + 1): print(f"{x:>2}{final_value:>12,.2f}") final_value *= (1 + (rate / 100)) return final_value
t12.py
# Imports from functions import gic # Inputs value = int(input("Value: ")) years = int(input("Years: ")) rate = float(input("Rate: ")) # Function calls final_value = gic(value, years, rate) print(f"\nFinal value: {final_value:.2f}")
当前输出(输入1000,10,5)
Value: 1000 Years: 10 Rate: 5 Year Value $ -------------- 0 1,000.00 1 1,050.00 2 1,102.50 3 1,157.62 4 1,215.51 5 1,276.28 6 1,340.10 7 1,407.10 8 1,477.46 9 1,551.33 10 1,628.89 Final value: 1710.34
期望输出
Value: 1000 Years: 10 Rate: 5 Year Value $ -------------- 0 1,000.00 1 1,050.00 2 1,102.50 3 1,157.62 4 1,215.51 5 1,276.28 6 1,340.10 7 1,407.10 8 1,477.46 9 1,551.33 10 1,628.89 Final value: 1628.89
问题原因
循环使用range(years + 1)会执行years+1次(从0到years)。每次循环先打印当前年份的final_value,再更新为下一年的值。当循环到第10次(x=10)时,打印完1628.89后,final_value会再次乘以1.05,变成1710.34并返回,导致返回值比最后一次打印的值多计算了一年复利。
修复方案
调整循环逻辑:先打印第0年的初始值,再循环years次,每次先计算下一年的值再打印。这样循环结束后,final_value正好是第years年的值,和打印的最后一行一致。
修改后的Functions.py
def gic(value, years, rate): print(f"\n{'Year':<2}{'Value $':>10s}") print("--------------") final_value = value # 打印第0年的初始值 print(f" 0{final_value:>12,.2f}") # 循环years次,计算并打印第1到第years年的值 for x in range(1, years + 1): final_value *= (1 + (rate / 100)) print(f"{x:>2}{final_value:>12,.2f}") return final_value
验证结果
运行修改后的代码,输入1000,10,5,输出与期望完全一致:
Value: 1000 Years: 10 Rate: 5 Year Value $ -------------- 0 1,000.00 1 1,050.00 2 1,102.50 3 1,157.62 4 1,215.51 5 1,276.28 6 1,340.10 7 1,407.10 8 1,477.46 9 1,551.33 10 1,628.89 Final value: 1628.89
内容的提问来源于stack exchange,提问作者HW19
相关产品推荐
相关产品推荐

