В итоге, из за всех этих факторов, а также нездорового любопытства, за пол часа наклепал ерунду, которой можно пользоваться для проверки сабжа.
Данные берутся из гисметео (только Тюмень), а правила отмены занятий взяты из статьи http://www.t-i.ru/article/8745/. Скрипт простой как мычание:
# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.utils import http
from datetime import datetime
import xml.etree.ElementTree as ET
def average(numbers):
return sum(numbers) / len(numbers)
class Forecast(object):
datetime = datetime(2009, 12, 7, 20)
pressure_max = pressure_min = temperature_max = temperature_min = wind_max = \
wind_direction = wind_min = relwet_max = relwet_min = heat_max = \
heat_min = 0
def avg(self):
return average([self.temperature_max, self.temperature_min]), \
average([self.wind_max, self.wind_min])
def npu_1_4(self):
'''
Занятия для учеников 1-4-х классов отменяются, если температура воздуха
опускается до -30 С и ниже при скорости ветра менее 2 метров в секунду.
При скорости ветра 2 метра в секунду и более занятия отменяют уже при
-25 градусах.
'''
avg_temp, avg_wind = self.avg()
return (avg_wind >= 2 and avg_temp <= -25) or (avg_wind < 2 and avg_temp <= -30)
def npu_1_9(self):
'''
Школьники 1-9-х классов могут остаться дома, если столбик термометра
показывает -35 градусов и ниже, при этом скорость ветра должна быть
менее 2 метров в секунду. А при большей его скорости занятия для
учеников отменяются и при температуре -30 и ниже.
'''
avg_temp, avg_wind = self.avg()
return (avg_wind >= 2 and avg_temp <= -30) or (avg_wind < 2 and avg_temp <= -35)
def npu(self):
'''
Занятия отменяются по всей школе (1-11-е классы) при температуре
наружного воздуха -40 градусов и ниже (при этом скорость ветра не должна
превышать 2 метров в секунду).
??? превышать ??? - наверное, должна быть не меньше.
'''
avg_temp, avg_wind = self.avg()
return (avg_wind >= 2 and avg_temp <= -40)
def index(request):
h = http.urllib.urlopen('http://informer.gismeteo.ru/xml/28367_1.xml')
xml = h.read()
tree = ET.XML(xml)
res = []
for f in tree.getiterator('FORECAST'):
obj = Forecast()
obj.date = datetime(
int(f.get('year')), int(f.get('month')), int(f.get('day')),
int(f.get('hour'))
)
for x in f.getchildren():
for y in x.items():
setattr(obj, str(x.tag.lower())+'_'+y[0], int(y[1]))
res.append(obj)
output = {
'res': res,
}
return render_to_response('index.html', output, context_instance=RequestContext(request))
Посмотреть результат можно тут: school.concepter.ru. Он не причесан и не информативен, но с функцией справляется – если занятий нет, он напишет.
UPD. Спасибо Земе за ликбез.
UPD2: Нужно смотреть не температуру (temperature_min и temperature_max), а температуру комфорта (heat_min и heat_max) – отменяют по ней.
6 комментариев:
А вчера разве было -25 и меньше?
Очевидно да, раз дети не учились.
Ты был не выспавшийся когда писал эту штуку?
Конструкции типа
if condition: return True
мне чем-то напоминают http://bash.org.ru/quote/66390
return condition :)
Ахаха, забавно. Да, ты прав. Щас поправлю.
08.12.2009, 23 часов.
Занятия состоятся для всех классов.
не хотят дети учиться так поздно, если честно.
:)))). Да-да, об этом я как-то не подумал...
Сейчас поправлю.
Отправить комментарий