Lesson 12

This commit is contained in:
vitaliy 2025-10-27 14:38:51 +03:00
parent 622d1ff2bb
commit 5b6f2916a6
5 changed files with 187 additions and 0 deletions

79
lesson_12/code/db.py Normal file
View File

@ -0,0 +1,79 @@
import psycopg2
dbname='llm'
user='postgres'
host='localhost'
password='123'
id=1
try:
conn = psycopg2.connect(f"dbname={dbname} user={user} host={host} password={password} ")
except:
print("I am unable to connect to the database")
# we use a context manager to scope the cursor session
with conn.cursor() as curs:
try:
# simple single row system query
curs.execute("""
CREATE TABLE IF NOT EXISTS cinemas (
id serial,
name text,
describe text
);
""")
print("OK")
conn.commit()
# a more robust way of handling errors
except (Exception, psycopg2.DatabaseError) as error:
print(error)
try:
curs.execute("""
INSERT
INTO
cinemas("name", describe)
VALUES('Иллюзия обмана', 'Про фокусы !');
""")
conn.commit()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
try:
curs.execute(f"""
DELETE
FROM
cinemas
WHERE ID={id}
""")
conn.commit()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
try:
curs.execute(f"""
UPDATE cinemas SET name='Иллюзия любви!', describe='No name'
WHERE ID=2
""")
conn.commit()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
try:
curs.execute(f"""
SELECT id, name, describe
FROM cinemas
""")
_rows = curs.fetchall()
for row in _rows:
id, name, desc = row
print(f"id: {id}, name: {name}, desc: {desc}")
except (Exception, psycopg2.DatabaseError) as error:
print(error)
conn.close()

15
lesson_12/code/oop.py Normal file
View File

@ -0,0 +1,15 @@
class Mammal:
def move(self, x):
print('Двигается')
class Hare(Mammal):
def move(self, x, y ):
print('Прыгает')
animal = Mammal()
animal.move(100) # Двигается
hare = Hare()
hare.move(100) # Прыгает ????

View File

@ -0,0 +1,32 @@
# Модель учебных материалов
# todo: Создайте иерархию классов для представления различных типов учебных материалов.
#
# Требования: Базовый класс LearningMaterial:
# Свойства: title, author, duration_minutes
# Методы:
# display_info() - выводит основную информацию
# get_difficulty() - возвращает сложность материала (должен быть переопределен в дочерних классах)
#
# Дочерние классы:
# VideoLesson:
# Дополнительные свойства: video_quality, subtitles_available
# Сложность: "Средняя"
#
# Article:
# Дополнительные свойства: word_count, reading_level
# Сложность: рассчитывается как word_count / 1000 (легкая если <1, средняя 1-3, сложная >3)
#
# Quiz:
# Дополнительные свойства: questions_count, passing_score
# Сложность: "Высокая" если passing_score > 80, иначе "Средняя"
# Этот код должен работать после реализации:
materials = [
VideoLesson("Python ООП", "Иван Иванов", 45, "1080p", True),
Article("Глубокое обучение", "Анна Петрова", 1200, "advanced"),
Quiz("Проверка знаний", "Платформа", 20, 75, 10)
]
for material in materials:
print(f"{material.title}: {material.get_difficulty()}")

View File

@ -0,0 +1,21 @@
# Система уведомлений (Полиморфизм)
# todo: Реализовать систему отправки уведомлений пользователям через разные каналы.
#
# Требования:
# Базовый класс NotificationSender с методом send(message, user)
# Дочерние классы:
# EmailSender: отправляет email с темой "Образовательная платформа"
# SMSSender: отправляет SMS (первые 50 символов сообщения)
# PushSender: отправляет push-уведомление с иконкой "🎓"
#
# Класс пользователя User:
# Свойства: name, preferred_notifications (список объектов NotificationSender)
# Этот код должен работать после релизации:
user = User("Мария", [EmailSender(), PushSender()])
notify_user(user, "Блок аналитики начинается с 27 октября!")
def notify_user(user, message):
for sender in user.preferred_notifications:
sender.send(message, user)

View File

@ -0,0 +1,40 @@
# todo: Создайте иерархию классов для экспорта данных в разные форматы.
# Требования:
# Абстрактный базовый класс DataExporter:
#
# Методы:
# export(self, data) - абстрактный метод
# get_format_name(self) - возвращает название формата
# validate_data(self, data) - общий метод проверки данных (не пустые ли)
#
# Конкретные реализации:
# JSONExporter:
# Экспортирует данные в JSON-формат
# Добавляет поле "export_timestamp" с текущим временем
#
# CSVExporter:
# Экспортирует данные в CSV (если data - список словарей)
# Автоматически определяет заголовки из ключей первого элемента
#
# XMLExporter:
# Создает XML структуру с корневым элементом <report>
# HTMLExporter (дополнительно):
# Создает красивую HTML-таблицу с CSS-стилями
# Этот код должен работать после реализации:
sales_data = [
{"product": "Laptop", "price": 1000, "quantity": 2},
{"product": "Mouse", "price": 50, "quantity": 10}
]
exporters = [
JSONExporter(),
CSVExporter(),
XMLExporter()
]
for exporter in exporters:
print(f"Формат: {exporter.get_format_name()}")
exporter.export(sales_data)
print("---")