Добрый вечер! Я юрист, и мне часто приходится подсчитывать, сколько времени до того, как осужденные смогут достигать таких льгот, как условно-досрочное освобождение.
Это работает так:
Во-первых, мне нужно получить немного основные переменные, такие как день, когда человек начал отбывать наказание (день, когда он был арестован). Это будет базовая дата для первой выгоды. Допустим, кто-то был арестован 12 ноября 2014 года.
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
Теперь, когда первое преступление является более серьезным, ему нужно будет отслужить 2/5 этого предложения плюс 1/6 второго предложения, чтобы иметь возможность получить свое первое преимущество. Результат обоих должен быть добавлен к 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.")
(Печать вернула это: Pena 2: 0a, 9m , 21d.)
После вычисления фракций для каждого преступления, мне нужно было бы сложить оба и затем добавить к базовой дате. В этой ситуации этому парню придется отбыть 2 года, 11 месяцев и 5 дней за первое преступление и 9 месяцев и 23 дня за второе, в общей сложности за 3 года, 8 месяцев и 29 дней, прежде чем он сможет получить свое первое преимущество Тем не менее, я должен следовать этим правилам (так закон должен быть рассчитан):
- Необходимо использовать обычный календарь (григорианский);
- Сначала сложите годы (2014 + 3 года = 2017);
- Затем сложите месяцы (июль 2018);
- Затем сложите дни, но первый день, когда он начал служить, должен учитываться (9 август 2018). Важно, чтобы календарь использовался при суммировании дней, поскольку число дней в месяце (а также в зависимости от года) может варьироваться.
Вот как я это сделал, но я Я не получаю 9 августа 2018 года:
total = pena1_total + pena2_total
print("Total: " + str(total.years) + "a, " + str(total.months) + "m, " + str(total.days) + "d.")
(Печать вернула это: Всего: 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))
(Печать вернула это: Data para o semiaberto : 2018-08-06)
Тогда датой первого пособия будет базовая дата его условно-досрочного освобождения. Ему нужно будет отбыть еще 2/5 оставшегося предложения за первое преступление и 1/6 за оставшееся предложение за второе преступление. Для этого мне нужно вычесть то, что он отбыл, из общего предложения за каждое преступление. Однако я застрял здесь.
Вот полный код:
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()
Может кто-нибудь помочь мне, пожалуйста? Это сэкономит мне много времени во время работы.