Lesson 12
This commit is contained in:
parent
622d1ff2bb
commit
5b6f2916a6
79
lesson_12/code/db.py
Normal file
79
lesson_12/code/db.py
Normal 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
15
lesson_12/code/oop.py
Normal 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) # Прыгает ????
|
||||||
32
lesson_12/home_task/task39.py
Normal file
32
lesson_12/home_task/task39.py
Normal 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()}")
|
||||||
21
lesson_12/home_task/task40.py
Normal file
21
lesson_12/home_task/task40.py
Normal 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)
|
||||||
40
lesson_12/home_task/task41.py
Normal file
40
lesson_12/home_task/task41.py
Normal 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("---")
|
||||||
Loading…
Reference in New Issue
Block a user