0
点赞
收藏
分享

微信扫一扫

Python 计算房租违约金(输出起终日期间的每个月第一天)

七千22 2022-01-11 阅读 49

需求:

违约金应当按照合同约定分段计算至本判决确定之日止,即逾期90日内按日万分之一计算、逾期90日至210日按日万分之二计算、逾期210天按日万分之四计算。

违约金具体计算方法为:

2016年12月份的租金X元,违约金从2017年1月1日开始按日万分之一计算90天,91天至210天按日万分之二计算,211天以后按日万分之四计算;

2017年1月份的租金X元,违约金从2017年2月1日开始按日万分之一计算90天,91天至210天按日万分之二计算,211天以后按日万分之四计算

以此类推

方案:

首先利用datetime, calendar模块,生成每个月违约起始日期

然后计算违约起始日期与终止日期之间的违约天数

最后计算每个月租金的违约金额

代码:

# -*- coding: utf-8 -*-
"""
Created on Mon Jan 10 14:49:51 2022

@author: lenovo
"""
import pandas as pd
import calendar as cal
import datetime 

def monthmoney(time,initialmoney):
     money  = 0
     while time  > 0:
         if time > 210 :
            days = time - 210
            money += days * initialmoney *0.0004
            time -= days
         if time > 90:
            days = time - 90
            money += days * initialmoney *0.0002
            time -= days
         else:
            days = time
            money += days * initialmoney *0.0001 
            time -= days
     return money

def getmonth(start,end):
    FORMATmonth = "%d-%d"
    monthlist=[]
    caldaylist =[]
    cur = start
    while cur < end:
        startcalday = cur + datetime.timedelta(days=1)
        month = FORMATmonth % (cur.year, cur.month)
        monthlist.append(month)
        caldaylist.append(startcalday)
        d = int(cal.monthrange(startcalday.year, startcalday.month)[1])
        cur += datetime.timedelta(days=d)
    return monthlist,caldaylist

if __name__ == '__main__':
    #本金
    initialmoney = 4452.05
    #违约起始日期:输入违约起始月份的最后一天作为违约起始日期
    startdate =datetime.datetime.strptime('2016-12-31', '%Y-%m-%d')
    #违约终止日期:输入违约终止月份的最后一天作为违约终止日期
    enddate =datetime.datetime.strptime('2021-12-31', '%Y-%m-%d')
    monthlist,caldaylist = getmonth(startdate,enddate)
    #print(monthlist)
    #print(caldaylist)
    lista = []
    for i in range(len(monthlist)):
        start =  caldaylist[i]
        days = (enddate-start).days+1
        im = monthmoney(days,initialmoney)
        resi =[]
        resi.append(monthlist[i])
        resi.append(caldaylist[i])
        resi.append(days)
        resi.append(im)
        lista.append(resi)

    name=['月份','违约起始日期','违约天数','违约金额']
    test=pd.DataFrame(columns=name,data=lista)
    print(test)
    test.to_csv('违约金额.csv',encoding='utf-8')


输出文件如下: 

举报

相关推荐

0 条评论