diff --git "a/reports/Tsiutskou/1/rep/\320\233\320\260\320\261\320\260 1.pdf" "b/reports/Tsiutskou/1/rep/\320\233\320\260\320\261\320\260 1.pdf" new file mode 100644 index 00000000..2da69507 Binary files /dev/null and "b/reports/Tsiutskou/1/rep/\320\233\320\260\320\261\320\260 1.pdf" differ diff --git a/reports/Tsiutskou/1/src/1.py b/reports/Tsiutskou/1/src/1.py new file mode 100644 index 00000000..c30c15a5 --- /dev/null +++ b/reports/Tsiutskou/1/src/1.py @@ -0,0 +1,7 @@ +import random + +N = int(input("Введите количество чисел N: ")) +numbers = list(range(1, N + 1)) +random.shuffle(numbers) +print(f"\n{N} чисел в случайном порядке:") +print(" ".join(map(str, numbers))) diff --git a/reports/Tsiutskou/1/src/2.py b/reports/Tsiutskou/1/src/2.py new file mode 100644 index 00000000..8512a987 --- /dev/null +++ b/reports/Tsiutskou/1/src/2.py @@ -0,0 +1,7 @@ +nums = list(map(int, input("Введите числа: ").split())) +for x in set(nums): + if nums.count(x) > len(nums) // 2: + print(f"Элемент большинства: {x}") + break +else: + print("Нет элемента большинства") diff --git "a/reports/Tsiutskou/2/rep/\320\233\320\260\320\261\320\260 2.pdf" "b/reports/Tsiutskou/2/rep/\320\233\320\260\320\261\320\260 2.pdf" new file mode 100644 index 00000000..41990dcd Binary files /dev/null and "b/reports/Tsiutskou/2/rep/\320\233\320\260\320\261\320\260 2.pdf" differ diff --git a/reports/Tsiutskou/2/src/1.py b/reports/Tsiutskou/2/src/1.py new file mode 100644 index 00000000..f1155b82 --- /dev/null +++ b/reports/Tsiutskou/2/src/1.py @@ -0,0 +1,56 @@ +class LimitedSet: + def __init__(self, max_power, elements=None): + self.max_power = max_power + self.items = [] + if elements: + for e in elements: + self.add(e) + + def add(self, value): + if value not in self.items and len(self.items) < self.max_power: + self.items.append(float(value)) + return True + return False + + def remove(self, value): + if value in self.items: + self.items.remove(value) + return True + return False + + def contains(self, value): + return value in self.items + + def intersection(self, other): + result = LimitedSet(min(self.max_power, other.max_power)) + for item in self.items: + if item in other.items: + result.add(item) + return result + + def __str__(self): + return "{" + ", ".join(str(x) for x in self.items) + "}" + + def __eq__(self, other): + return set(self.items) == set(other.items) + + +# Создание множеств +s1 = LimitedSet(5, [1.5, 2.7, 3.2, 4.8]) +s2 = LimitedSet(5, [2.7, 4.8, 6.1, 7.5]) +print("Множество 1:", s1) +print("Множество 2:", s2) +# Проверка принадлежности +print(f"Содержит 2.7? {s1.contains(2.7)}") +# Добавление элемента +s1.add(5.9) +print("После добавления 5.9:", s1) +# Удаление элемента +s1.remove(1.5) +print("После удаления 1.5:", s1) +# Пересечение +s3 = s1.intersection(s2) +print("Пересечение:", s3) +# Сравнение +s4 = LimitedSet(5, [2.7, 4.8]) +print(f"Равны? {s3 == s4}") diff --git a/reports/Tsiutskou/2/src/2.py b/reports/Tsiutskou/2/src/2.py new file mode 100644 index 00000000..10a9072b --- /dev/null +++ b/reports/Tsiutskou/2/src/2.py @@ -0,0 +1,68 @@ +class Subscriber: + def __init__(self, name, phone_number): + self.name = name + self.phone_number = phone_number + self.debt = 0 + self.services = [] + self.is_active = True + + def pay(self, amount): + if amount <= self.debt: + self.debt -= amount + print(f"{self.name} оплатил {amount} руб. Остаток: {self.debt}") + else: + print(f"Оплачено {amount}, сдача {amount - self.debt}") + self.debt = 0 + + def make_call(self, minutes): + cost = minutes * 0.2 + self.debt += cost + print(f"Звонок {minutes} мин = {cost} руб.") + + def add_service(self, service_name, service_price): + self.services.append(service_name) + self.debt += service_price + print(f"Добавлена услуга {service_name} ({service_price} руб.)") + + def remove_service(self, service_name): + for s in self.services: + if s == service_name: + self.services.remove(s) + print(f"Услуга {service_name} удалена") + return + print(f"Услуга {service_name} не найдена") + + +class Administrator: + def __init__(self, name): + self.name = name + + def change_number(self, subscriber, new_number): + old = subscriber.phone_number + subscriber.phone_number = new_number + print(f"{self.name}: сменил номер {old} -> {new_number}") + + def disable(self, subscriber): + if subscriber.debt > 0: + subscriber.is_active = False + print(f"{self.name}: отключил {subscriber.name} (долг {subscriber.debt} руб.)") + + def enable(self, subscriber): + if subscriber.debt == 0: + subscriber.is_active = True + print(f"{self.name}: включил {subscriber.name}") + + +admin = Administrator("Иван") +sub = Subscriber("Петр", "123-45-67") +print(f"Абонент: {sub.name}, Номер: {sub.phone_number}\n") +sub.make_call(10) +sub.add_service("Интернет", 30) +sub.add_service("ТВ", 20) +print(f"\nДолг: {sub.debt} руб.") +print(f"Услуги: {sub.services}\n") +sub.pay(50) +print(f"Остаток долга: {sub.debt}\n") +admin.change_number(sub, "999-88-77") +admin.disable(sub) +print(f"Активен: {sub.is_active}") diff --git "a/reports/Tsiutskou/3/rep/\320\233\320\260\320\261\320\260 3.pdf" "b/reports/Tsiutskou/3/rep/\320\233\320\260\320\261\320\260 3.pdf" new file mode 100644 index 00000000..8a641cbc Binary files /dev/null and "b/reports/Tsiutskou/3/rep/\320\233\320\260\320\261\320\260 3.pdf" differ diff --git a/reports/Tsiutskou/3/src/1.py b/reports/Tsiutskou/3/src/1.py new file mode 100644 index 00000000..26928485 --- /dev/null +++ b/reports/Tsiutskou/3/src/1.py @@ -0,0 +1,63 @@ +class Sedan: + def drive(self): + pass + + +class Hatchback: + def drive(self): + pass + + +class ToyotaSedan(Sedan): + def drive(self): + return "Toyota Camry" + + +class ToyotaHatchback(Hatchback): + def drive(self): + return "Toyota Corolla" + + +class TeslaSedan(Sedan): + def drive(self): + return "Tesla Model 3" + + +class TeslaHatchback(Hatchback): + def drive(self): + return "Tesla Model Y" + + +class CarFactory: + def create_sedan(self): + pass + + def create_hatchback(self): + pass + + +class ToyotaFactory(CarFactory): + def create_sedan(self): + return ToyotaSedan() + + def create_hatchback(self): + return ToyotaHatchback() + + +class TeslaFactory(CarFactory): + def create_sedan(self): + return TeslaSedan() + + def create_hatchback(self): + return TeslaHatchback() + + +def produce_cars(car_factory, factory_name): + print(f"\nЗавод {factory_name}:") + print(car_factory.create_sedan().drive()) + print(car_factory.create_hatchback().drive()) + + +if __name__ == "__main__": + produce_cars(ToyotaFactory(), "Toyota") + produce_cars(TeslaFactory(), "Tesla") diff --git a/reports/Tsiutskou/3/src/2.py b/reports/Tsiutskou/3/src/2.py new file mode 100644 index 00000000..244e42f8 --- /dev/null +++ b/reports/Tsiutskou/3/src/2.py @@ -0,0 +1,80 @@ +class Account: + def get_discount(self): + return 0 + + def get_benefits(self): + return [] + + def get_name(self): + return "Базовая" + + +class BaseAccount(Account): + def get_discount(self): + return 0 + + def get_benefits(self): + return ["Просмотр книг"] + + def get_name(self): + return "Базовая" + + +class SilverLevel(Account): + def __init__(self, account): + self.account = account + + def get_discount(self): + return self.account.get_discount() + 5 + + def get_benefits(self): + benefits = self.account.get_benefits() + benefits.append("Скидка 5%") + benefits.append("Бесплатная доставка") + return benefits + + def get_name(self): + return f"{self.account.get_name()} + Серебряный" + + +class GoldLevel(Account): + def __init__(self, account): + self.account = account + + def get_discount(self): + return self.account.get_discount() + 10 + + def get_benefits(self): + benefits = self.account.get_benefits() + benefits.append("Скидка 10%") + benefits.append("Бесплатная доставка за 1 час") + benefits.append("Доступ к эксклюзивным книгам") + benefits.append("Приоритетная поддержка") + return benefits + + def get_name(self): + return f"{self.account.get_name()} + Золотой" + + +def show_account_info(account): + print(f"\n=== {account.get_name()} ===") + print(f"Скидка: {account.get_discount()}%") + print("Возможности:") + for benefit in account.get_benefits(): + print(f" - {benefit}") + + +if __name__ == "__main__": + BASE = BaseAccount() + show_account_info(BASE) + SILVER = SilverLevel(BASE) + show_account_info(SILVER) + GOLD = GoldLevel(SILVER) + show_account_info(GOLD) + + print("\n=== Покупатель заказал книгу ===") + BOOK_PRICE = 1000 + FINAL_PRICE = BOOK_PRICE - (BOOK_PRICE * GOLD.get_discount() / 100) + print(f"Цена книги: {BOOK_PRICE} руб.") + print(f"Скидка: {GOLD.get_discount()}%") + print(f"Итого: {FINAL_PRICE} руб.") diff --git a/reports/Tsiutskou/3/src/3.py b/reports/Tsiutskou/3/src/3.py new file mode 100644 index 00000000..a34a361b --- /dev/null +++ b/reports/Tsiutskou/3/src/3.py @@ -0,0 +1,110 @@ +class State: + def __init__(self, atm_object): + self.atm = atm_object + + +class WaitState(State): + def insert_card(self): + print("Карта вставлена. Введите PIN") + self.atm.state = self.atm.auth + + def enter_pin(self, _pin): + print("Сначала вставьте карту") + + def withdraw(self, _amount): + print("Сначала вставьте карту") + + def end(self): + print("Нет сессии") + + +class AuthState(State): + def insert_card(self): + print("Карта уже есть") + + def enter_pin(self, pin): + if pin == "1234": + print("PIN верен") + self.atm.state = self.atm.oper + else: + print("PIN неверен") + self.atm.state = self.atm.wait + + def withdraw(self, _amount): + print("Сначала введите PIN") + + def end(self): + print("Сессия завершена") + self.atm.state = self.atm.wait + + +class OperState(State): + def insert_card(self): + print("Карта уже есть") + + def enter_pin(self, _pin): + print("PIN уже введен") + + def withdraw(self, amount): + if amount > self.atm.cash: + print("Нет денег в банкомате") + elif amount > 10000: + print("Лимит 10000 руб") + else: + self.atm.cash -= amount + print(f"Выдано {amount} руб. Остаток: {self.atm.cash}") + + print("Заберите карту") + self.atm.state = self.atm.wait + + def end(self): + print("Заберите карту") + self.atm.state = self.atm.wait + + +class BlockState(State): + def insert_card(self): + print("Банкомат заблокирован") + + def enter_pin(self, _pin): + print("Банкомат заблокирован") + + def withdraw(self, _amount): + print("Банкомат заблокирован") + + def end(self): + print("Банкомат заблокирован") + + +class ATM: + def __init__(self, cash): + self.cash = cash + self.wait = WaitState(self) + self.auth = AuthState(self) + self.oper = OperState(self) + self.block = BlockState(self) + self.state = self.wait + + def insert_card(self): + self.state.insert_card() + + def enter_pin(self, pin): + self.state.enter_pin(pin) + + def withdraw(self, amount): + self.state.withdraw(amount) + + def end(self): + self.state.end() + + +if __name__ == "__main__": + ATM_MACHINE = ATM(50000) + ATM_MACHINE.insert_card() + ATM_MACHINE.enter_pin("1111") + ATM_MACHINE.insert_card() + ATM_MACHINE.enter_pin("1234") + ATM_MACHINE.withdraw(15000) + ATM_MACHINE.insert_card() + ATM_MACHINE.enter_pin("1234") + ATM_MACHINE.withdraw(5000)