Python贷款计算器:等额本息与等额本金还款方案详解

article/2025/6/21 15:25:40

Python贷款计算器:等额本息与等额本金还款方案详解

  • 一、摘要
  • 二、整体架构流程
    • 1. 输入处理层
    • 2. 核心计算层
    • 3. 结果输出层
  • 三、具体技术细节
    • 1. 等额本息实现解析
    • 2. 等额本金实现解析
    • 3. 输出格式化技术
  • 四、运行
    • 1.等额本息
    • 2.等额本金
  • 五、结论
  • 附:完整代码

一、摘要

本文介绍一款基于Python的贷款还款计算工具,支持等额本息与等额本金两种主流还款方式。通过输入贷款总额、年利率和期限,可自动生成包含每月还款明细的Excel表格,并在控制台展示首年还款计划。核心算法严格遵循金融计算公式,等额本息采用等比数列求和推导月供公式,等额本金实现线性递减利息计算。程序包含完善的输入验证(如贷款期限≤30年)和异常处理机制,输出结果包含总还款额、总利息等关键指标。特别针对等额本金方式,额外显示首月还款峰值及月减额。本工具适用于房贷/车贷场景,既可作为金融从业者的分析助手,也可帮助普通用户直观对比还款方案差异。

二、整体架构流程

1. 输入处理层

  • 通过input()获取用户输入的贷款总额、年利率(需转换为月利率)、还款年限及还款方式选择
  • 关键验证逻辑:
    if principal <= 0 or annual_rate < 0 or years <= 0 or total_months > 360:raise ValueError("输入参数无效")
    

2. 核心计算层

  • 等额本息算法calculate_equal_principal_and_interest):
    monthly_payment = principal * monthly_rate * (1 + monthly_rate) ** months / ((1 + monthly_rate) ** months - 1)
    
    采用等比数列求和公式推导,确保每月还款额固定
  • 等额本金算法calculate_equal_principal):
    monthly_principal = principal / months  # 每月固定本金
    interest = remaining_principal * monthly_rate  # 剩余本金计息
    

3. 结果输出层

  • 生成带格式的Excel文件(需openpyxl引擎)
  • 控制台输出首年还款明细(超过12个月时自动折叠中间月份)
  • 汇总信息包含总利息、等额本金特有统计项

三、具体技术细节

1. 等额本息实现解析

  • 月供公式推导
    通过等比数列求和公式推导得出:
    M = P × r ( 1 + r ) n ( 1 + r ) n − 1 M=P\times \frac{r\left ( 1+r \right )^{n}}{\left ( 1+r \right )^{n}-1} M=P×(1+r)n1r(1+r)n
    其中 M M M为月供, P P P为本金, r r r为月利率, n n n为还款月数。
  • 数据流控制
    remaining_principal -= principal_paid  # 每月更新剩余本金
    details.append({...})  # 存储包含五维数据的字典
    

2. 等额本金实现解析

  • 递减特性实现
    payment = monthly_principal + (remaining_principal * monthly_rate)
    remaining_principal -= monthly_principal  # 每月固定扣减本金
    
  • 月减额计算
    首月利息: P × r P\times r P×r
    次月利息: ( P − P n ) × r \left ( P-\frac{P}{n} \right )\times r (PnP)×r
    月减额: P n × r \frac{P}{n}\times r

http://www.hkcw.cn/article/xoJKARijRw.shtml

相关文章

【Python专栏】Python中的浮点数类型

Python中的浮点数类型是有范围的,我们如何知道浮点数的范围呢?我们可以使用如下的方法来确定我们的浮点数的上下限。 Import sys Print(sys.float_info) 在编程语言中,如果我们计算的是浮点数计算,我们都会碰到计算精度的问题。原因是因为Double

【判断数字递增】2021-12-19

缘由用C/C实现数字递增问题&#xff1f;-编程语言-CSDN问答 给定一个正整数 n&#xff0c;请判断 n 的所有数位上的值是否从左到右是严格递增的。   例如&#xff1a;1589 是严格递增的。   再如&#xff1a;1336 不是严格递增的&#xff0c;中间有相同的 3。   再如&am…

计算机网络之路由表更新

1.解题思路 对新接收到的路由表进行更新&#xff0c;全部"距离"1&#xff0c;且"下一跳路由器"都写成发送方路由器的名称。 开始对比新表和原来的路由表 1.看目的网络 如果是新的目的网络&#xff0c;则直接把对应的各项信息填入表中&#xff1b;如果是相同…

前端学习(7)—— HTML + CSS实现博客系统页面

目录 一&#xff0c;效果展示 二&#xff0c;实现博客列表页 2.1 实现导航栏 2.2 实现个人信息 2.3 实现博客列表 三&#xff0c;实现博客正文页 3.2 复用 3.4 实现博客正文 四&#xff0c;实现博客登录页 4.1 版心 4.2 登录框 五&#xff0c;实现博客编辑页 5.1 …

使用 HTML + JavaScript 实现一个日历任务管理系统

在现代快节奏的生活中&#xff0c;有效的时间管理变得越来越重要。本项目是一个基于 HTML 和 JavaScript 开发的日历任务管理系统&#xff0c;旨在为用户提供一个直观、便捷的时间管理工具。系统不仅能够清晰地展示当月日期&#xff0c;还支持事件的添加、编辑和删除操作&#…

最卸载器——Geek Uninstaller 使用指南

Geek Uninstaller 是一款轻量级的第三方卸载工具&#xff0c;专为 Windows 系统设计&#xff0c;提供比系统默认卸载器更彻底的应用清除能力。它体积小、绿色免安装&#xff0c;使用起来简单直观&#xff0c;但功能却不含糊。 一、为什么要用 Geek Uninstaller&#xff1f; Wi…

在QT中,利用charts库绘制FFT图形

第1章 添加charts库 1.1 .pro工程添加chart库 1.1.1 在.pro工程里面添加charts库 1.1.2 在需要使用的地方添加这两个库函数&#xff0c;顺序一点不要搞错&#xff0c;先添加.pro&#xff0c;否则编译器会找不到这两个.h文件。 第2章 Charts关键绘图函数 2.1 QChart 类 QChart 是…

5G-A:开启通信与行业变革的新时代

最近&#xff0c;不少细心的用户发现手机信号标识悄然发生了变化&#xff0c;从熟悉的 “5G” 变成了 “5G-A”。这一小小的改变&#xff0c;却蕴含着通信技术领域的重大升级&#xff0c;预示着一个全新的通信时代正在向我们走来。今天&#xff0c;就让我们深入了解一下 5G-A&a…

web安全开发,在线%机器学习异常流量检测系统%开发demo

框架:html,css,jquery,echart,python,flask,sklearn,uniapp,apk,kdd和nsl,mysql数据库。 经验心得 这是一个响应式的 H5 页面&#xff0c;适用于手机端和电脑端&#xff0c;平板&#xff0c;各种小程序。本来想vxxx小程序和AndroidStudo写两个但是工作量太多了加上也不是商用&…

每日算法-250531

每日算法学习记录 - 250531 今天完成了两道 LeetCode 题目&#xff0c;主要用到了前缀和的思想。记录如下&#xff1a; 1. 2559. 统计范围内的元音字符串数 题目 思路 前缀和 解题过程 我们可以先预处理出一个前缀和数组 nums&#xff0c;其中 nums[i] 表示 words 数组中从下…

CTFHub-RCE eval执行

观察源代码 我们可以发现源代码是request请求&#xff0c;所以我们可以通过GET或者POST请求&#xff0c;利用cmd参数进行命令执行 判断是Windows还是Linux 用GET请求 /?cmdsystem(ipconfig); 无回显 说明不是Windows系统 /?cmdsystem(ifconfig); 可以发现有回显&…

MCP架构深度解析:从基础原理到核心设计

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 持续学习&#xff0c;不断…

MySql(九)

目录 条件查询 1&#xff09;准备一张表 2&#xff09;插入数据 3&#xff09;条件查询格式 1---比较运算符 >大于 2---比较运算符 < 小于 3---比较运算符 > 大于等于 4---比较运算符 < 小于等于 5---比较运算符 ! 不等于 6---比较运算符 <> 不等于 7---比较…

赛博算命之“帝王之术”——奇门遁甲的JAVA实现

个人主页 文章专栏 文章目录 个人主页文章专栏 #前言#背景介绍#原理分析**一、干支系统计算**1. **四柱干支生成**2. **旬首与空亡判断** **二、九宫格与洛书模型**1. **地盘固定排布**2. **天盘动态移动** **三、阴阳遁与局数计算**1. **阴阳遁判断**2. **局数计算** **四、九…

C++ 栈(Stack)与队列(Queue)深度解析:从原理到实战

一、栈&#xff08;Stack&#xff09;&#xff1a;后进先出&#xff08;LIFO&#xff09;的线性结构 1. 核心特性与应用场景 特性&#xff1a;仅允许在栈顶进行元素的插入&#xff08;push&#xff09;和删除&#xff08;pop&#xff09;操作&#xff0c;遵循 “后进先出” 原…

【C++高级主题】命令空间(五):类、命名空间和作用域

目录 一、实参相关的查找&#xff08;ADL&#xff09;&#xff1a;函数调用的 “智能搜索” 1.1 ADL 的核心规则 1.2 ADL 的触发条件 1.3 ADL 的典型应用场景 1.4 ADL 的潜在风险与规避 二、隐式友元声明&#xff1a;类与命名空间的 “私密通道” 2.1 友元声明的基本规则…

Python Day38 学习

继续昨日的内容浙大疏锦行 学习一下两种机制&#xff1a;try-except机制和try-except-else-finally机制 try-except 摘自讲义 try&#xff1a;把你认为可能会出错的代码放在这里。 except&#xff1a;如果 try 块里的代码真的出错了&#xff08;从出错开始就不会继续执行t…

linux 1.0.7

用户和权限的含义与作用 linux中的用户和文件 用户的权限是非常重要的 而且有些程序需要使用管理员身份去执行 这些都是非常重要的 不可能让所有的人拥有所有的权限 这样的工具可以避免非法的手段来修改计算机中的数据 linux之所以安全还是权限管理做的很棒 每个登录的用户都有…

BFD 基本工作原理与实践:如何与 VRRP 联动实现高效链路故障检测?

BFD 基本工作原理与实践&#xff1a;如何与 VRRP 联动实现高效链路故障检测&#xff1f; &#x1f310; BFD 的基本原理BFD 主要特点BFD 工作机制 &#x1f500; 为什么 VRRP 需要 BFD&#xff1f;&#x1f527; BFD VRRP 配置实战&#xff08;华为设备&#xff09;&#x1f4…

python中将一个列表样式的字符串转换成真正列表的办法以及json.dumps()和 json.loads()

今天学习python的web.py&#xff0c;返回的内容为列表样式的字符串&#xff0c;如下 string_data "[(13.212.95.888, 8000, 10), (13.212.95.999, 8000, 10)]" 此时&#xff0c;如果想提取第一个元素&#xff0c;也就是(13.212.95.888, 8000, 10)&#xff0c;不能…