Форум сайта python.su
0
Необходимо посчиать количество суббот и воскресений в диапазоне дат.
from datetime import date def check_week_day(day_date): if day_date.weekday() == 5 or day_date.weekday() == 6: return 1 else: return 0 def check(start_date, end_date): tmp_date = start_date res = 0 days_counter = 1 month_counter = 1 year_counter = 1 while tmp_date != end_date: try: tmp_date = date(tmp_date.year, tmp_date.month, tmp_date.day + days_counter) res += check_week_day(tmp_date) except ValueError: try: tmp_date = date(tmp_date.year, tmp_date.month + month_counter, days_counter - tmp_date.day) res += check_week_day(tmp_date) except ValueError: tmp_date = date(some_date.year, some_date.month, some_date.day) res += check_week_day(tmp_date) days_counter += 1 return res
Отредактировано kozlo22 (Апрель 21, 2014 17:37:47)
Офлайн
4
Выведи принтами отладочную информацию и посмотри, где код ломается.
Офлайн
49
Что-то всё через чур сложно
#!/usr/bin/env python import datetime def count_weekend(start, end): """ >>> start = datetime.date(2014, 4, 21) >>> end = datetime.date(2013, 1, 21) >>> count_weekend(start, end) 130 """ delta = abs((start - end).days /7) * 2 if abs((start - end).days % 7) > 1: delta += 2 elif abs((start - end).days % 7): delta += 1 return delta if __name__ == '__main__': import doctest doctest.testmod()
Отредактировано Alen (Апрель 21, 2014 18:50:48)
Офлайн
0
Alen
знаю, но мне ничего более толкового в голову не приходило.
Кстати, если передать date(2013, 9, 18), date(2013, 9, 23), то вернет 3.428571428571429
Офлайн
1
from datetime import date,timedelta "" def weekCount(from_date, to_date): return len([1 for i in range((to_date - from_date).days + 1) if (from_date + timedelta(i)).isoweekday() in [6,7]])
Офлайн
0
makx
да, вроде работает.
Отредактировано kozlo22 (Апрель 21, 2014 22:06:49)
Офлайн
0
Просто не понял для чего нужна функция timedelta - трудности перевода.
Офлайн