11.5. Самостоятельная работа¶
Примечание
При выполнении заданий используйте заготовки решений: ->
Репозиторий.
Подробнее: см. Цикл выполнения и защиты заданий.
Примечание
В каждой задаче необходимо:
самостоятельно предусмотреть вывод на экран, четко демонстрирующий происходящие изменения, в т.ч. удобный для пользователя (user-friendly);
использовать объектно-ориентированный подход.
11.5.1. Информация о книге¶
Выберите книжный магазин согласно Таблице 11.5.1 (под номером ЦИФРА_СБ + 1
), найдите интересную Вам книгу и сохраните найденную веб-страницу на диск как data.html
.
№ п/п |
Наименование магазина |
|
---|---|---|
1 |
Ozon.ru |
|
2 |
Лабиринт |
|
3 |
ЛитРес |
|
4 |
Москва |
|
5 |
Библио-Глобус |
|
6 |
My-shop.ru |
|
7 |
Буквоед |
|
8 |
Books.ru |
|
9 |
Московский дом книги |
|
10 |
Библион |
Напишите приложение, позволяющее получить из файла data.html
информацию о книге в текстовый файл data.txt
(Таблица 11.5.2).
№ п/п |
Характеристика |
Тип |
Пример |
---|---|---|---|
1 |
Название |
|
|
2 |
Список авторов |
|
|
3 |
Цена |
|
|
4 |
ISBN |
|
|
5 |
Издательство |
|
|
6 |
Количество страниц |
|
|
7 |
Год выпуска |
|
|
Приложение должно поддерживать 2 режима работы:
Графический:
Пользователь указывает с клавиатуры:
путь к сохраненной веб-странице;
путь к выходному файлу.
Пакетный:
Скрипт запускается с параметрами командной строки:
python3 main.py data.html info.txt
где:
1-параметр: путь к сохраненной веб-странице;
2-параметр: путь к выходному файлу.
Совет
Поиск информации о книге удобно реализовать с помощью регулярных выражений.
Прежде, чем приступать к написанию кода программы, составьте регулярные выражения для каждого параметра информации о книге, воспользовавшись конструктором выражений (например, онлайн-сервисом https://regex101.com).
11.5.2. Игра «Угадай число»¶
Реализовать игру «Угадай число», где в качестве игрока, угадывающего число, выступает компьютер.
Дополнительная информация
Типовой сценарий игры:
Пользователь (П) загадывает целое число (в уме).
Компьютер (К) запрашивает интервал \([a; b]\), на котором было загадано число.
До тех пор, пока число не угадано (или К. перебрал все числа из интервала):
По заданному алгоритму из Таблицы 11.5.3 (
ЦИФРА_СБ % 5 + 1
) К. предлагает возможное загаданное число.П. сообщает, угадал ли компьютер. Если нет, в зависимости от алгоритма отгадывания, П. должен дать подсказку.
№ п/п |
Алгоритм |
Новое число |
Подсказка |
---|---|---|---|
1 |
\((a + b) / 2\) |
Да, предложенное число больше или меньше загаданного |
|
2 |
Случайный перебор чисел |
|
Нет |
3 |
Прямой перебор чисел |
\(a\), \(a+1\), \(a+2\), \(...\), \(b\) |
Нет |
4 |
Двусторонний перебор чисел |
\(a\), \(b\), \(a+1\), \(b-1\), \(...\) |
Нет |
5 |
|
Да, предложенное число больше или меньше загаданного |
Приложение должно:
иллюстрировать полный ход игры (делать соответствующий вывод на экран):
дату/время начала и окончания игры;
количество затраченных попыток;
поддерживать логгирование: занесение результатов каждой игры в журнал (текстовый файл).
Совет
Алгоритмы угадывания числа будет удобно сделать отдельным классом.
Совет
Пример работающего приложения:
11.5.3. Резервное копирование¶
У Ивана, студента вуза, часто возникает необходимость скопировать актуальные учебные материалы (решенные задачи и т.д.) со своего компьютера на флешку для демонстрации преподавателю. При этом необходимые папки иногда бывают разбросаны по диску, поэтому ему хотелось бы найти более эффективный способ копирования данных.
Помогите Ивану - создайте приложение, позволяющее выполнять копирование папок на внешний носитель.
Общие требования
Приложение должно поддерживать 2 режима работы:
Графический: пользователь указывает с клавиатуры имя проекта из файла настроек.
Пакетный: скрипт запускается с параметром командной строки - именем проекта из файла настроек:
python3 main.py math
Если проект существует, осуществляется копирование, отображая ход работы в консоли и лог-файле.
Настройки
Набор папок для копирования определяется файлом настроек следующего вида (пример в формате JSON, однако, по желанию может быть выбран и другой, например, XML):
{
"log_filename":"log.txt",
"projects":{
"math":{
"folders":[
{
"src":"C:/vuz/math1",
"dest":"G:/backup/math1"
},
{
"src":"C:/vuz/math2",
"dest":"G:/backup/math2"
}
],
"options":{
"confirm":true
}
},
"inf":{
"folders":[
{
"src":"C:/vuz/inf",
"dest":"G:/backup/inf"
}
],
"options":{
"confirm":false
}
}
}
}
где:
log_filename
: относительное имя файла в папке скрипта для логгирования;projects
: словарь, где ключ - наименование проекта; каждый проект (также словарь) содержит:folders
: словарь - список папок для копирования в виде:src
: папка на жестком диске (источник);dest
: папка на съемном носителе (цель).
options
: словарь настроек проекта:confirm
: если установлено вTrue
, перед выполнением операции выдается запрос на подтверждение.
Логгирование
Логгирование процесса копирования ведется, как в консоли, так и в лог-файл (определяется параметром log_filename
), и содержит следующие данные:
дата/время начала копирования;
количество копируемых файлов;
список копируемых файлов;
дата/время окончания копирования;
затраченное на копирование время;
ошибки, возникшие в момент работы программы.
Вариативность
После реализации базовой функциональности согласно Таблице 11.5.4 (ЦИФРА_СБ % 3 + 1
) добавьте в файл настроек дополнительный параметр (в секцию options
проекта), имеющий значение для копирования файлов и дополните код приложения. При отсутствии параметра копирование должно осуществляться в обычном режиме.
№ п/п |
Настройка |
Тип |
Описание (копируется, если…) |
---|---|---|---|
1 |
|
|
Дата/время создания/обновления файла не меньше, чем |
2 |
|
|
Имя файла соответствует шаблону (регулярному выражению) |
3 |
|
|
Размер файла в байтах меньше, чем |