Lesson 10, 11

This commit is contained in:
vitaliy 2025-10-23 09:57:04 +03:00
parent a1ebc759b7
commit b0dd1a1373
10 changed files with 197 additions and 0 deletions

BIN
flask_web_2.0.pdf Normal file

Binary file not shown.

34
lesson_10/code/ya_kube.py Normal file
View File

@ -0,0 +1,34 @@
import random
import uuid
import datetime
from lesson_5.code.db import DICT_DEFENITION_WORD
class Yakubovich:
def __init__(self):
pass
def print_menu(self):
pass
def start_game(self):
pass
def save_game(self):
pass
def end_game(self):
pass
def load_game(self):
pass
def _generate_key(self) -> str:
pass
game = Yakubovich()
game.print_menu()

View File

@ -0,0 +1,32 @@
# todo: Перепишите игру "Поле чудес" на классах.
import random
import uuid
import datetime
from lesson_5.code.db import DICT_DEFENITION_WORD
class Yakubovich:
def __init__(self):
pass
def print_menu(self):
pass
def start_game(self):
pass
def save_game(self):
pass
def end_game(self):
pass
def load_game(self):
pass
def _generate_key(self) -> str:
pass
game = Yakubovich()
game.print_menu()

Binary file not shown.

77
lesson_11/code/oop.py Normal file
View File

@ -0,0 +1,77 @@
# Инкапсуляция
# Метод 1 классика жанра
class Config:
def __init__(self):
self.__store = {}
def set_store(self, key, value):
if not key in self.__store:
self.__store[key] = value
def get_store(self, key):
if key in self.__store:
return self.__store[key]
else:
raise Exception(f"Нет такого ключа '{key}'")
cnf = Config()
cnf.set_store('db', 'llm')
cnf.set_store('host', 'localhost')
cnf.set_store('port', '5424')
cnf.set_store('user', 'postgres')
cnf.set_store('passwd', '123')
print(cnf.get_store('db'))
print(cnf.get_store('host'))
try:
print(cnf.get_store('hosts'))
except Exception as e:
print(e.__repr__())
# Метод 2 дандеры __getattr__ _setattr__
class SuperConfig():
def __init__(self):
self.__store = {}
def __getattr__(self, key):
# print(__store)
if key in self.__store:
return self.__store[key]
else:
raise Exception(f"Нет такого ключа '{key}'")
def __setattr__(self, key, value):
if key == '_SuperConfig__store':
print(key)
self.__dict__[key] = value
return None
if not key in self.__store:
self.__store[key] = value
else:
raise Exception(f"Ключ уже существует '{key}'")
cnf = SuperConfig()
cnf.db = "llm"
cnf.host = "localhost"
print(cnf.db)
print(cnf.host)
print(cnf.__dict__)
# Метод 3 property
class DB:
def __init__(self, namedb, host, port ):
self.__namedb = namedb
self.__host = host
self.__port = port
def __str__(self):
return f"{self.__namedb} {self.__host} "
@property
def namedb(self):
return self.__namedb
@namedb.setter
def namedb(self, value):
self.__namedb = value
my_db = DB('llm', '127.0.0.1', 5424)
print(my_db.namedb)

View File

@ -0,0 +1,15 @@
# Инкапсуляция и property
# todo: Класс "Температура"
# Создайте класс Temperature, который хранит температуру в градусах Цельсия.
# Добавьте свойство для получения и установки температуры в Фаренгейтах и Кельвинах.
# Внутренне температура должна храниться только в Цельсиях.
# celsius (get, set) - работа с Цельсиями.
# fahrenheit (get, set) - при установке конвертирует значение в Цельсии.
# kelvin (get, set) - при установке конвертирует значение в Цельсии.
# Пример использования
t = Temperature(25)
print(f"{t.celsius}C, {t.fahrenheit}F, {t.kelvin}K")
t.fahrenheit = 32
print(f"После установки 32F: {t.celsius}C")

View File

@ -0,0 +1,14 @@
# Инкапсуляция и property
# todo: Класс "Пользователь" (Валидация email)
# Создайте класс User. У него должны быть свойства email и password.
# При установке email проверяйте, что строка содержит символ @ (простая валидация).
# При установке пароля, храните не сам пароль, а его хеш (для простоты можно использовать hash()).
# Сделайте метод check_password(password), который проверяет, соответствует ли хеш переданного
# пароля сохраненному хешу.
# Пример использования
user = User("test@example.com", "secret")
print(user.email) # test@example.com
# print(user.password) # AttributeError
print(user.check_password("secret")) # True
print(user.check_password("wrong")) # False

View File

@ -0,0 +1,12 @@
# Инкапсуляция и property
# todo: Класс "Товар" (Защита от отрицательной цены)
# Создайте класс Product. У него есть свойства name (простая строка) и price.
# При установке цены проверяйте, что она не отрицательная.
# Если пытаются установить отрицательную цену, устанавливайте 0.
# Пример использования
product = Product("Book", 10)
print(product.price) # 10
product.price = -5
print(product.price) # 0

View File

@ -0,0 +1,13 @@
# Композиция и вычисляемые свойства
# todo: Класс "Заказ"
# Создайте класс Order (Заказ). Внутри он хранит список экземпляров Product (из предыдущей задачи 37).
# Реализуйте свойство total_price, которое вычисляет общую стоимость заказа на основе цен всех товаров
# в списке. Реализуйте методы add_product(product) и remove_product(product) для управления списком.
# Пример использования
book = Product("Book", 10)
pen = Product("Pen", 2)
order = Order()
order.add_product(book)
order.add_product(pen)
print(f"Общая стоимость: {order.total_price}") # 12

Binary file not shown.