给定一个日期范围,如何计算部分或全部在该范围内的周末数?
(根据要求的一些定义:将“周末”表示为周六和周日。日期范围包括在内,即结束日期是“全部或部分”范围的一部分,表示周末的任何部分落在日期范围内意味着整个周末都计算在内。)
为简化起见,我想您实际上只需要知道初始日期的持续时间和一周中的哪一天...
我现在很好,它将涉及到对整数除以 7 和一些逻辑来根据余数加 1,但我不太清楚是什么......
Python中答案的加分;-)
编辑
这是我的最终代码。
周末是周五和周六(因为我们计算了住宿的夜数),从周一开始,日子是 0 索引的。我使用了 onebyone 的算法和 Tom 的代码布局。非常感谢各位。
def calc_weekends(start_day, duration):
days_until_weekend = [5, 4, 3, 2, 1, 1, 6]
adjusted_duration = duration - days_until_weekend[start_day]
if adjusted_duration < 0:
weekends = 0
else:
weekends = (adjusted_duration/7)+1
if start_day == 5 and duration % 7 == 0: #Saturday to Saturday is an exception
weekends += 1
return weekends
if __name__ == "__main__":
days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
for start_day in range(0,7):
for duration in range(1,16):
print "%s to %s (%s days): %s weekends" % (days[start_day], days[(start_day+duration) % 7], duration, calc_weekends(start_day, duration))
print