Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """Дз от 30.10.2024г."""
- #1)
- class MyFraction:
- def __init__(self, num, den):
- if num == 0 or den == 0:
- raise ValueError('Числитель и знаменатель не могут быть равны нулю')
- self.num = num
- self.den = den
- self._simplify()
- def _simplify(self):
- gcd = self._gcd(self.num, self.den)
- self.num //= gcd
- self.den //= gcd
- def _gcd(self, a, b):
- while b:
- a, b = b, a % b
- return a
- # Генерация дробей
- @staticmethod
- def generate(num_min, num_max, den_min, den_max):
- import random
- num = random.randint(num_min, num_max)
- den = random.randint(den_min, den_max)
- return MyFraction(num, den)
- # Строковое представление
- def __str__(self):
- return f'{self.num}/{self.den}'
- # Операции
- def __mul__(self, other):
- if isinstance(other, MyFraction):
- return MyFraction(self.num * other.num, self.den * other.den)
- elif isinstance(other, int):
- return MyFraction(self.num * other, self.den)
- else:
- raise TypeError('Можно умножать только на дробь или целое число')
- def __truediv__(self, other):
- if isinstance(other, MyFraction):
- return MyFraction(self.num * other.den, self.den * other.num)
- elif isinstance(other, int):
- return MyFraction(self.num, self.den * other)
- else:
- raise TypeError('Можно делить только на дробь или целое число')
- """Тестирование"""
- fraction1 = MyFraction.generate(1, 10, 1, 10)
- fraction2 = MyFraction.generate(1, 10, 1, 10)
- # Вывод дробей
- print(f'Дробь 1: {fraction1}')
- print(f'Дробь 2: {fraction2}')
- # Умножение дробей
- product1 = fraction1 * fraction2
- print(f'Умножение дробей: {product1}')
- # Деление дробей
- quotient1 = fraction1 / fraction2
- print(f'Деление дробей: {quotient1}')
- # Умножение на целое число
- product2 = fraction1 / 2
- print(f'Умножение на целое число: {product2}')
- # Деление на целое число
- quotient2 = fraction1 / 2
- print(f'Деление на целое число: {quotient2}')
- #2)
- from abc import ABC, abstractmethod
- class AbstractTovar(ABC):
- @abstractmethod
- def print_menu(self):
- pass
- class Tovar(AbstractTovar):
- def __init__(self, name, price):
- self.name = name
- self.price = price
- self.selected = False
- def print_menu(self):
- print(f'{self.name}: {self.price} руб.')
- def select(self):
- self.selected = True
- def unselect(self):
- self.selected = False
- def show_price_list(tovars):
- """Отображает прайс-лист товаров, разбивая их на страницы по 5 товаров."""
- page_size = 5
- total_pages = (len(tovars) + page_size - 1) // page_size
- for page in range(total_pages):
- print(f'\nСтраница {page + 1} из {total_pages}')
- for i in range(page * page_size, min((page + 1) * page_size, len(tovars))):
- tovars[i].print_menu()
- def select_tovar(tovars):
- """Позволяет пользователю выбрать товар по названию."""
- name = input('Введите название товара: ')
- for tovar in tovars:
- if tovar.name.lower() == name.lower():
- tovar.select()
- print(f'Товар {tovar.name} выбран.')
- return
- print(f'Товар {name} не найден.')
- def print_check(tovars):
- """Печатает чек с выбранными товарами."""
- total_sum = 0
- print("\nЧек:")
- for tovar in tovars:
- if tovar.selected:
- print(f'{tovar.name}: {tovar.price} руб.')
- total_sum += tovar.price
- print(f'Итого: {total_sum} руб.')
- def main():
- """Главная функция приложения."""
- tovars = [
- Tovar('Молоко', 60),
- Tovar('Хлеб', 35),
- Tovar('Яйца', 80),
- Tovar('Сыр', 200),
- Tovar('Масло', 150),
- Tovar('Сок', 100),
- Tovar('Печенье', 50),
- Tovar('Чай', 120),
- Tovar('Кофе', 180),
- Tovar('Сахар', 40)
- ]
- while True:
- print('\nМеню:')
- print('1. Показать прайс-лист')
- print('2. Выбрать товар')
- print('3. Напечатать чек')
- print('4. Выйти')
- try:
- choice = int(input('Введите номер действия: '))
- except ValueError:
- print('Неверный ввод. Пожалуйста, введите число.')
- continue
- if choice == 1:
- show_price_list(tovars)
- elif choice == 2:
- select_tovar(tovars)
- elif choice == 3:
- print_check(tovars)
- elif choice == 4:
- print('Выход из приложения.')
- break
- else:
- print('Неверный ввод. Пожалуйста, выберите номер действия из меню.')
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement