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

Примечание

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

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

Примечание

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

  • самостоятельно предусмотреть вывод на экран, четко демонстрирующий происходящие изменения, в т.ч. удобный для пользователя (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"