首页 > 解决方案 > 每个月租金的Python单独行

问题描述

我被困在一段 Python 代码上。

从 XML 文件中,我们在以下代码中成功解析数据,不包括 while 循环和相关变量。我们需要将一个表加载到 SQL 中,其中包含整个租期计划,按月,在租约期内。租金总是在每月的第一天计费,但金额会在不同的时间以不同的金额升级,具体取决于租约。目标是每个计费月返回一行,其中包含要计费的每个月租金的日期 (YYYY-MM-DD)。如果租期为 60 个月,并且在第 25 个月出现租金上涨,我们需要显示 60 行,其中前两年的金额重复 24 次,其余时间重复 36 次。该方案需要灵活适应某些情况和其他一些可变条件的年度增长。

有人可以指出我在 While 循环中出错的地方以获得所需的结果吗?

import xml.etree.ElementTree as ET
import pyodbc
import dateutil.relativedelta as rd
import dateutil.parser as pr


tree = ET.parse('DealData.xml')
root = tree.getroot()

    for deal in root.findall("Deals"):
        for dl in deal.findall("Deal"):
            dealid = dl.get("DealID")
            for dts in dl.findall("DealTerms/DealTerm"):
                dtid = dts.get("ID")
                dstart = pr.parse(dts.find("CommencementDate").text)
                dterm = dts.find("LeaseTerm").text
                darea = dts.find("RentableArea").text
            for brrent in dts.findall("BaseRents/BaseRent"):
                brid = brrent.get("ID")
                begmo = int(brrent.find("BeginIn").text)
                if brrent.find("Duration").text is not None:
                    duration = int(brrent.find("Duration").text)
                else:
                    duration = 0
                brentamt = brrent.find("Rent").text
                brper = brrent.find("Period").text
                perst = dstart + rd.relativedelta(months=begmo-1)
                perend = perst + rd.relativedelta(months=duration-1)
                billmocount = begmo
                while billmocount < duration:
                    monthnum = billmocount
                    billmocount += 1
                billmo = perst
                while billmo < perend:
                    billper = billmo
                    billmo += rd.relativedelta(months=1)

                if dealid == "706880":
                    print(dealid, dtid, brid, begmo, dstart, dterm, darea, brentamt, brper, duration, perst, perend, \
                    monthnum, billper)

我得到的结果如下所示:

706880 4278580 45937180 1 2018-01-01 00:00:00 60 6200 15.0 rsf/year 36 2018-01-01 00:00:00 2020-12-01 00:00:00 35 2020-11-01 00:00:00
706880 4278580 45937181 37 2018-01-01 00:00:00 60 6200 18.0 rsf/year 24 2021-01-01 00:00:00 2022-12-01 00:00:00 35 2022-11-01 00:00:00

标签: python-3.xwhile-loop

解决方案


我遇到的问题只是 print 语句的缩进。通过缩进以下文本,我能够得到预期的结果:

if dealid == "706880": print(dealid, dtid, brid, begmo, dstart, dterm,dalea, brentamt, brper, duration, perst, perend, \ monthnum, billper)


推荐阅读