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
32 changes: 32 additions & 0 deletions 08_OOP/Task_01.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
'''
Реализовать класс «Дата», функция-конструктор которого должна принимать дату в виде строки формата «день-месяц-год».
В рамках класса реализовать два метода.
Первый, с декоратором @classmethod, должен извлекать число, месяц, год и преобразовывать их тип к типу «Число».
Второй, с декоратором @staticmethod, должен проводить валидацию числа, месяца и года (например, месяц — от 1 до 12).
Проверить работу полученной структуры на реальных данных.
'''

class Data:

def __init__(self, datatata: str):
self.datatata = datatata

def data(self):
return list(map(int, self.data_int(self.datatata)))

@staticmethod
def data_int(some_data: str):
return (some_data.split('-'))





my_data = Data('23-05-89')
print(my_data.data())






24 changes: 24 additions & 0 deletions 08_OOP/Task_02.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
'''
Создайте собственный класс-исключение, обрабатывающий ситуацию деления на нуль.
Проверьте его работу на данных, вводимых пользователем.
При вводе пользователем нуля в качестве делителя программа должна корректно обработать эту ситуацию и
не завершиться с ошибкой.
'''

class DivZero(Exception):

def __init__(self, txt):
self.txt = txt


def a(a,b):
if b == 0:
raise DivZero('Ошибка. Деление на ноль')
else:
return print(a / b)


try:
a(1, 0)
except Exception as e:
print(e)
47 changes: 47 additions & 0 deletions 08_OOP/Task_03.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
'''
Создайте собственный класс-исключение, который должен проверять содержимое списка на наличие только чисел.
Проверить работу исключения на реальном примере. Необходимо запрашивать у пользователя данные и заполнять список.
Класс-исключение должен контролировать типы данных элементов списка.

Примечание: длина списка не фиксирована. Элементы запрашиваются бесконечно, пока пользователь сам не остановит
работу скрипта, введя, например, команду “stop”. При этом скрипт завершается, сформированный список выводится на экран.

Подсказка: для данного задания примем, что пользователь может вводить только числа и строки. При вводе пользователем
очередного элемента необходимо реализовать проверку типа элемента и вносить его в список, только если введено число.
Класс-исключение должен не позволить пользователю ввести текст (не число) и отобразить соответствующее сообщение.
При этом работа скрипта не должна завершаться.
'''

class ErrorIntList(Exception):

def __init__(self, text):
self.text = text


class MyList:

def input_list(self):
'''
Ввод значений и проверка принадлежности значения к типу "число"
:return: список чисел
'''
result = []
while True:
try:
num = input('Введите число (q для выхода): ')
if num == 'q':
print('Программа завершена')
break
elif num.isdigit() == True:
result.append(num)
else:
raise ErrorIntList('Ошибка. Введите число!')
except Exception as e:
print(e)
print(result)
print(result)


some_list = MyList() # создаю экземпляр класса
some_list.input_list() # проверяю работу метода

115 changes: 115 additions & 0 deletions 08_OOP/Task_04-06.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
'''
Начните работу над проектом «Склад оргтехники». Создайте класс, описывающий склад.
А также класс «Оргтехника», который будет базовым для классов-наследников.
Эти классы — конкретные типы оргтехники (принтер, сканер, ксерокс).
В базовом классе определить параметры, общие для приведенных типов.
В классах-наследниках реализовать параметры, уникальные для каждого типа оргтехники.

Продолжить работу над первым заданием. Разработать методы, отвечающие за приём оргтехники на склад и
передачу в определенное подразделение компании. Для хранения данных о наименовании и количестве единиц оргтехники,
а также других данных, можно использовать любую подходящую структуру, например словарь.

Продолжить работу над вторым заданием. Реализуйте механизм валидации вводимых пользователем данных.
Например, для указания количества принтеров, отправленных на склад, нельзя использовать строковый тип данных.
'''


class Storage:

display_list = []
key_board_list = []
mouse_list = []

def __init__(self, cells):
self.cells = cells


@staticmethod
def cell_busy(*args): # метод подсчета занятых ячеек
return sum([len(el) for el in args])


def info(self):
print(f'Склад всего содержит {self.cells} ячеек')
print(f'Занято ячеек ')



class Thing:


def __init__(self, prise: int, weight: int, size: str, nums: int):
self.nums = nums
self.size = size
self.weight = weight
self.prise = prise


def __str__(self):
return f'{self.__dict__}'


def move(self):
self.__dict__['place'] = input('Введите место, где находится предмет: ')


class Display(Thing):

def __init__(self, diagonal: int, prise: int, weight: int, size: str, nums: int):
super().__init__(prise, weight, size, nums)
self.diagonal = diagonal

@classmethod
def new(cls):
print('Введите информацию о мониторе: diagonal: дюймы, prise: рубли, weight: кг, size: д-ш-в, nums: шт')
description_thing = [input() for _ in range(5)]
return Storage.display_list.append(cls(*description_thing))




class KeyBoard(Thing):

def __init__(self, type_k: str ,prise: int, weight: int, size: str, nums: int):
super().__init__(prise, weight, size, nums)
self.type_k = type_k


@classmethod
def new(cls):
print('Введите информацию о клавиатуре: type_k: тип, prise: руб, weight: кг, size: д-ш-в, nums: шт')
description_thing = [input() for _ in range(5)]
return Storage.key_board_list.append(cls(*description_thing))



class Mouse(Thing):

def __init__(self, type_m: str, prise: int, weight: int, size: str, nums: int):
super().__init__(prise, weight, size, nums)
self.type_m = type_m

@classmethod
def new(cls):
print('Введите информацию о мышке: type_m: тип, prise: руб, weight: кг, size: д-ш-в, nums: шт')
description_thing = [input() for _ in range(5)]
return Storage.mouse_list.append(cls(*description_thing))






# Добавление новых товаров
a = Display.new()
b = KeyBoard.new()
c = Mouse.new()

# Вывод на экран (для проверки)
print(Storage.display_list[0])
print(Storage.key_board_list[0])
print(Storage.mouse_list[0])

# Перемещение товара на новое место
Storage.display_list[0].move()
print(Storage.display_list[0])
70 changes: 70 additions & 0 deletions 08_OOP/Task_04.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
'''
Начните работу над проектом «Склад оргтехники». Создайте класс, описывающий склад.
А также класс «Оргтехника», который будет базовым для классов-наследников.
Эти классы — конкретные типы оргтехники (принтер, сканер, ксерокс).
В базовом классе определить параметры, общие для приведенных типов.
В классах-наследниках реализовать параметры, уникальные для каждого типа оргтехники.
'''

class Storage:

def __init__(self, cells):
self.cells = cells


@staticmethod
def cell_busy(*args): # метод подсчета занятых ячеек
return sum([el for el in args])



def info(self):
print(f'Склад всего содержит {self.cells} ячеек')
print(f'Занято ячеек ')



class Thing:

def __init__(self, prise: int, weight: int, size: list, nums: int):
self.nums = nums
self.size = size
self.weight = weight
self.prise = prise


class Display(Thing):

def __init__(self, diagonal: int, prise: int, weight: int, size: list, nums: int):
super().__init__(prise, weight, size, nums)
self.diagonal = diagonal


class KeyBoard(Thing):

def __init__(self, type_k: str ,prise: int, weight: int, size: list, nums: int):
super().__init__(prise, weight, size, nums)
self.type_k = type_k


class Mouse(Thing):

def __init__(self, type_m: str, prise: int, weight: int, size: list, nums: int):
super().__init__(prise, weight, size, nums)
self.type_m = type_m


storage_01 = Storage(150)
storage_01.info()

mouse_01 = Mouse('оптическая', 1500, 150, [6, 5, 4], 13)
key_board_01 = KeyBoard('оптическая', 2500, 700, [36, 18, 2], 15)
display_01 = Display(37, 2500, 700, [36, 18, 2], 56)


a = storage_01.cell_busy(mouse_01.nums, key_board_01.nums,display_01.nums)
print(a)




Loading