diff --git a/flask_web_2.0.pdf b/flask_web_2.0.pdf new file mode 100644 index 0000000..7c37eea Binary files /dev/null and b/flask_web_2.0.pdf differ diff --git a/lesson_10/code/ya_kube.py b/lesson_10/code/ya_kube.py new file mode 100644 index 0000000..97ee6ac --- /dev/null +++ b/lesson_10/code/ya_kube.py @@ -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() + + + + diff --git a/lesson_10/home_task/task34.py b/lesson_10/home_task/task34.py new file mode 100644 index 0000000..aa6a8ad --- /dev/null +++ b/lesson_10/home_task/task34.py @@ -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() \ No newline at end of file diff --git a/lesson_10/manual/oop_i_ii_.pdf b/lesson_10/manual/oop_i_ii_.pdf new file mode 100644 index 0000000..7b6ee6a Binary files /dev/null and b/lesson_10/manual/oop_i_ii_.pdf differ diff --git a/lesson_11/code/oop.py b/lesson_11/code/oop.py new file mode 100644 index 0000000..60bf19b --- /dev/null +++ b/lesson_11/code/oop.py @@ -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) diff --git a/lesson_11/home_task/task35.py b/lesson_11/home_task/task35.py new file mode 100644 index 0000000..3af4acc --- /dev/null +++ b/lesson_11/home_task/task35.py @@ -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") \ No newline at end of file diff --git a/lesson_11/home_task/task36.py b/lesson_11/home_task/task36.py new file mode 100644 index 0000000..927df3b --- /dev/null +++ b/lesson_11/home_task/task36.py @@ -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 \ No newline at end of file diff --git a/lesson_11/home_task/task37.py b/lesson_11/home_task/task37.py new file mode 100644 index 0000000..65b32af --- /dev/null +++ b/lesson_11/home_task/task37.py @@ -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 \ No newline at end of file diff --git a/lesson_11/home_task/task38.py b/lesson_11/home_task/task38.py new file mode 100644 index 0000000..e2279cc --- /dev/null +++ b/lesson_11/home_task/task38.py @@ -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 \ No newline at end of file diff --git a/lesson_11/manual/oop_i_ii_.pdf b/lesson_11/manual/oop_i_ii_.pdf new file mode 100644 index 0000000..7b6ee6a Binary files /dev/null and b/lesson_11/manual/oop_i_ii_.pdf differ