用python正确计算假释日的方法

晚上好!我是一名律师,我经常要计算被判刑的人多久能拿到假释等福利。我是一名律师,我经常要计算被判刑的人多长时间才能获得福利,比如假释。

它的工作原理是这样的。

首先,我需要得到一些主要的变量, 比如那个人开始服刑的日子(他被逮捕的日子)。这将是第一个福利的基准日期。比方说某人是在2014年11月12日被捕的。

base_date = datetime.date(day=12, month=11, year=2014)

我必须做的第二件事是知道每项罪行的刑期是多少(有时这个人因多项罪行而被定罪,对于每一项罪行,都有不同的计算方法来计算利益。比方说,这个人因为两个罪被判刑。

  • 对于第一项罪行(这是一个更严重的罪行), 他被判处7年零4个月的监禁。
  • 对于第二项罪行,他被判处4年10个月20天的监禁。

为了做到这一点,我使用了这种方法,这就是我认为我的代码失败的地方。我相信这些变量应该在一个datetime方法中,或者类似的方法中。

pena1_years, pena1_months, pena1_days = 7, 4, 0

pena2_years, pena2_months, pena2_days = 4, 10, 20

现在,由于第一个罪行比较严重,他需要服完该刑期的25天,再加上第二个刑期的16天,才能够达到他的第一个利益。两者的结果都要加到base_date中,才能知道他什么时候能够达到第一个利益。我把一切都转化为天。

pena1_total = int(((pena1_years * 365) + (pena1_months * 30) + (pena1_days)) / 5 * 2)
datedifference1 = datetime.datetime.now() - datetime.timedelta(days=pena1_total)
pena1_total = relativedelta(datetime.datetime.now(), datedifference1)
print("Pena 1: " + str(pena1_total.years) + "a, " + str(pena1_total.months) + "m, " + str(pena1_total.days) + "d.")

(打印返回:Pena 1: 2a, 11m, 4d.)

pena2_total = int(((pena2_years * 365) + (pena2_months * 30) + (pena2_days)) / 6)
datedifference2 = datetime.datetime.now() - datetime.timedelta(days=pena2_total)
pena2_total = relativedelta(datetime.datetime.now(), datedifference2)
print("Pena 2: " + str(pena2_total.years) + "a, " + str(pena2_total.months) + "m, " + str(pena2_total.days) + "d.")

(Print返回这个:Pena 2: 0a, 9m, 21d.)

在计算出每个罪行的分数后,我需要将两者相加,然后再加到基准日期上。在这种情况下,这个家伙需要为第一个罪行服刑2年11个月零5天,为第二个罪行服刑9个月零23天,总共3年8个月零29天,才能享受到第一个福利。但是,我需要按照这个规则(法律规定必须这样计算)。

  • 必须使用普通历法(格里高利历)。
  • 首先,把年份加起来(2014年+3年=2017年)。
  • 然后,把月份加起来(2018年7月)。
  • 然后,把天数加起来,但他开始服役的第一天必须计算在内(2018年8月9日)。加天数的时候一定要用日历,因为一个月的天数(也要看年份)可能会有所不同。

我是这样做的,但我没有得到2018年8月9日。

total = pena1_total + pena2_total
print("Total: " + str(total.years) + "a, " + str(total.months) + "m, " + str(total.days) + "d.")

(Print returned this: Total: 3a, 8m, 25d. )

data_semiaberto = data_base + relativedelta(days=+total.days, months=+total.months, years=+total.years)
print("Data para o semiaberto: " + str(data_semiaberto))

(Print returned this: Data para o semiaberto: 2018-08-06)

那么,第一次受益的日期将是他假释的基准日期。他需要再服第一项罪行剩余刑期的25年,第二项罪行剩余刑期的16年。为此,我需要从每项罪行的总刑期中减去他目前所服的刑期。然而,我卡在这里。

这是完整的代码。

import datetime
from dateutil.relativedelta import relativedelta

data_base = datetime.date(day=12, month=11, year=2014)
pena1_years, pena1_months, pena1_days = 7, 4, 0
pena2_years, pena2_months, pena2_days = 4, 10, 20

def calculadora():
    # Fraction of the first sentence
    pena1_total = int(((pena1_years * 365) + (pena1_months * 30) + (pena1_days)) / 5 * 2)
    datedifference1 = datetime.datetime.now() - datetime.timedelta(days=pena1_total)
    pena1_total = relativedelta(datetime.datetime.now(), datedifference1)
    print("Pena 1: " + str(pena1_total.years) + "a, " + str(pena1_total.months) + "m, " + str(pena1_total.days) + "d.")

    # Fraction of the second sentence
    pena2_total = int(((pena2_years * 365) + (pena2_months * 30) + (pena2_days)) / 6)
    datedifference2 = datetime.datetime.now() - datetime.timedelta(days=pena2_total)
    pena2_total = relativedelta(datetime.datetime.now(), datedifference2)
    print("Pena 2: " + str(pena2_total.years) + "a, " + str(pena2_total.months) + "m, " + str(pena2_total.days) + "d.")

    # Fraction total
    total = pena1_total + pena2_total
    print("Total: " + str(total.years) + "a, " + str(total.months) + "m, " + str(total.days) + "d.")


    # Date of the first benefit.
    data_semiaberto = data_base + relativedelta(days=+total.days, months=+total.months, years=+total.years)
    print("Data para o semiaberto: " + str(data_semiaberto))
calculadora()

谁能帮帮我?这将节省我很多工作时间。

解决方案:

查看下面的代码,它先计算天数,然后减去每个福利的天数,并打印下一个福利利用日期的日期。

为了考虑闰年和每个月的天数,最好计算总天数,并在此基础上建立逻辑。

输出会打印每个福利的详细信息,最后显示总天数合计。

import datetime
from dateutil.relativedelta import relativedelta

data_base = datetime.date(day=12, month=11, year=2014)
pena1_years, pena1_months, pena1_days = 7, 4, 0
pena2_years, pena2_months, pena2_days = 4, 10, 20
total_days_spent = 0

def calculadora():
    # Calculate the end date and total number of days for the first crime
    pena1_end_date = data_base + relativedelta(years=+pena1_years, months=+pena1_months, days=+pena1_days)
    pena1_reamining_days = (pena1_end_date - data_base).days

    # Calculate the end date and total number of days for the second crime
    pena2_end_date = data_base + relativedelta(years=+pena2_years, months=+pena2_months, days=+pena2_days)
    pena2_reamining_days = (pena2_end_date - data_base).days

    benefit_count=1
    while pena1_reamining_days > 0 or pena2_reamining_days > 0:
        #count the minumum number of days for both the crimes
        pena1_minimum_days = round(pena1_reamining_days / 5 * 2)
        if pena1_minimum_days == 0 and pena1_reamining_days > 0:
            pena1_minimum_days = pena1_reamining_days
        pena1_reamining_days -= pena1_minimum_days
        print(f"Minimum no of days to spent in the first crime for the {benefit_count} benefit is {pena1_minimum_days} ")

        pena2_minimum_days = round(pena2_reamining_days / 6)
        if pena2_minimum_days == 0 and pena2_reamining_days > 0:
            pena2_minimum_days = pena2_reamining_days
        pena2_reamining_days -= pena2_minimum_days
        print(f"Minimum no of days to spent in the second crime for the {benefit_count} benefit is {pena2_minimum_days} ")

        total = pena1_minimum_days + pena2_minimum_days
        global total_days_spent
        total_days_spent += total
        print(f"Total no of days to spent for the {benefit_count} benefit {total} ")

        date_next_benefit = data_base + relativedelta(days=+total)
        print(f"{benefit_count} benefit day to avail after {date_next_benefit}")

        benefit_count+=1

calculadora()
print(f"Total number of days spent for both the crime is {total_days_spent}")

给TA打赏
共{{data.count}}人
人已打赏
未分类

我在ASP.NET上使用C#在基于Web的项目上工作,我遇到了兼容错误。

2022-9-8 14:18:17

未分类

正则表达式取词

2022-9-8 14:18:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索