You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:35:30