Skip to content
Open
4 changes: 3 additions & 1 deletion .idea/pythoncourse.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

42 changes: 42 additions & 0 deletions Lesson 8/Task 1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# 1. Реализовать класс «Дата», функция-конструктор которого должна принимать дату в виде
# строки формата «день-месяц-год». В рамках класса реализовать два метода. Первый, с
# декоратором @classmethod. Он должен извлекать число, месяц, год и преобразовывать их тип
# к типу «Число». Второй, с декоратором @staticmethod, должен проводить валидацию числа,
# месяца и года (например, месяц — от 1 до 12). Проверить работу полученной структуры на
# реальных данных.

class Date:
_day = 0
_month = 0
_year = 0

def __init__(self, date_str):
self.extract_date(date_str)

@classmethod
def extract_date(cls, date_str=''):
date_list = list(map(int, date_str.split('-')))
if cls.validate(date_list[1], date_list[2]):
cls._day = date_list[0]
cls._month = date_list[1]
cls._year = date_list[2]

@staticmethod
def validate(month, year):
if 1 <= month <= 12:
if 1900 <= year <= 3000:
return True
else:
raise TypeError('Год не попадает в промежуток от 1900 до 3000')
else:
raise TypeError('Месяц не попадает в промежуток от 1 до 12')

def __str__(self):
return f'{self._day}/{self._month}/{self._year}'


date_str = '01-13-2000'

my_date = Date(date_str)

print(my_date)
23 changes: 23 additions & 0 deletions Lesson 8/Task_2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# 2. Создайте собственный класс-исключение, обрабатывающий ситуацию деления на ноль.
# Проверьте его работу на данных, вводимых пользователем. При вводе нуля в качестве
# делителя программа должна корректно обработать эту ситуацию и не завершиться с ошибкой.

class MyError(Exception):
def __init__(self, txt):
self.txt = txt

def __str__(self):
return self.txt


input_data = input("Введите выражение: ")

input_data = list(map(float, input_data.split('/')))
try:
if input_data[1] == 0:
raise MyError('На 0 делить нельзя')
result = input_data[0] / input_data[1]
print(result)
except MyError as err:
print(err)

37 changes: 37 additions & 0 deletions Lesson 8/Task_3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# 3. Создайте собственный класс-исключение, который должен проверять содержимое списка на
# наличие только чисел. Проверить работу исключения на реальном примере. Запрашивать у
# пользователя данные и заполнять список необходимо только числами. Класс-исключение
# должен контролировать типы данных элементов списка.
# Примечание: длина списка не фиксирована. Элементы запрашиваются бесконечно, пока
# пользователь сам не остановит работу скрипта, введя, например, команду «stop». При этом
# скрипт завершается, сформированный список с числами выводится на экран.
# Подсказка: для этого задания примем, что пользователь может вводить только числа и строки.
# Во время ввода пользователем очередного элемента необходимо реализовать проверку типа
# элемента. Вносить его в список, только если введено число. Класс-исключение должен не
# позволить пользователю ввести текст (не число) и отобразить соответствующее сообщение.
# При этом работа скрипта не должна завершаться.

class ValidString(Exception):

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

def __str__(self):
return self.txt

user_list = []

while True:
user_string = input('Введите число: ')
if user_string == '':
print('Ввод окончен')
break
try:
if not user_string.replace('.', '').isdigit():
raise ValidString('Вы ввели не число')
user_list.append(int(user_string) if '.' not in user_string else float(user_string))
except ValidString as err:
print(err)

print(user_list)

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

class IsExist(Exception):

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

def __str__(self):
return self.txt

class Store:
def __init__(self):
self.equipments = {}

def add_equipment(self, place, equipment):
if place in self.equipments.keys() and self.equipments[place] == equipment:
print('Оборудование уже находится на этом месте')
return False
elif self.get_values(self.equipments, equipment):
print(f'Это оборудование уже лежит на складе. Место {self.get_values(self.equipments, equipment)}')
return False
elif place in self.equipments.keys() and self.equipments[place] != equipment:
print(f'На месте {place} лежит {self.equipments[place]}')
return False
else:
self.equipments[place] = equipment
print('Оборудование добавлено на склад')
return True

def __str__(self):
for i, el in self.equipments.items():
print(f'{i}: {el}')
return ''

def remove_equipment(self, equipment):
if self.get_values(self.equipments, equipment):
self.equipments.pop(self.get_values(self.equipments, equipment))
print(f'Оборудование {equipment} убрано со склада')
return True
else:
print('Такого оборудования нет')
return False

def get_equipment(self, place):
try:
if place not in self.equipments.keys():
raise IsExist('Такого места не существует')
return self.equipments[place]
except IsExist as err:
return err

@staticmethod
def get_values(my_dict={}, element=''):
for i, el in my_dict.items():
if element == el:
return i
return False


class Office_Equipments:

def __init__(self, type_equipment, cost_equipment):
self.type_equipment = type_equipment
self.cost_equipment = cost_equipment


class Printers(Office_Equipments):

def __init__(self, cost, name):
super().__init__('Принтер', cost)
self.name = name

def __str__(self):
return (f'{self.name} {self.type_equipment} {self.cost_equipment}')


class Scanners(Office_Equipments):

def __init__(self, cost, name):
super().__init__('Сканнер', cost)
self.name = name

def __str__(self):
return (f'{self.name} {self.type_equipment} {self.cost_equipment}')


class CopyMachines(Office_Equipments):

def __init__(self, cost, name):
super().__init__('МФУ', cost)
self.name = name

def __str__(self):
return (f'{self.name} {self.type_equipment} {self.cost_equipment}')

my_printer = Printers(10000, 'Для бухгалтерии')
my_scanner = Scanners(15000, 'Для рекламщиков')
my_copymachine = CopyMachines(20000, 'В цех')
my_printer2 = Printers(10000, 'Для ИТ')

print('Выводим оборудование')
print(my_printer)
print(my_scanner)
print(my_copymachine)

my_store = Store()

my_store.add_equipment(1, my_printer)
my_store.add_equipment(2, my_scanner)
my_store.add_equipment(3, my_copymachine)
my_store.add_equipment(1, my_printer2)
print('Выводим склад после добавления')
print(my_store)


my_store.remove_equipment(my_scanner)

print('Выводим склад после удаления')
print(my_store)

print(my_store.get_equipment(0))
38 changes: 38 additions & 0 deletions Lesson 8/Task_7.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# 7. Реализовать проект «Операции с комплексными числами». Создайте класс «Комплексное
# число». Реализуйте перегрузку методов сложения и умножения комплексных чисел. Проверьте
# работу проекта. Для этого создаёте экземпляры класса (комплексные числа), выполните
# сложение и умножение созданных экземпляров. Проверьте корректность полученного
# результата.

class Complex:

def __init__(self, a, b):
self.a = int(a)
self.b = int(b)

def __str__(self):
return f'{self.a}+{self.b}i' if self.b >= 0 else f'{self.a}{self.b}i'

def __add__(self, other):
a = self.a + other.a
b = self.b + other.b
return Complex(a, b)

def __mul__(self, other):
a = self.a * other.a - self.b * other.b
b = self.b * other.a + self.a * other.b
return Complex(a, b)


my_first_digit = Complex(30, -2)
my_second_digit = Complex(6, 10)

print(my_first_digit)
print(my_second_digit)

my_third_digit = my_first_digit + my_second_digit

print(my_third_digit)

my_fourth_digit = my_first_digit * my_second_digit
print(my_fourth_digit)