房贷提前还款测算程序,输入贷款总额,利率,还款年限,计算提前还款后的利息节省金额和月供变化。

代码生成场景响应

以下是基于金融科技模式与创新课程的房贷提前还款测算程序,通过模块化设计实现"参数输入-还款计算-提前还款分析-结果输出"全流程,支持等额本息还款方式下提前还款的利息节省与月供变化测算。代码遵循准确性、实用性、可读性、可扩展性准则,适配Python 3.8+,无额外依赖。

import math

from typing import Tuple, Dict

------------------------------

配置模块:存储金融计算常量与规则

------------------------------

class FinancialConfig:

"""集中管理还款方式、计算精度等配置"""

REPAYMENT_METHOD = "等额本息" # 默认还款方式(可扩展等额本金)

MONTHS_PER_YEAR = 12 # 每年月份数

PRECISION = 2 # 金额计算结果保留小数位数

------------------------------

输入处理模块:获取并验证用户输入

------------------------------

def get_user_input() -> Tuple[float, float, int, int]:

"""

获取贷款总额、年利率、总年限、提前还款时间(年)

返回:(贷款总额, 年利率, 总年限, 提前还款时间)

"""

try:

loan_amount = float(input("请输入贷款总额(元):"))

annual_rate = float(input("请输入年利率(%,如5.2表示5.2%):")) / 100 # 转换为小数

total_years = int(input("请输入总还款年限(年):"))

prepay_year = int(input("请输入提前还款时间(年,如5表示第5年末):"))

输入验证

if loan_amount <= 0 or annual_rate <= 0 or total_years <= 0 or prepay_year <= 0:

raise ValueError("输入值必须为正数")

if prepay_year >= total_years:

raise ValueError("提前还款时间必须小于总还款年限")

return loan_amount, annual_rate, total_years, prepay_year

except ValueError as e:

print(f"输入错误:{e},请重新运行程序并输入有效数字")

exit(1)

------------------------------

核心计算模块:等额本息还款相关计算

------------------------------

def calculate_monthly_payment(principal: float, annual_rate: float, total_years: int) -> float:

"""

计算等额本息月供

公式:M = P * [r(1+r)^n] / [(1+r)^n - 1]

P=本金, r=月利率, n=总月数

"""

monthly_rate = annual_rate / FinancialConfig.MONTHS_PER_YEAR

total_months = total_years * FinancialConfig.MONTHS_PER_YEAR

numerator = monthly_rate * math.pow(1 + monthly_rate, total_months)

denominator = math.pow(1 + monthly_rate, total_months) - 1

return round(principal * numerator / denominator, FinancialConfig.PRECISION)

def calculate_remaining_principal(principal: float, annual_rate: float, total_years: int,

prepay_year: int, monthly_payment: float) -> float:

"""

计算提前还款时的剩余本金

公式:P_剩余 = P*(1+r)^t - M*[((1+r)^t -1)/r]

t=已还月数, M=月供

"""

monthly_rate = annual_rate / FinancialConfig.MONTHS_PER_YEAR

paid_months = prepay_year * FinancialConfig.MONTHS_PER_YEAR

compound_factor = math.pow(1 + monthly_rate, paid_months)

remaining = principal * compound_factor - monthly_payment * (compound_factor - 1) / monthly_rate

return round(remaining, FinancialConfig.PRECISION)

def calculate_interest_saved(monthly_payment: float, total_years: int, prepay_year: int,

remaining_principal: float) -> float:

"""

计算提前还款节省的利息(剩余期限内原本需支付的利息)

节省利息 = 剩余期限总还款额 - 剩余本金

"""

remaining_years = total_years - prepay_year

remaining_months = remaining_years * FinancialConfig.MONTHS_PER_YEAR

total_remaining_payment = monthly_payment * remaining_months

saved_interest = total_remaining_payment - remaining_principal

return round(saved_interest, FinancialConfig.PRECISION)

------------------------------

结果输出模块:整理并展示测算结果

------------------------------

def display_results(principal: float, annual_rate: float, total_years: int, prepay_year: int,

monthly_payment: float, remaining_principal: float, saved_interest: float) -> None:

"""格式化输出测算结果"""

print("\n" + "="*40)

print(f"【{FinancialConfig.REPAYMENT_METHOD}还款测算结果】")

print(f"贷款总额:{principal:,} 元 | 年利率:{annual_rate*100:.2f}% | 总年限:{total_years}年")

print(f"正常月供:{monthly_payment:,} 元 | 总还款月数:{total_years*12}个月")

print("\n【提前还款分析】(第{prepay_year}年末提前还清)")

print(f"剩余本金:{remaining_principal:,} 元")

print(f"节省利息:{saved_interest:,} 元(相当于减少利息支出{saved_interest/principal*100:.1f}%)")

print(f"月供变化:从{monthly_payment:,}元降至0元(每月减少{monthly_payment:,}元)")

print("="*40)

------------------------------

主程序:整合流程与异常处理

------------------------------

def main():

print("=== 房贷提前还款测算程序 ===")

print(f"基于{FinancialConfig.REPAYMENT_METHOD}还款方式 | 按Enter开始计算\n")

1. 获取输入

principal, annual_rate, total_years, prepay_year = get_user_input()

2. 计算正常月供

monthly_payment = calculate_monthly_payment(principal, annual_rate, total_years)

3. 计算提前还款时剩余本金

remaining_principal = calculate_remaining_principal(

principal, annual_rate, total_years, prepay_year, monthly_payment

)

4. 计算节省利息

saved_interest = calculate_interest_saved(

monthly_payment, total_years, prepay_year, remaining_principal

)

5. 输出结果

display_results(principal, annual_rate, total_years, prepay_year,

monthly_payment, remaining_principal, saved_interest)

if name == "main":

main()

README文件(Markdown格式)

房贷提前还款测算程序

项目简介

基于**金融科技模式与创新**课程中的"现金流折现"与"最优还款策略"理论,通过等额本息还款模型,量化提前还款对利息支出的影响,帮助用户直观对比"提前还款"与"正常还款"的成本差异,辅助理性决策。

安装步骤

  1. 安装Python 3.8及以上版本

  2. 下载`mortgage_prepayment_calculator.py`文件(无需额外依赖库)

使用说明

  1. 运行程序:`python mortgage_prepayment_calculator.py`

  2. 按提示依次输入:

  • 贷款总额(如1000000表示100万元)

  • 年利率(如5.2表示5.2%)

  • 总还款年限(如30表示30年)

  • 提前还款时间(如5表示第5年末提前还清)

  1. 查看输出的月供、剩余本金、节省利息及月供变化

模块说明

| 模块名称 | 功能描述 |

|----------------|--------------------------------------------------------------------------|

| 配置模块 | 管理还款方式、计算精度等全局参数(可扩展等额本金等其他方式) |

| 输入处理模块 | 获取并验证用户输入(贷款总额、利率、年限、提前还款时间) |

| 核心计算模块 | 实现月供计算、剩余本金计算、利息节省计算(基于金融数学公式) |

| 结果输出模块 | 格式化展示测算结果,突出关键指标(节省利息占比、月供变化) |

扩展指南

  1. **新增还款方式**:在`FinancialConfig`中添加"等额本金",并实现对应月供/本金计算函数

  2. **支持部分还款**:修改`calculate_remaining_principal`,允许输入提前还款金额(非全额)

  3. **图形化展示**:集成`matplotlib`绘制还款曲线(月供构成、利息占比变化)

  4. **多方案对比**:扩展为多提前还款时间点(如第3/5/10年末)的批量测算

核心知识点卡片

  1. 等额本息还款模型
  • 核心:每月还款额固定,包含部分本金和利息,前期利息占比高、本金占比低。

  • 公式: M = P \times \frac{r(1+r)^n}{(1+r)^n - 1} (M=月供,P=本金,r=月利率,n=总月数)。

  • 程序体现:

"calculate_monthly_payment"函数实现该公式。

  1. 剩余本金计算原理
  • 核心:基于复利公式,已还本金=月供累计偿还本金部分,剩余本金=初始本金-已还本金。

  • 公式: P_{剩余} = P(1+r)^t - M \times \frac{(1+r)^t - 1}{r} (t=已还月数)。

  • 程序体现:

"calculate_remaining_principal"函数实现动态本金追踪。

  1. 利息节省量化方法
  • 核心:提前还款节省的利息=剩余期限内原本需支付的利息(总还款额-剩余本金)。

  • 逻辑:若不提前还款,剩余本金需在剩余期限产生利息;提前还清则终止计息。

  • 程序体现:

"calculate_interest_saved"函数对比两种场景利息差。

  1. 金融科技应用价值
  • 核心:通过数字化工具将抽象金融理论(如货币时间价值)转化为可操作决策依据,提升用户财务规划效率。

  • 程序价值:直观展示"提前还款"对长期利息支出的影响,辅助用户权衡资金机会成本(如投资收益率vs房贷利率)。

  1. 模块化设计优势
  • 核心:分离"输入-计算-输出"逻辑,便于单独优化计算模块(如替换为更精确算法)或扩展功能(如增加还款方式)。

  • 程序体现:各函数职责单一(如

"get_user_input"仅处理输入,

"display_results"仅格式化输出)。

使用说明

  1. 运行程序后,按提示输入贷款总额(如1000000)、年利率(如5.2)、总年限(如30)、提前还款时间(如5);

  2. 程序自动计算正常月供(约5368元)、第5年末剩余本金(约88.7万元)、节省利息(约71.5万元);

  3. 输出结果显示"月供从5368元降至0元,每月减少5368元",并标注节省利息占贷款总额的比例(约71.5%)。

该程序通过金融数学公式的工程化实现,将复杂的房贷计算简化为可交互工具,可帮助用户在金融科技场景下快速评估还款策略的经济性。

关注我,有更多编程干货等着你!

相关推荐
hugh_oo2 小时前
100 天学会爬虫 · Day 11:如何合理控制爬虫请求频率?让访问行为更像真人
开发语言·爬虫·python
嘻哈baby2 小时前
Python开发Telegram Bot实现服务器监控告警
python
UtopianCoding2 小时前
什么是NoteDiscovery?Obsidian 的开源平替?
python·docker·开源
我一定会有钱2 小时前
pytest基础
python·测试工具·测试用例·pytest
Hi~晴天大圣2 小时前
if 变量和if not 变量用法之布尔真假值规则
python·if
老歌老听老掉牙2 小时前
Vericut 5轴机床MCH文件解析与构建指南
xml·python·vericut
BoBoZz193 小时前
Glyph2D 同一个图形根据点云的输入产生不同位置的输出
python·vtk·图形渲染·图形处理
一笑code3 小时前
pycharm vs vscode安装python的插件
vscode·python·pycharm
liwulin05063 小时前
【PYTHON-YOLOV8N】yoloface+pytorch+cnn进行面部表情识别
python·yolo·cnn