python.hw 2014-2015

КН-102

strings
Дописать реализацию string1.py и string2.py (ссылка)
Требования:
- правильность (прохождение тестов) [1]
- соответствие стиля PEP8 [1]

stat
1. Скачать страницу http://cs.usu.edu.ru/home
2. Реализовать недостающий функционал в скрипте:
• Статистика по именам за каждый год [2]
• (необязательно) Отдельная статистика для мальчиков, отдельная для девочек [2]
• PEP8 [1]

Тесты лежат здесь.

stat2
1. Скачать страницу http://cs.usu.edu.ru/home
2. Реализовать недостающий функционал в скрипте:
• Статистика по именам за каждый год [1]
• (необязательно) Отдельная статистика для мальчиков, отдельная для девочек [1]
• PEP8 [1]
• использовать re

Тесты лежат здесь.

phil
Проверить тезис: «из любой статьи на русской Википедии можно за несколько шагов перейти в статью „Философия“».

Для этого нужно дописать имеющийся скрипт, чтобы он первым аргументом принимал название статьи и выдавал список переходов.

Пример работы с urlopen

Написанная программа должна проходить тесты.

Требования:
• Использовать urlopen, re
• Если можно перейти, выдать список переходов (иначе ничего не печатать)
• Переходить в пределах ru.wikipedia.org, переходы выполнять только в статьи
• Прохождение тестов [2]
• Не ходить по страницам дважды, не зацикливаться [2]
• PEP8 [2]

log
Скачать лог-файлы веб-сервера и построить любые 2 статистики [2] (подгружать целый файл в память нельзя — не хватит памяти):

• Число заходов на веб-сервер за каждый день
• Число заходов на /home/<имя>/* (результат — «<имя>: число»)
• Сумма принятых байт веб-севером за каждый день
• Сумма отправленных байт веб-севером за каждый день
• Сумма времени обработки запросов за каждый день
• Среднее время обработки запроса за каждый день

Задача по желанию — построить дополнительно любые 2 статистики [2]:
• Гистограмма количества запросов по времени суток (результат — 24 строки)
• Гистограмма принятых+отправленных байт по времени суток (результат — 24 строки)
• Среднее время обработки запросов на /home/<имя>/* (результат — «<имя>: <число>»)
• Число уникальных заходов на /home/<имя>/* (результат — «<имя>: число»)
• Придумать свою интересную (желательно ещё и полезную на практике) статистику, не указанную в списке, и её посчитать :)

Если при запуске указан ключ -r, упорядочить вывод по убыванию статистики; иначе упорядочить вывод по возрастанию поля [1].

Файлы для обработки указываются в опциях командной строки, обработать необходимо ВСЕ файлы из архива и ПРИЛОЖИТЬ к коду результат обработки.
Пример запуска: $ get-stat.py -r *.log

Результат по каждой статистике должен быть выведен в отдельный файл. Каждая статистика должна вычисляться по всем файлам, таким образом в результате работы должно получиться 2 или 4 файла.

Формат файла веб-сервера доступен здесь.

Скрипт должен удовлетворять PEP8 [1].

matrix
Реализовать класс Matrix.

Примеры тестов:
- Matrix([[1, 0], [0, 1]]) == Matrix([[1, 0], [0, 1]])
- Matrix([[1, 0], [0, 1]]) + Matrix([[1, 0], [0, 1]]) == Matrix([[2, 0], [0, 2]])
- Matrix([[1, 0], [0, 1]]) * 2 == Matrix([[2, 0], [0, 2]])
- Matrix([[1, 0], [0, 1]]) != Matrix([[2, 0], [0, 2]])
- Matrix([[1, 0], [0, 1]]) * Matrix([[1, 0], [0, 1]]) == Matrix([[1, 0], [0, 1]])
- repr(Matrix([[1, 0], [0, 1]])) == "Matrix([[1, 0], [0, 1]])"
a = Matrix([[1, 0], [0, 1]])
b = Matrix([[1, 0], [0, 1]])
a += b
c = a + b
- a == Matrix([[2, 0], [0, 2]])
- c == Matrix([[3, 0], [0, 3]])
a[0][0] = 9
- a == Matrix([[9, 0], [0, 3]])
- a[1][1] == 3

До 31.03.2015.

generators
1. Написать генератор проходящийся по всем переданным в него итерируемым объектам.

- gen1([1, 2, 4], [2, 3], range(2)) -> 1, 2, 4, 2, 3, 0, 1

2. Написать генератор проходящийся по всем переданным в него итерируемым объектам и возвращающий только числа в неубывающем порядке.

- gen2([1, 2, 4], [2, 3], range(2)) -> 1, 2, 4
- gen2([1, 2, 1], [2, 4], range(5)) -> 1, 2, 2, 4, 4
- gen2([1, 4, 2, "lalala'", 5.4]) -> 1, 4, 5.4

* PEP8

ДО 09.04.2015

ФТ-101

strings
Дописать недостающий функционал к string1.py и string2.py.
Файлы можно взять здесь.
Требования:
• прохождение тестов [1+1]
• соответствие PEP8 [1+1]

stat
1. Скачать страницу http://cs.usu.edu.ru/home
2. Реализовать недостающий функционал в скрипте:
• Статистика по именам за каждый год [2]
• (необязательно) Отдельная статистика для мальчиков, отдельная для девочек [2]
• PEP8 [1]

Тесты лежат здесь.

phil
Проверить тезис: «из любой статьи на русской Википедии можно за несколько шагов перейти в статью „Философия“».

Для этого нужно дописать имеющийся скрипт, чтобы он первым аргументом принимал название статьи и выдавал список переходов.

Написанная программа должна проходить тесты.

Требования:
• Использовать urlopen, re
• Если можно перейти, выдать список переходов (иначе ничего не печатать) [1]
• Переходить в пределах ru.wikipedia.org, переходы выполнять только в статьи [1]
• Не ходить по страницам дважды, не зацикливаться [1]
• PEP8 [1]

log
Скачать лог-файлы веб-сервера и построить любые 2 статистики [2]:

• Число заходов на веб-сервер за каждый день
• Число заходов на /home/<имя>/* (результат — «<имя>: число»)
• Сумма принятых байт веб-севером за каждый день
• Сумма отправленных байт веб-севером за каждый день
• Сумма времени обработки запросов за каждый день
• Среднее время обработки запроса за каждый день

Задача по желанию — построить дополнительно любые 2 статистики [2]:
• Гистограмма количества запросов по времени суток (результат — 24 строки)
• Гистограмма принятых+отправленных байт по времени суток (результат — 24 строки)
• Среднее время обработки запросов на /home/<имя>/* (результат — «<имя>: <число>)
• Число уникальных заходов на /home/<имя>/* (результат — «<имя>: число»)
• Придумать свою интересную (желательно ещё и полезную на практике) статистику, не указанную в списке, и её посчитать :)

Если при запуске указан ключ -r, упорядочить вывод по убыванию статистики; иначе упорядочить вывод по возрастанию поля [1].

Файлы для обработки указываются в опциях командной строки, обработать необходимо ВСЕ файлы из архива и ПРИНЕСТИ результат обработки.
Пример запуска: $ get-stat.py -r *.log

Результат по каждой статистике должен быть выведен в отдельный файл. Каждая статистика должна вычисляться по всем файлам, таким образом в результате работы должно получиться 2 или 4 файла.

Формат файла веб-сервера доступен здесь.

Скрипт должен удовлетворять PEP8 [1].

classes
Модифицировать анализатор логов, сделанный в задании log с использованием классов. Имеется заготовка.

Методов с названием stat_NAME должно быть 2 или 4 (в зависимости от того, сколько статистик было сделано), подстрока NAME в названях должна быть заменена на понятное название статистики.

Задачи:
• Реализовать методы [1]
• Кеш результатов (если результат по какой-то статистике уже сосчитан и заведомо не изменился, не пересчитывать повторно) [1]
• Тесты [1]
• Ленивость (по желанию) (обработка только по запросу) [1]
• PEP8 [1]

merge
Реализовать следующий генератор:
• вход — компаратор «<» и произвольное количество итераторов, которые возвращают монотонные последовательности
• результат — монотонное объединение

Применить генератор для склейки лог-файлов из предыдущих д/з в хронологическом порядке (необходимо будет написать свой компаратор)

Задачи:
• Реализовать генератор [1]
• Компаратор для логов [1]
• Тесты [1]
• PEP8 [1]

КБ-101

1_strings

2_statistics
* посчитать статистику имён встречающихся на cs.usu.edu.ru

3_wikiwalker3
Пройтись по википедии до философии

4_logparser
* парсер логов apache с подсчётом статистики
* плюшки за ООП

5_projectstats
fill the blanks

КН-101

strings
Дописать реализацию string1.py и string2.py (ссылка)
Требования:
- правильность (прохождение тестов) [1+1]
- соответствие стиля PEP8 [1+1]

stat
1. Скачать страницу http://cs.usu.edu.ru/home
2. Реализовать недостающий функционал в скрипте:
• Статистика по именам за каждый год [2]
• (необязательно) Отдельная статистика для мальчиков, отдельная для девочек [2]
• PEP8 [1]

Тесты лежат здесь.

phil
Проверить тезис: «из любой статьи на русской Википедии можно за несколько шагов перейти в статью „Философия“».

Для этого нужно дописать имеющийся скрипт, чтобы он первым аргументом принимал название статьи и выдавал список переходов.

Написанная программа должна проходить тесты.

Требования:
• Использовать urlopen, re
• Если можно перейти, выдать список переходов (иначе ничего не печатать) [1]
• Переходить в пределах ru.wikipedia.org, переходы выполнять только в статьи [1]
• Не ходить по страницам дважды, не зацикливаться [1]
• PEP8 [1]

log
Скачать лог-файлы веб-сервера и построить любые 2 статистики [2] (подгружать целый файл в память нельзя — не хватит памяти):

• Число заходов на веб-сервер за каждый день
• Число заходов на /home/<имя>/* (результат — «<имя>: число»)
• Сумма принятых байт веб-севером за каждый день
• Сумма отправленных байт веб-севером за каждый день
• Сумма времени обработки запросов за каждый день
• Среднее время обработки запроса за каждый день

Задача по желанию — построить дополнительно любые 2 статистики [2]:
• Гистограмма количества запросов по времени суток (результат — 24 строки)
• Гистограмма принятых+отправленных байт по времени суток (результат — 24 строки)
• Среднее время обработки запросов на /home/<имя>/* (результат — «<имя>: <число>»)
• Число уникальных заходов на /home/<имя>/* (результат — «<имя>: число»)
• Придумать свою интересную (желательно ещё и полезную на практике) статистику, не указанную в списке, и её посчитать :)

Если при запуске указан ключ -r, упорядочить вывод по убыванию статистики; иначе упорядочить вывод по возрастанию поля [1].

Файлы для обработки указываются в опциях командной строки, обработать необходимо ВСЕ файлы из архива и ПРИЛОЖИТЬ к коду результат обработки.
Пример запуска: $ get-stat.py -r *.log

Результат по каждой статистике должен быть выведен в отдельный файл. Каждая статистика должна вычисляться по всем файлам, таким образом в результате работы должно получиться 2 или 4 файла.

Формат файла веб-сервера доступен здесь.

Скрипт должен удовлетворять PEP8 [1].

classes
Модифицировать анализатор логов, сделанный в задании log с использованием классов. Имеется заготовка.

Методов с названием stat_NAME должно быть 2 или 4 (в зависимости от того, сколько статистик было сделано), подстрока NAME в названях должна быть заменена на понятное название статистики.

Задачи:
• Реализовать методы [1]
• Кеш результатов (если результат по какой-то статистике уже сосчитан и заведомо не изменился, не пересчитывать повторно) [1]
• Тесты [1]
• Ленивость (по желанию) (обработка только по запросу) [1]
• PEP8 [1]

iterators
1. Написать 2 итератора, возвращающие числа в неубывающем порядке. Написать генератор, проходящий по двум итераторам, возвращающий все их элементы в неубывающем порядке.