如何用Python实现24小时制下符合休息要求的小时范围计算逻辑?
Python实现符合条件的休息时间计算
我们需要筛选出班次时间段内,满足距离开始时间至少3小时且距离结束时间至少3小时的所有整点小时数。班次分为两种情况:正常当日班次(开始早于结束)和跨天班次(开始晚于结束),以下是对应的实现代码:
def get_break_hours(start, end): break_hours = [] if start < end: # 非跨天班次:休息时间需落在 [start+3, end-3] 区间内 window_start = start + 3 window_end = end - 3 if window_start <= window_end: break_hours = list(range(window_start, window_end + 1)) else: # 跨天班次:分两段处理,当日的 [start+3, 23] 和次日的 [0, end-3] # 处理当日部分 evening_start = start + 3 if evening_start <= 23: break_hours.extend(range(evening_start, 24)) # 处理次日部分 morning_end = end - 3 if morning_end >= 0: break_hours.extend(range(0, morning_end + 1)) return break_hours # 验证示例 print(get_break_hours(17, 3)) # 输出: [20, 21, 22, 23, 0] print(get_break_hours(7, 19)) # 输出: [10, 11, 12, 13, 14, 15, 16]
代码说明
- 非跨天场景:直接计算
start+3到end-3的整数区间,只有当起始点不大于终点时,才会生成有效休息时间列表。 - 跨天场景:拆分为两个时间段处理,先收集当日从
start+3到23点的小时数,再收集次日从0点到end-3的小时数,最后合并结果。 - 额外处理了无效区间的情况(比如当班次时长不足6小时时,会返回空列表,因为无法满足前后各3小时的要求)。
内容的提问来源于stack exchange,提问作者Steve White
相关产品推荐
相关产品推荐

