15 задач по всему профи-курсу.
Условие: Напишите декоратор, который замеряет время работы функции. Решение:
import time
import functools
def timer(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f'Время: {time.time() - start:.4f} сек')
return result
return wrapperУсловие: Создайте класс Book с полями title и author. Переопределите str, чтобы книга красиво выводилась через print. Решение:
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
def __str__(self):
return f'{self.title} (автор: {self.author})'Условие: Создайте класс Temperature с приватным полем _celsius. Добавьте свойство fahrenheit для перевода. Решение:
class Temperature:
def __init__(self, celsius):
self._celsius = celsius
@property
def fahrenheit(self):
return self._celsius * 9/5 + 32Условие: Опишите структуру Point (x, y) с помощью @dataclass и создайте два объекта. Решение:
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p1 = Point(1, 2)
p2 = Point(1, 2)
print(p1 == p2) # TrueУсловие: Напишите генератор, который выдает N чисел Фибоначчи. Решение:
def fib(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
for x in fib(5):
print(x)Условие: Создайте модель User (name: str, age: int). Проверьте валидацию на неверных данных. Решение:
from pydantic import BaseModel, ValidationError
class User(BaseModel):
name: str
age: int
try:
user = User(name='Иван', age='двадцать')
except ValidationError as e:
print('Ошибка валидации:', e)Условие: Запишите словарь в JSON-файл и прочитайте его обратно. Решение:
import json
data = {'name': 'Alice', 'age': 25}
with open('data.json', 'w') as f:
json.dump(data, f)
with open('data.json', 'r') as f:
loaded = json.load(f)
print(loaded['name'])Условие: Напишите асинхронную функцию, которая делает 3 паузы по 1 секунде параллельно. Решение:
import asyncio
async def task(name):
await asyncio.sleep(1)
print(f'{name} готов')
async def main():
await asyncio.gather(task('A'), task('B'), task('C'))
asyncio.run(main())Условие: Запустите 2 функции, имитирующие долгую работу, в разных потоках. Решение:
import threading
import time
def work(name):
time.sleep(2)
print(f'{name} завершен')
t1 = threading.Thread(target=work, args=('Поток 1',))
t2 = threading.Thread(target=work, args=('Поток 2',))
t1.start(); t2.start()
t1.join(); t2.join()Условие: Напишите функцию multiply(a, b) и тест к ней с параметризацией. Решение:
import pytest
def multiply(a, b):
return a * b
@pytest.mark.parametrize('a, b, expected', [
(2, 3, 6),
(0, 5, 0),
(-2, 4, -8)
])
def test_multiply(a, b, expected):
assert multiply(a, b) == expectedУсловие: Создайте ошибку NegativeAgeError и функцию check_age, которая ее выбрасывает. Решение:
class NegativeAgeError(Exception):
pass
def check_age(age):
if age < 0:
raise NegativeAgeError('Возраст не может быть отрицательным')Условие: Дан список чисел. Создайте новый список из квадратов четных чисел. Решение:
nums = [1, 2, 3, 4, 5, 6]
result = [x * x for x in nums if x % 2 == 0]
print(result) # [4, 16, 36]Условие: Создайте генератор, который возвращает кубы чисел от 1 до 1000 (не храня их в памяти). Решение:
cubes = (x ** 3 for x in range(1, 1001))
for c in cubes:
if c > 100:
break
print(c)Условие: Напишите функцию, которая принимает любое количество аргументов и выводит их типы. Решение:
def show_types(*args, **kwargs):
for a in args:
print(type(a))
for k, v in kwargs.items():
print(k, type(v))Условие: Напишите эндпоинт FastAPI, который принимает имя и возвращает приветствие. Решение:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
@app.post('/hello')
def hello(user: User):
return {'message': f'Привет, {user.name}'}