Untitled
busy = [{ 'start': '10:30', 'stop': '10:50'}, {'start': '18:40', 'stop': '18:50'}, {'start': '14:40', 'stop' : '15:50'}, {'start': '16:40', 'stop': '17:20'}, {'start': '20:05', 'stop': '20:20'} ] #Время начала и конца рабочего дня в часах start = 9 finish = 21 #Переводим в минуты, общему знаменателю для дальнейших вычислений start *= 60 finish *= 60 for time_pice in busy: for key in time_pice: #Переводим время в целое число минут time_pice[key] = list(map(int, time_pice[key].split(":"))) time_pice[key] = time_pice[key][0]*60 + time_pice[key][1] #Сортируем список дел по времени начала дела busy = [value for value in sorted(busy, key=lambda item: item['start'])] #Допустим завершение рабочего дня - последнее дело в рабочем дне busy.append({ 'start': finish, 'stop': finish}) #Для того чтобы следующий цикл разбил на промежутки период от последнего дела, до конца рабочего дня def minuts_to_hmm(minuts): return f"{minuts//60}:{0 if minuts%60 < 10 else ''}{minuts%60}" free = [] for time_pice in busy: for i in range((time_pice['start'] - start)//30): free.append({'start': minuts_to_hmm(start + i * 30), 'stop': minuts_to_hmm(start + (i + 1) * 30)}) start = time_pice['stop'] for time_window in free: print(time_window) print(len(free))
Leave a Comment