Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions task_1_lesson8.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Задание №1
# Реализовать класс «Дата», функция-конструктор которого должна принимать дату в виде
# строки формата «день-месяц-год». В рамках класса реализовать два метода. Первый, с
# декоратором @classmethod. Он должен извлекать число, месяц, год и преобразовывать их тип
# к типу «Число». Второй, с декоратором @staticmethod, должен проводить валидацию числа,
# месяца и года (например, месяц — от 1 до 12). Проверить работу полученной структуры на
# реальных данных.

class Date:
def __init__(self, day=0, month=0, year=0):
self.day = day
self.month = month
self.year = year

@classmethod
def number_from_string(cls, string_date):
day, month, year = map(int, string_date.split('-'))
print(string_date)
return day, month, year

@staticmethod
def valid_date(string_date):
day, month, year = map(int, string_date.split('-'))
print(string_date)
if 0 < day <= 31 and 0 < month <= 12 and year <= 2021:
return day, month, year
else:
print('Дата введена не верно!')


d1 = '12-04-1961'
d2 = '17-05-2000'
d3 = '20-13-2021'
print(Date.number_from_string(d1))
print()
print(Date.valid_date(d2))
print()
print(Date.valid_date(d3))
22 changes: 22 additions & 0 deletions task_2_lesson8.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Задание №2
# Создайте собственный класс-исключение, обрабатывающий ситуацию деления на ноль.
# Проверьте его работу на данных, вводимых пользователем. При вводе нуля в качестве
# делителя программа должна корректно обработать эту ситуацию и не завершиться с ошибкой.

class DivisionZero(Exception):
def __init__(self, text):
self.text = text


try:
divisible = float(input('Введите делимое число: '))
divisor = float(input('Введите делитель: '))
if divisor == 0:
raise DivisionZero('Вы ввели ноль, деление на ноль невозможно!')
except ValueError:
print('Вы ввели не число')
except DivisionZero as err:
print(err)
else:
print(f'Результат деления равен: {round((divisible / divisor), 2)}')
print('Программа завершена')
36 changes: 36 additions & 0 deletions task_3_lesson8.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Задание №3
# Создайте собственный класс-исключение, который должен проверять содержимое списка на
# наличие только чисел. Проверить работу исключения на реальном примере. Запрашивать у
# пользователя данные и заполнять список необходимо только числами. Класс-исключение
# должен контролировать типы данных элементов списка.
# Примечание: длина списка не фиксирована. Элементы запрашиваются бесконечно, пока
# пользователь сам не остановит работу скрипта, введя, например, команду «stop». При этом
# скрипт завершается, сформированный список с числами выводится на экран.
# Подсказка: для этого задания примем, что пользователь может вводить только числа и строки.
# Во время ввода пользователем очередного элемента необходимо реализовать проверку типа
# элемента. Вносить его в список, только если введено число. Класс-исключение должен не
# позволить пользователю ввести текст (не число) и отобразить соответствующее сообщение.
# При этом работа скрипта не должна завершаться.

class NotNumber(Exception):
def __init__(self, text):
self.text = text


my_ls = []
while True:
try:
el_my_ls = input('Введите число для следующего элемента списка или "stop" для выхода: ')
if el_my_ls == "stop":
break
else:
try:
el_my_ls = int(el_my_ls)
except ValueError:
raise NotNumber('Вы ввели не число!')
my_ls.append(el_my_ls)
except NotNumber as err:
print(err)
print()
print(f'Введенный список элементов: {my_ls}')
print('Программа завершена')
84 changes: 84 additions & 0 deletions task_4_lesson8.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Задание №4
# Начните работу над проектом «Склад оргтехники». Создайте класс, описывающий склад. А
# также класс «Оргтехника», который будет базовым для классов-наследников. Эти классы —
# конкретные типы оргтехники (принтер, сканер, ксерокс). В базовом классе определите
# параметры, общие для приведённых типов. В классах-наследниках реализуйте параметры,
# уникальные для каждого типа оргтехники.

class Warehouse:
def __init__(self):
self.nomenclature = []

# Поступление на склад товара
def entrance(self, product):
self.nomenclature.append(product)

# Убытие товара со склада
def departure(self, product):
self.nomenclature.remove(product)

# Остаток товара на складе
def balance(self):
return self.nomenclature


class OfficeEquipment:
def __init__(self, manufacturer, model, color):
self.manufacturer = manufacturer
self.model = model
self.color = color


class Printer(OfficeEquipment):
def __init__(self, manufacturer, model, color, printing_technology):
super().__init__(manufacturer, model, color)
self.printing_technology = printing_technology
self.type_equipment = 'принтер'

def product_card(self):
card = f'{self.type_equipment} {self.manufacturer} {self.model} {self.color} {self.printing_technology}'
return card


class Scanner(OfficeEquipment):
def __init__(self, manufacturer, model, color, permission):
super().__init__(manufacturer, model, color)
self.permission = permission
self.type_equipment = 'сканер'

def product_card(self):
card = f'{self.type_equipment} {self.manufacturer} {self.model} {self.color} {self.permission}'
return card


class CopyMachine(OfficeEquipment):
def __init__(self, manufacturer, model, color, permission):
super().__init__(manufacturer, model, color)
self.permission = permission
self.type_equipment = 'ксерокс'

def product_card(self):
card = f'{self.type_equipment} {self.manufacturer} {self.model} {self.color} {self.permission}'
return card


# Создаем оргтехнику
pr_1 = Printer('Epson', 'TX659', 'серый', 'струйный')
print(pr_1.product_card())
sc_1 = Scanner('Epson', 'EX897', 'черный', 'dpi 600x1200')
print(sc_1.product_card())
cm_1 = CopyMachine('Xerox', 'X7856S', 'белый', 'dpi 1200x1200')
print(cm_1.product_card())

# Создаем склад и перемещаем на него оргтехнику
wh = Warehouse()
wh.entrance(pr_1.product_card())
wh.entrance(sc_1.product_card())
wh.entrance(cm_1.product_card())

# Смотрим остаток товара
print(f'Остаток товара на складе {wh.balance()}')

# Перемещаем товар со склада
wh.departure(sc_1.product_card())
print(f'Остаток товара на складе {wh.balance()}')
99 changes: 99 additions & 0 deletions task_5_lesson8.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Задание №5
# Продолжить работу над первым заданием. Разработайте методы, которые отвечают за приём
# оргтехники на склад и передачу в определённое подразделение компании. Для хранения
# данных о наименовании и количестве единиц оргтехники, а также других данных, можно
# использовать любую подходящую структуру (например, словарь).

class Warehouse:
def __init__(self):
self.nomenclature = {}
self.nomenclature_b = {}

# Поступление на склад товара
def entrance(self, product, quantity, price):
self.nomenclature[product] = [quantity, price]

# Убытие товара со склада
def departure(self, product):
del self.nomenclature[product]

# Перемещение товара в подразделение "B"
def moving(self, product):
self.nomenclature_b[product] = self.nomenclature[product]
del self.nomenclature[product]

# Остаток товара на складе "A"
def balance(self):
return self.nomenclature

# Остаток товара в подразделении "B" склада "A"
def balance_b(self):
return self.nomenclature_b


class OfficeEquipment:
def __init__(self, manufacturer, model, color):
self.manufacturer = manufacturer
self.model = model
self.color = color


class Printer(OfficeEquipment):
def __init__(self, manufacturer, model, color, printing_technology):
super().__init__(manufacturer, model, color)
self.printing_technology = printing_technology
self.type_equipment = 'принтер'

def product_card(self):
card = f'{self.type_equipment} {self.manufacturer} {self.model} {self.color} {self.printing_technology}'
return card


class Scanner(OfficeEquipment):
def __init__(self, manufacturer, model, color, permission):
super().__init__(manufacturer, model, color)
self.permission = permission
self.type_equipment = 'сканер'

def product_card(self):
card = f'{self.type_equipment} {self.manufacturer} {self.model} {self.color} {self.permission}'
return card


class CopyMachine(OfficeEquipment):
def __init__(self, manufacturer, model, color, permission):
super().__init__(manufacturer, model, color)
self.permission = permission
self.type_equipment = 'ксерокс'

def product_card(self):
card = f'{self.type_equipment} {self.manufacturer} {self.model} {self.color} {self.permission}'
return card


# Создаем оргтехнику
pr_1 = Printer('Epson', 'TX659', 'серый', 'струйный')
print(pr_1.product_card())
sc_1 = Scanner('Epson', 'EX897', 'черный', 'dpi 600x1200')
print(sc_1.product_card())
cm_1 = CopyMachine('Xerox', 'X7856S', 'белый', 'dpi 1200x1200')
print(cm_1.product_card())

# Создаем склад и перемещаем на него оргтехнику
wh_a = Warehouse()
wh_a.entrance(pr_1.product_card(), 15, 8500)
wh_a.entrance(sc_1.product_card(), 5, 4200)
wh_a.entrance(cm_1.product_card(), 10, 15000)

# Смотрим остаток товара
print(f'Остаток товара на складе "A": {wh_a.balance()}')

# Расход товара со склада "A"
wh_a.departure(sc_1.product_card())
print(f'Остаток товара на складе "A": {wh_a.balance()}')

# Перемещение товара со склада "A" в подразделение "B"
wh_a.moving(cm_1.product_card())
print(f'Остаток товара на складе "A": {wh_a.balance()}')
print(f'Остаток товара в подразделении "B" склада "A": {wh_a.balance_b()}')
print('Программа завершена')
Loading