Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 21, 2014 17:37:28

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Посчитать количество определенных дней в диапазоне дат

Необходимо посчиать количество суббот и воскресений в диапазоне дат.

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

Вот такой стремный код. Он не работает при определенных условиях. Если разница в датах больше года, то вываливается ошибка на 25 строке “Day of the month range”.
Почему он ругается понятно, как мне модифицировать код, чтобы работало?
Пробовал по другому решать, но вот уперся я в такой метод и других решений не вижу.

Отредактировано kozlo22 (Апрель 21, 2014 17:37:47)

Офлайн

#2 Апрель 21, 2014 18:35:39

fongostev
От: Moskau
Зарегистрирован: 2012-04-03
Сообщения: 62
Репутация: +  4  -
Профиль   Отправить e-mail  

Посчитать количество определенных дней в диапазоне дат

Выведи принтами отладочную информацию и посмотри, где код ломается.

Офлайн

#3 Апрель 21, 2014 18:48:36

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Посчитать количество определенных дней в диапазоне дат

Что-то всё через чур сложно

#!/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)

Офлайн

#4 Апрель 21, 2014 19:51:42

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Посчитать количество определенных дней в диапазоне дат

Alen
знаю, но мне ничего более толкового в голову не приходило.
Кстати, если передать date(2013, 9, 18), date(2013, 9, 23), то вернет 3.428571428571429

Офлайн

#5 Апрель 21, 2014 21:53:09

makx
Зарегистрирован: 2014-04-20
Сообщения: 1
Репутация: +  1  -
Профиль   Отправить e-mail  

Посчитать количество определенных дней в диапазоне дат

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]]) 

Офлайн

#6 Апрель 21, 2014 22:03:15

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Посчитать количество определенных дней в диапазоне дат

makx
да, вроде работает.

Отредактировано kozlo22 (Апрель 21, 2014 22:06:49)

Офлайн

#7 Апрель 21, 2014 22:16:12

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Посчитать количество определенных дней в диапазоне дат

Просто не понял для чего нужна функция timedelta - трудности перевода.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version