# 定义公积金贷款的最大额度,单位为万元
max_provident_fund = 90
# 定义还款方式,1表示等额本息,2表示等额本金
principal_and_interest_or_principal = 2
# 定义计算每月还款额的函数
def calculate_monthly_payment(principal, annual_interest_rate, loan_term, method):
# 计算月利率
monthly_interest_rate = annual_interest_rate / 12
# 计算贷款总月数
total_months = loan_term * 12
# 如果还款方式是等额本息
if method == 1: # 等额本息
# 计算每月还款额
monthly_payment = (principal * monthly_interest_rate * (1 + monthly_interest_rate) ** total_months) / (
(1 + monthly_interest_rate) ** total_months - 1)
return monthly_payment
# 如果还款方式是等额本金
elif method == 2: # 等额本金
# 初始化每月还款额列表
monthly_payments = []
# 逐月计算每月还款额
for i in range(1, total_months + 1):
monthly_payment = (principal / total_months) + (
principal - (principal / total_months) * (i - 1)) * monthly_interest_rate
monthly_payments.append(monthly_payment)
return monthly_payments
else:
# 如果还款方式不合法,抛出异常
raise ValueError("还款方式必须是1(等额本息)或2(等额本金)")
# 定义获取每月还款额的函数
def get_monthly_payment(totalHousePrice, down_payment, loan_term, provident_fund_interest_rate, commercial_loan_interest_rate, principal_and_interest_or_principal):
"""
:param totalHousePrice: 总价, 单位为万
:param down_payment: 首付,单位为万
:param loan_term: 贷款期限,单位为年
:param provident_fund_interest_rate: 公积金利率
:param commercial_loan_interest_rate: 商业贷款利率
:param principal_and_interest_or_principal: 还款方式,1表示等额本息,2表示等额本金
:return:
"""
# 如果首付大于等于总房价,返回错误信息
if down_payment >= totalHousePrice:
return "首付不能大于总价"
# 计算贷款总额
loan_amount = totalHousePrice - down_payment
# 计算公积金贷款金额,不能超过最大额度
provident_fund_loan = min(loan_amount, max_provident_fund)
# 计算商业贷款金额
commercial_loan = loan_amount - provident_fund_loan
# 如果还款方式是等额本息
if principal_and_interest_or_principal == 1: # 等额本息
# 计算公积金贷款的每月还款额
provident_fund_monthly_payment = calculate_monthly_payment(provident_fund_loan, provident_fund_interest_rate,
loan_term, 1)
# 计算商业贷款的每月还款额
commercial_loan_monthly_payment = calculate_monthly_payment(commercial_loan, commercial_loan_interest_rate,
loan_term, 1)
# 计算总的每月还额
total_monthly_payment = provident_fund_monthly_payment + commercial_loan_monthly_payment
return total_monthly_payment, total_monthly_payment*loan_term*12
# 如果还款方式是等额本金
elif principal_and_interest_or_principal == 2: # 等额本金
# 计算公积金贷款的每月还款额列表
provident_fund_monthly_payments = calculate_monthly_payment(provident_fund_loan, provident_fund_interest_rate,
loan_term, 2)
# 计算商业贷款的每月还款额列表
commercial_loan_monthly_payments = calculate_monthly_payment(commercial_loan, commercial_loan_interest_rate,
loan_term, 2)
# 计算总的每月还款额列表
total_monthly_payments = [pf + cl for pf, cl in
zip(provident_fund_monthly_payments, commercial_loan_monthly_payments)]
return total_monthly_payments, sum(total_monthly_payments)
else:
# 如果还款方式不合法,返回错误信息
return "还款方式必须是1(等额本息)或2(等额本金)"
# 示例调用
# 获取每月还款额
monthly_payment_2024 = get_monthly_payment(100, 50, 20, 0.0285, 0.0355,principal_and_interest_or_principal)
monthly_payment_2021 = get_monthly_payment(150, 50, 30, 0.0290, 0.0365,principal_and_interest_or_principal)
print("还款额2024:", monthly_payment_2024[1])
print("还款额2021:", monthly_payment_2021[1])
print("差值:", monthly_payment_2021[1]-monthly_payment_2024[1])
房贷计算器,一键计算晚买房一年少亏多少钱
最新推荐文章于 2024-10-08 10:17:41 发布