привязка траектории: создать все возможные связи между двумя конфигурациями с рождения и смертью

Я реализовал класс TimeRange, как вы можете видеть ниже.

Сначала get_overlapped_range отрицает все неперекрывающиеся параметры простым условием, а затем вычисляет перекрываемый диапазон, рассматривая все возможные варианты.

, чтобы получить количество дней, которое вам потребуется, чтобы принять значение TimeRange, которое было возвращено из get_overlapped_range, и делить продолжительность на 60 * 60 * 24 (:

класс TimeRange (объект):

def __init__(self, start, end):
    self.start = start
    self.end = end
    self.duration = self.end - self.start

def is_overlapped(self, time_range):
    if max(self.start, time_range.start) < min(self.end, time_range.end):
        return True
    else:
        return False

def get_overlapped_range(self, time_range):
    if not self.is_overlapped(time_range):
        return

    if time_range.start >= self.start:
        if self.end >= time_range.end:
            return TimeRange(time_range.start, time_range.end)
        else:
            return TimeRange(time_range.start, self.end)
    elif time_range.start < self.start:
        if time_range.end >= self.end:
            return TimeRange(self.start, self.end)
        else:
            return TimeRange(self.start, time_range.end)

def __repr__(self):
    return '{0} ------> {1}'.format(*[time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(d))
                                      for d in [self.start, self.end]])
0
задан kevinkayaks 13 July 2018 в 04:53
поделиться