Python复利计算代码报错:预期类型'SupportsIndex',实际为'float'
解决复利计算代码的报错与逻辑问题
报错核心原因
range()函数的参数必须是整数类型,但你定义的t是浮点数(float),因此触发TypeError: 'float' object cannot be interpreted as an integer错误。此外你的代码还有两处逻辑问题,无法实现“迭代获取每个周期末金额”的需求,一并修正如下:
修正步骤与完整代码
1. 修正变量类型
将复利次数no和时间年限t转为整数类型,确保range()能正常接收参数。
2. 修复复利计算公式
原代码中Qout的括号位置错误,导致复利计算逻辑完全偏离,需调整括号位置。
3. 重构循环逻辑
从初始本金开始,逐个周期计算复利,将每个周期末的金额存入列表,实现迭代获取的需求。
p = float(input('Please input any amount\n')) i = float(input('Enter the interest rate\n')) no = int(input('''Enter number of times interest is compounded in a year eg per month = 12 or per quarter = 4, and if per year, please enter 1\n''')) t = int(input('Enter time period in years\n')) # 计算单个复利周期的利率 period_rate = i / (100 * no) # 计算总复利周期数 total_periods = t * no Amount = [p] # 初始本金存入列表 current_amount = p # 迭代计算每个周期末的金额 for _ in range(total_periods): current_amount = current_amount * (1 + period_rate) Amount.append(current_amount) # 格式化输出每个周期的金额 print("每个周期末的金额:") for cycle, amount in enumerate(Amount): print(f"第{cycle}个周期末:{round(amount, 2)}")
代码说明
- 用
int()转换no和t,彻底解决range()的类型报错问题。 - 从初始本金开始,每个周期基于当前金额计算复利,保证列表中存储的是每个周期末的实时金额,完全匹配你的需求。
- 修复了原代码中复利公式的括号错误,确保计算逻辑符合复利规则。
- 最后通过
enumerate()遍历列表,清晰展示每个周期对应的金额。
内容的提问来源于stack exchange,提问作者iamgroot
相关产品推荐
相关产品推荐

