11.5. Самостоятельная работа

Примечание

При выполнении заданий используйте заготовки решений: -> Google Диск.

Подробнее: см. Цикл выполнения и защиты заданий.

Примечание

В каждой задаче необходимо:

  • самостоятельно предусмотреть вывод на экран, четко демонстрирующий происходящие изменения, в т.ч. удобный для пользователя (user-friendly);
  • использовать объектно-ориентированный подход.

11.5.1. Информация о книге

Выберите книжный магазин согласно Таблице 11.5.1 (под номером ЦИФРА_СБ + 1), найдите интересную Вам книгу и сохраните найденную веб-страницу на диск как data.html.

Таблица 11.5.1 - Книжные интернет-магазины
№ п/п Наименование магазина URL
1 Ozon.ru http://www.ozon.ru/
2 Лабиринт http://www.labirint.ru/
3 ЛитРес http://www.litres.ru/
4 Москва http://www.moscowbooks.ru/
5 Библио-Глобус http://www.biblio-globus.ru/
6 My-shop.ru http://my-shop.ru/
7 Буквоед http://www.bookvoed.ru/
8 Books.ru http://www.books.ru/
9 Московский дом книги http://www.mdk-arbat.ru/
10 Библион http://www.biblion.ru/

Напишите приложение, позволяющее получить из файла data.html информацию о книге в текстовый файл data.txt (Таблица 11.5.2).

Таблица 11.5.2 - Информация о книге
№ п/п Характеристика Тип Пример
1 Название str "Руслан и Людмила"
2 Список авторов tuple ("Александр Пушкин", )
3 Цена float 121.00
4 ISBN str "978-5-699-66903-5"
5 Издательство str "Эксмо"
6 Количество страниц int 128
7 Год выпуска int 2016

Приложение должно поддерживать 2 режима работы:

  1. Графический:

    Пользователь указывает с клавиатуры:

    • путь к сохраненной веб-странице;
    • путь к выходному файлу.
  2. Пакетный:

    Скрипт запускается с параметрами командной строки:

    python3 main.py data.html info.txt
    

    где:

    • 1-параметр: путь к сохраненной веб-странице;
    • 2-параметр: путь к выходному файлу.

Совет

Поиск информации о книге удобно реализовать с помощью регулярных выражений.

Прежде, чем приступать к написанию кода программы, составьте регулярные выражения для каждого параметра информации о книге, воспользовавшись конструктором выражений (например, онлайн-сервисом https://regex101.com).

11.5.2. Игра «Угадай число»

Реализовать игру «Угадай число», где в качестве игрока, угадывающего число, выступает компьютер.

Дополнительная информация

Типовой сценарий игры:

  1. Пользователь (П) загадывает целое число (в уме).

  2. Компьютер (К) запрашивает интервал \([a; b]\), на котором было загадано число.

  3. До тех пор, пока число не угадано (или К. перебрал все числа из интервала):

    1. По заданному алгоритму из Таблицы 11.5.3 (ЦИФРА_СБ % 5 + 1) К. предлагает возможное загаданное число.
    2. П. сообщает, угадал ли компьютер. Если нет, в зависимости от алгоритма отгадывания, П. должен дать подсказку.
Таблица 11.5.3 - Алгоритмы угадывания числа компьютером
№ п/п Алгоритм Новое число Подсказка
1 Метод дихотомии \((a + b) / 2\) Да, предложенное число больше или меньше загаданного
2 Случайный перебор чисел random.randint(a, b) Нет
3 Прямой перебор чисел \(a\), \(a+1\), \(a+2\), \(...\), \(b\) Нет
4 Двусторонний перебор чисел \(a\), \(b\), \(a+1\), \(b-1\), \(...\) Нет
5 Метод дихотомии random.randint(a, b) Да, предложенное число больше или меньше загаданного

Приложение должно:

  • иллюстрировать полный ход игры (делать соответствующий вывод на экран):

    • дату/время начала и окончания игры;
    • количество затраченных попыток;
  • поддерживать логгирование: занесение результатов каждой игры в журнал (текстовый файл).

Совет

Алгоритмы угадывания числа будет удобно сделать отдельным классом.

Совет

Пример работающего приложения:

11.5.3. Резервное копирование

У Ивана, студента вуза, часто возникает необходимость скопировать актуальные учебные материалы (решенные задачи и т.д.) со своего компьютера на флешку для демонстрации преподавателю. При этом необходимые папки иногда бывают разбросаны по диску, поэтому ему хотелось бы найти более эффективный способ копирования данных.

Помогите Ивану - создайте приложение, позволяющее выполнять копирование папок на внешний носитель.

Общие требования

Приложение должно поддерживать 2 режима работы:

  1. Графический: пользователь указывает с клавиатуры имя проекта из файла настроек.

  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 проекта), имеющий значение для копирования файлов и дополните код приложения. При отсутствии параметра копирование должно осуществляться в обычном режиме.

Таблица 11.5.4 - Дополнительная настройка приложения
№ п/п Настройка Тип Описание (копируется, если…)
1 "datetime_min" datetime.datetime Дата/время создания/обновления файла не меньше, чем "datetime_min"
2 "template" str Имя файла соответствует шаблону (регулярному выражению) "template"
3 "size_max" int Размер файла в байтах меньше, чем "size_max"