📋 Задание 1. Среднее время выполнения
Исходное задание из LMS:
Создайте декоратор measure_time, который измеряет и выводит среднее время выполнения функции за 5 вызовов. Функция может быть любой: например, сортировка списка, чтение из файла или расчёты.
Пример применения:
@measure_time
def compute():
total = 0
for i in range(10_000_000):
total += i
return total
Пример вывода:
Среднее время выполнения для 5 вызовов: 0.21 секунд
Результат: 49999995000000
✅ Полное решение
import time
def measure_time(func):
def wrapper(*args, **kwargs):
repeats = 5
total_time = 0
for _ in range(repeats):
start = time.time()
result = func(*args, **kwargs)
total_time += time.time() - start
average = total_time / repeats
print(f"Среднее время выполнения для {repeats} вызовов: {average:.2f} секунд")
return result
return wrapper
@measure_time
def compute():
total = 0
for i in range(10_000_000):
total += i
return total
print("Результат:", compute())
📋 Задание 2. Среднее время выполнения с количеством вызовов
Исходное задание из LMS:
Доработайте декоратор measure_time, чтобы он принимал параметр repeats — количество вызовов функции. Декоратор должен выполнять функцию указанное число раз и выводить среднее время выполнения.
Пример применения:
@measure_time(10)
def compute():
total = 0
for i in range(10_000_000):
total += i
return total
Пример вывода:
Среднее время выполнения для 10 вызовов: 0.21 секунд
Результат: 49999995000000
✅ Полное решение
import time
def measure_time(repeats):
def decorator(func):
def wrapper(*args, **kwargs):
total_time = 0
for _ in range(repeats):
start = time.time()
result = func(*args, **kwargs)
total_time += time.time() - start
average = total_time / repeats
print(f"Среднее время выполнения для {repeats} вызовов: {average:.2f} секунд")
return result
return wrapper
return decorator
@measure_time(10)
def compute():
total = 0
for i in range(10_000_000):
total += i
return total
print("Результат:", compute())
📋 Задание 3. Класс Rectangle
Исходное задание из LMS:
Создайте класс Rectangle, который описывает прямоугольник.
- У каждого объекта должны быть два поля:
widthиheight. - Добавьте метод
get_area(), который возвращает площадь прямоугольника. - Создайте объект прямоугольника с произвольными значениями.
- Выведите его площадь.
- Измените ширину и высоту.
- Выведите новую площадь.
Пример вывода:
Площадь: 20
Новая площадь: 35
✅ Полное решение
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def get_area(self):
return self.width * self.height
rectangle = Rectangle(4, 5)
print(f"Площадь: {rectangle.get_area()}")
rectangle.width = 5
rectangle.height = 7
print(f"Новая площадь: {rectangle.get_area()}")
📋 Задание 4. Класс Counter
Исходное задание из LMS:
Реализуйте класс Counter, который представляет собой простой счётчик.
- Счётчик должен начинаться с нуля.
- Предусмотрите методы для увеличения и уменьшения значения на единицу, при этом при каждой операции должно отображаться новое значение счётчика.
- Добавьте метод, возвращающий текущий результат.
- Проверьте работу счётчика, выполнив несколько операций.
Пример вывода:
Значение увеличено, текущее: 1
Значение увеличено, текущее: 2
Значение увеличено, текущее: 3
Значение уменьшено, текущее: 2
Текущее значение: 2
✅ Полное решение
class Counter:
def __init__(self):
self.value = 0
def increment(self):
self.value += 1
print(f"Значение увеличено, текущее: {self.value}")
def decrement(self):
self.value -= 1
print(f"Значение уменьшено, текущее: {self.value}")
def get_value(self):
return self.value
counter = Counter()
counter.increment()
counter.increment()
counter.increment()
counter.decrement()
print(f"Текущее значение: {counter.get_value()}")
🔧 Подготовка окружения
- Создайте папку
python-fundamentals-practice/lesson-67/. - Создайте файлы
homework_01_measure.py,homework_02_measure_param.py,homework_03_rectangle.pyиhomework_04_counter.py. - Скопируйте в каждый файл соответствующее полное решение.
🧪 Как проверить решение
- Активируйте venv:
venv\Scripts\activate(Windows) илиsource venv/bin/activate(Mac/Linux). - Запустите скрипты:
python homework_01_measure.pypython homework_02_measure_param.pypython homework_03_rectangle.pypython homework_04_counter.py
- Убедитесь, что вывод совпадает с примерами из заданий.
💡 Советы и типичные ошибки
- В заданиях 1 и 2 не забудьте вернуть результат из обёртки, иначе функция будет возвращать
None. - В задании 2 декоратор
measure_time(repeats)— фабрика, она должна вернуть декоратор. - В задании 3 площадь считается как
width * height. - В задании 4 начальное значение счётчика задаётся в
__init__.