Модуль 28. Задача 4. Дата

Модуль 28. Задача 4. Дата

Реализуйте класс Date, который должен:

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

Оба метода должны получать на вход строку вида dd-mm-yyyy.

При тестировании программы объект класса Date должен инициализироваться исключительно через метод конвертации, например:

date = Date.from_string('10-12-2077')

Неверный вариант: date = Date(10, 12, 2077)

Пример основного кода:

date = Date.from_string('10-12-2077')
print(date)
print(Date.is_date_valid('10-12-2077'))
print(Date.is_date_valid('40-12-2077'))

Результат:

День: 10    Месяц: 12   Год: 2077
True
False
ЧИТАТЬ ДАЛЕЕ …
Модуль 28. Задача 3. Моделирование

Модуль 28. Задача 3. Моделирование

В проекте по 3D-моделированию используются две фигуры — куб и пирамида. Для моделирования этих фигур используются соответствующие 2D-фигуры, а именно квадрат и треугольник. Вся поверхность 3D-фигуры может храниться в виде списка. Например, для куба это будет [Square, Square, Square, Square, Square, Square].

Модуль 28. Задача 3. Моделирование

Квадрат инициализируется длинами сторон, а треугольник — основанием и высотой. Каждая из 2D-фигур умеет находить свои периметр и площадь, а 3D-фигуры, в свою очередь, могут находить площадь своей поверхности.

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

ЧИТАТЬ ДАЛЕЕ …
Модуль 28. Задача 2. Математический модуль

Модуль 28. Задача 2. Математический модуль

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

Реализуйте класс MyMath, состоящий как минимум из следующих методов (можете бонусом добавить и другие методы):

  • вычисление длины окружности,
  • вычисление площади окружности,
  • вычисление объёма куба,
  • вычисление площади поверхности сферы.

Пример основного кода:

res_1 = MyMath.circle_len(radius=5)
res_2 = MyMath.circle_sq(radius=6)
print(res_1)
print(res_2)

Результат:

31.41592653589793
113.09733552923255
ЧИТАТЬ ДАЛЕЕ …
Модуль 28. Задача 1. Работа с файлом 2

Модуль 28. Задача 1. Работа с файлом 2

Реализуйте модернизированную версию контекст-менеджера File:

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

Решение:

Решение можно скачать с Boosty.to


Как можно отблагодарить:

  • Оформить удобную для вас подписку на Boosty.to
  • Разово поддержать через DonationAlerts
Модуль 27. Задача 5. Счётчик
Модуль 27. Задача 4. Дебаг

Модуль 27. Задача 4. Дебаг

Напишите декоратор debug, который при каждом вызове декорируемой функции выводит её имя (вместе со всеми передаваемыми аргументами), а затем — какое значение она возвращает. После этого выводится результат её выполнения.

Пример декорируемой функции:

def greeting(name, age=None):
    if age:
        return "Ого, {name}! Тебе уже {age} лет, ты быстро растёшь!".format(name=name, age=age)
    else:
        return "Привет, {name}!".format(name=name)

Основной код:

greeting("Том")
greeting("Миша", age=100)
greeting(name="Катя", age=16)

Результат:

Вызывается greeting('Benjamin')
'greeting' вернула значение 'Привет, Том!'
Привет, Том!

Вызывается greeting('Richard', age=100)
'greeting' вернула значение 'Ого, Миша! Тебе уже 100 лет, ты быстро растёшь!'
Ого, Миша! Тебе уже 100 лет, ты вырос!

Вызывается greeting(name='Dorrisile', age=16)
'greeting' вернула значение 'Ого, Катя! Тебе уже 16 лет, ты быстро растёшь!'
Ого, Катя! Тебе уже 16 лет, ты быстро растешь!

Совет: попробуйте самостоятельно изучить функцию repr. Это поможет в решении задачи.

ЧИТАТЬ ДАЛЕЕ …
Модуль 27. Задача 3. Логирование

Модуль 27. Задача 3. Логирование

Реализуйте декоратор logging, который будет отвечать за логирование функций. На экран выводится название функции и её документация. Если во время выполнения декорируемой функции возникла ошибка, то в файл function_errors.log записываются названия функции и ошибки.

Также постарайтесь сделать так, чтобы программа не завершалась после обнаружения первой же ошибки, а обрабатывала все декорируемые функции и сразу записывала все ошибки в файл.

Дополнительно: запишите дату и время возникновения ошибки, используя модуль datetime.

ЧИТАТЬ ДАЛЕЕ …
Модуль 27. Задача 2. Замедление кода

Модуль 27. Задача 2. Замедление кода

В программировании иногда возникает ситуация, когда работу функции нужно замедлить. Типичный пример — функция, которая постоянно проверяет, изменились ли данные на веб-странице или её код.

Реализуйте декоратор, который перед выполнением декорируемой функции ждёт несколько секунд.

ЧИТАТЬ ДАЛЕЕ …
Система контроля версий Git. Работаем с Git на своём компьютере.

Система контроля версий Git. Инструменты и правила работы с Git.

Тест на закрепление изученного материала в курсе "Система контроля версий Git" в пятом разделе "Инструменты и правила работы с Git".

1. Выберите ветки, которые названы корректно — в соответствии с общепринятыми рекомендациями по именованию веток:

NewsTabAdded
NewsTabAdded34
34NewsTabAdded
news-tab-added
news-tab-added-34
34-news-tab-added

ЧИТАТЬ ДАЛЕЕ …

Модуль 27. Задача 1. Как дела?

Модуль 27. Задача 1. Как дела?

Ваня что-то совсем заскучал на работе и решил побаловаться с кодом проекта. Он написал надоедливый декоратор, который при вызове декорируемой функции спрашивает у пользователя «Как дела?», вне зависимости от ответа отвечает что-то вроде «А у меня не очень!» и только потом запускает саму функцию. Правда, после такой выходки его чуть не уволили с работы.

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

Пример кода:

@how_are_you
def test():
    print('<Тут что-то происходит...>')

test()

Результат:

Как дела? Хорошо.
А у меня не очень! Ладно, держи свою функцию.
<Тут что-то происходит...>
ЧИТАТЬ ДАЛЕЕ …
Система контроля версий Git. Работаем с Git на своём компьютере.

Система контроля версий Git. Сравнение версий и отмена изменений.

Тест на закрепление изученного материала в курсе "Система контроля версий Git" в первом разделе "Сравнение версий и отмена изменений".

1. Что будет выведено в результате выполнения следующей команды? git diff <commit1> <commit2>

Сначала изменения в commit1, а затем — в commit 2
Все изменения, произошедшие между commit1 и commit2, не включая изменения в commit2
Все изменения, произошедшие между commit1 и commit2, не включая изменения в commit1
Все изменения, произошедшие между commit1 и commit2, включая изменения в commit1 и в commit2
Все изменения, произошедшие в проекте после commit1 до commit2 включительно
Все изменения, произошедшие в проекте после commit2 до commit1 включительно

Подсказка:
Команда git diff при указании ей в качестве параметров хешей двух коммитов выводит все изменения, сделанные после первого коммита до второго включительно.

ЧИТАТЬ ДАЛЕЕ …

Система контроля версий Git. Работаем с Git на своём компьютере.

Система контроля версий Git. Командная работа в Git.

Тест на закрепление изученного материала в курсе "Система контроля версий Git" в третьем разделе "Командная работа в Git".

1. Чем различаются команды git checkout -b branch-name и git checkout branch-name?

Ничем, это одинаковые команды
Параметр -b указывает на необходимость создать ветку и уже потом в неё переключиться
Параметр -b указывает на необходимость проверить ветку на актуальность и уже потом в неё переключиться

ЧИТАТЬ ДАЛЕЕ …

Система контроля версий Git. Работаем с Git на своём компьютере.

Система контроля версий Git. Работаем с удалённым репозиторием.

Тест на закрепление изученного материала в курсе "Система контроля версий Git" во втором разделе "Работаем с удалённым репозиторием".

1. В какой последовательности при работе с удалённым репозиторием обычно встречаются следующие команды?

git clone, git push, git pull
git push, git clone, git pull
git clone, git pull, git push
git pull, git push, git clone
git push, git pull, git clone

ЧИТАТЬ ДАЛЕЕ …

Система контроля версий Git. Работаем с Git на своём компьютере.

Система контроля версий Git. Работаем с Git на своём компьютере.

Тест на закрепление изученного материала в курсе "Система контроля версий Git" в первом разделе "Работаем с Git на своём компьютере".

1. Зачем нужны системы контроля версий?

Сохранение промежуточных версий проекта (истории изменений)
Отправка своего кода на сервер
Обеспечение возможности командной работы над проектом
Контроль сохранения работоспособности старых версий проекта
Контроль качества написанного кода

ЧИТАТЬ ДАЛЕЕ …

Модуль 26. Задача 6. Односвязный список

Модуль 26. Задача 6. Односвязный список

Мы продолжаем тему структур данных и алгоритмов. И в этот раз вам нужно реализовать односвязный список.

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

Модуль 26. Задача 6. Односвязный список

В односвязном списке связь — это ссылка только на следующий элемент, то есть в нём можно передвигаться только в сторону конца списка. Узнать адрес предыдущего элемента, опираясь на содержимое текущего узла, невозможно.

Реализуйте такую структуру данных без использования стандартных структур Python (list, dict, tuple и прочие) и дополнительных модулей. Для структуры реализуйте следующие методы:

  • append — добавление элемента в конец списка;
  • get — получение элемента по индексу;
  • remove — удаление элемента по индексу.

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

Пример основной программы:

my_list = LinkedList()
my_list.append(10)
my_list.append(20)
my_list.append(30)
print('Текущий список:', my_list)
print('Получение третьего элемента:', my_list.get(2))
print('Удаление второго элемента.')
my_list.remove(1)
print('Новый список:', my_list)

Результат:

Текущий список: [10 20 30]
Получение третьего элемента: 30
Удаление второго элемента.
Новый список: [10 30]
ЧИТАТЬ ДАЛЕЕ …