From f8c6554c4ae31c44b80850469321f484bdcc5b66 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Sat, 10 Jul 2021 21:16:37 +0300 Subject: [PATCH 1/7] Update and rename README.md to hw8.py --- README.md | 1 - hw8.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) delete mode 100644 README.md create mode 100644 hw8.py diff --git a/README.md b/README.md deleted file mode 100644 index fdc793e..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -python diff --git a/hw8.py b/hw8.py new file mode 100644 index 0000000..c7e1a34 --- /dev/null +++ b/hw8.py @@ -0,0 +1,36 @@ +# 1. Реализовать класс «Дата», функция-конструктор которого должна принимать +# дату в виде строки формата «день-месяц-год». В рамках класса реализовать два метода. +# Первый, с декоратором @classmethod, должен извлекать число, месяц, +# год и преобразовывать их тип к типу «Число». Второй, с декоратором @staticmethod, +# должен проводить валидацию числа, месяца и года (например, месяц — от 1 до 12). +# Проверить работу полученной структуры на реальных данных. + + +# 2. Создайте собственный класс-исключение, обрабатывающий ситуацию деления на нуль. +# Проверьте его работу на данных, вводимых пользователем. При вводе пользователем нуля +# в качестве делителя программа должна корректно обработать эту ситуацию +# и не завершиться с ошибкой. + + + +# # 3. Создайте собственный класс-исключение, который должен проверять содержимое +# # списка на наличие только чисел. Проверить работу исключения на реальном примере. +# # Необходимо запрашивать у пользователя данные и заполнять список. +# # Класс-исключение должен контролировать типы данных элементов списка. +# +# Примечание: длина списка не фиксирована. Элементы запрашиваются бесконечно, +# пока пользователь сам не остановит работу скрипта, введя, например, команду +# “stop”. При этом скрипт завершается, сформированный список выводится на экран. +# Подсказка: для данного задания примем, что пользователь может вводить только +# числа и строки. При вводе пользователем очередного элемента необходимо +# реализовать проверку типа элемента и вносить его в список, только если введено число. +# Класс-исключение должен не позволить пользователю ввести текст (не число) +# и отобразить соответствующее сообщение. +# При этом работа скрипта не должна завершаться. + + +# 4. Начните работу над проектом «Склад оргтехники». Создайте класс, +# описывающий склад. А также класс «Оргтехника», который будет базовым для +# классов-наследников. Эти классы — конкретные типы оргтехники (принтер, сканер, ксерокс). +# В базовом классе определить параметры, общие для приведенных типов. +# В классах-наследниках реализовать параметры, уникальные для каждого типа оргтехники. From 1622b6da4a713cd5da4b4e9e4b0682d302efc521 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Sun, 11 Jul 2021 17:42:05 +0300 Subject: [PATCH 2/7] Update hw8.py --- hw8.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/hw8.py b/hw8.py index c7e1a34..9894230 100644 --- a/hw8.py +++ b/hw8.py @@ -5,6 +5,41 @@ # должен проводить валидацию числа, месяца и года (например, месяц — от 1 до 12). # Проверить работу полученной структуры на реальных данных. +# 1. Реализовать класс «Дата», функция-конструктор которого должна принимать +# дату в виде строки формата «день-месяц-год». В рамках класса реализовать два метода. +# Первый, с декоратором @classmethod, должен извлекать число, месяц, +# год и преобразовывать их тип к типу «Число». Второй, с декоратором @staticmethod, +# должен проводить валидацию числа, месяца и года (например, месяц — от 1 до 12). +# Проверить работу полученной структуры на реальных данных. + +class Date(object): + + def __init__(self, day=0, month=0, year=0): + self.day = day + self.month = month + self.year = year + + @classmethod + def string(cls, string_date): + day, month, year = map(int, string_date.split('-')) + date1 = cls(day, month, year) + print(*string_date) + return date1 + + @staticmethod + def valid_date(string_date): + day, month, year = map(int, string_date.split('-')) + day = int(input()) + if day <= 31 and day != 0 and month <= 12 and month != 0 and year <= 3999: + print(*string_date) + return day, month, year + else: + print('Error') + + +d = '11-07-2021' +date = Date.string(d) +second_date = Date.valid_date(d) # 2. Создайте собственный класс-исключение, обрабатывающий ситуацию деления на нуль. # Проверьте его работу на данных, вводимых пользователем. При вводе пользователем нуля From c8d4b57089f3f57b8affd1620c6c29696ea10915 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Sun, 11 Jul 2021 17:45:53 +0300 Subject: [PATCH 3/7] Update hw8.py --- hw8.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/hw8.py b/hw8.py index 9894230..0fc78cf 100644 --- a/hw8.py +++ b/hw8.py @@ -5,13 +5,6 @@ # должен проводить валидацию числа, месяца и года (например, месяц — от 1 до 12). # Проверить работу полученной структуры на реальных данных. -# 1. Реализовать класс «Дата», функция-конструктор которого должна принимать -# дату в виде строки формата «день-месяц-год». В рамках класса реализовать два метода. -# Первый, с декоратором @classmethod, должен извлекать число, месяц, -# год и преобразовывать их тип к типу «Число». Второй, с декоратором @staticmethod, -# должен проводить валидацию числа, месяца и года (например, месяц — от 1 до 12). -# Проверить работу полученной структуры на реальных данных. - class Date(object): def __init__(self, day=0, month=0, year=0): From 07c3275e8e928c0046f4127935d31562e9b0f1ed Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Sun, 11 Jul 2021 18:11:40 +0300 Subject: [PATCH 4/7] Update hw8.py --- hw8.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hw8.py b/hw8.py index 0fc78cf..b2134d5 100644 --- a/hw8.py +++ b/hw8.py @@ -39,6 +39,21 @@ def valid_date(string_date): # в качестве делителя программа должна корректно обработать эту ситуацию # и не завершиться с ошибкой. +class Exception_D(Exception): + + def division_by_zero(self): + a = int(input('Input first number: ')) + b = int(input('Input second number: ')) + try: + res = round(a / b, 1) + except ZeroDivisionError: + print(f"{a} / {b} - division by 0 is not possible\n") + else: + print(f"{a} / {b} = {res} \n") + + +n = Exception_D() +n.division_by_zero() # # 3. Создайте собственный класс-исключение, который должен проверять содержимое From 1cfb514cf880551c7065346707e3acf656ba708f Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Sun, 11 Jul 2021 18:28:08 +0300 Subject: [PATCH 5/7] Update hw8.py --- hw8.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/hw8.py b/hw8.py index b2134d5..01502ed 100644 --- a/hw8.py +++ b/hw8.py @@ -42,14 +42,15 @@ def valid_date(string_date): class Exception_D(Exception): def division_by_zero(self): - a = int(input('Input first number: ')) - b = int(input('Input second number: ')) - try: - res = round(a / b, 1) - except ZeroDivisionError: - print(f"{a} / {b} - division by 0 is not possible\n") - else: - print(f"{a} / {b} = {res} \n") + while True: + a = int(input('Input first number: ')) + b = int(input('Input second number: ')) + try: + res = round(a / b, 1) + except ZeroDivisionError: + print(f"{a} / {b} - division by 0 is not possible\n") + else: + print(f"{a} / {b} = {res} \n") n = Exception_D() From ead17170d5d3bd21ed347ca13996b7edd7f770fb Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Sun, 11 Jul 2021 19:30:06 +0300 Subject: [PATCH 6/7] Update hw8.py --- hw8.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/hw8.py b/hw8.py index 01502ed..e2caa4e 100644 --- a/hw8.py +++ b/hw8.py @@ -72,6 +72,28 @@ def division_by_zero(self): # и отобразить соответствующее сообщение. # При этом работа скрипта не должна завершаться. +class MyExcept: + def __init__(self, *args): + self.lst = [] + + def input_number(self): + print('Input the numbers through the "ENTER":') + while True: + try: + res = int(input()) + self.lst.append(res) + print(f'List - {self.lst}') + except ValueError: + print(f'Not a number') + stop = input(f'Continue? Y/N \n').upper() + if stop == 'Y': + print(n.input_number().upper()) + elif stop == 'N': + return f'END' + + +n = MyExcept() +print(n.input_number()) # 4. Начните работу над проектом «Склад оргтехники». Создайте класс, # описывающий склад. А также класс «Оргтехника», который будет базовым для From 706b3e7dce384d65c24c3bfc5f3769bd6236aa19 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Thu, 15 Jul 2021 18:41:37 +0300 Subject: [PATCH 7/7] Update hw8.py --- hw8.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/hw8.py b/hw8.py index e2caa4e..e697aac 100644 --- a/hw8.py +++ b/hw8.py @@ -100,3 +100,63 @@ def input_number(self): # классов-наследников. Эти классы — конкретные типы оргтехники (принтер, сканер, ксерокс). # В базовом классе определить параметры, общие для приведенных типов. # В классах-наследниках реализовать параметры, уникальные для каждого типа оргтехники. + + def __str__(self): + return "\tbrand: {} \tID: {}".format(self.brand, self.id) + + +class PC(OfficeEquipment): + amount_sc = 0 + + def __init__(self, brand, id, wifi): + super().__init__(brand, id) + self.wifi = wifi + PC.amount_sc += 1 + + @staticmethod + def name(): + return 'PC' + + def wifi(self): + return self.wifi + + def __str__(self): + return "\tbrand: {} \tID: {} \tWi-Fi: {}".format(self.brand, self.id, self.wifi) + + +class Projector(OfficeEquipment): + amount_x = 0 + + def __init__(self, brand, id, projector_wi_fi): + super().__init__(brand, id) + self.projector_wi_fi = projector_wi_fi + Projector.amount_x += 1 + + @staticmethod + def name(): + return 'Projector' + + def wi_fi_module(self): + return self.projector_wi_fi + + def __str__(self): + return "\tbrand: {} \tID: {} \tWi-Fi: {}".format(self.brand, self.id, self.projector_wi_fi) + + +p = Mfu('Canon', 'DX C5800') +p2 = Mfu('Canon', 'MF832Cdw') +print(p.name(), p.amount_pr, 'qty.') +print(p.__str__()) +print(p2.__str__()) + +s = PC('ASUS', 'GT15CK-RU018T', 'not') +s2 = PC('ASUS', 'GT15CK-RU018T', 'got') +s3 = PC('ASUS', 'GT15CK-RU018T', 'got') +print(s.name(), s.amount_sc, "qty.") +print(s.__str__()) +print(s2.__str__()) +print(s3.__str__()) + +x = Projector('Optoma', 'ZH406-W', 'got') +print(x.name(), x.amount_x, 'qty.') +print(x.__str__())