From 16d6e67b91bdd41c960f173ac6f3d53265088b83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 26 Jan 2023 10:37:50 +1100 Subject: [PATCH 01/58] Create Lesson_01.py Practical work 3 --- Lesson_01.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Lesson_01.py diff --git a/Lesson_01.py b/Lesson_01.py new file mode 100644 index 0000000..c30d88d --- /dev/null +++ b/Lesson_01.py @@ -0,0 +1,16 @@ +# 1. Реализовать функцию, принимающую два числа (позиционные аргументы) +# и выполняющую их деление. Числа запрашивать у пользователя, предусмотреть +# обработку ситуации деления на ноль. + +def div(x, y): + res: int + error: str = 'Вы ввели не корректные числа.' + if x > 0 and y >0: + res = x/y + return res + else: + return error +var_input_first = int(input('Введите первое число: ')) +var_input_second = int(input('Введите второе число: ')) + +print(div(var_input_first, var_input_second)) From 3a32f48480f2e060ce1f8851859f3332af8a4441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 26 Jan 2023 10:38:20 +1100 Subject: [PATCH 02/58] Create Lesson_02.py Practical work 3 --- Lesson_02.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Lesson_02.py diff --git a/Lesson_02.py b/Lesson_02.py new file mode 100644 index 0000000..64f6743 --- /dev/null +++ b/Lesson_02.py @@ -0,0 +1,18 @@ +# 2. Выполнить функцию, которая принимает несколько параметров, описывающих +# данные пользователя: имя, фамилия, год рождения, город проживания, email, +# телефон. Функция должна принимать параметры как именованные аргументы. +# Осуществить вывод данных о пользователе одной строкой. + +def person(name, sec_name, age, city, email, tel): + return f'Имя - {name}, фамилия - {sec_name}, год рождения - {age}, город проживания - {city}, ' \ + f'email - {email}, телефон {tel}' + + +name = input('Введите имя: ') +sec_name = input('Введите Фамилию: ') +age = input('Введите год рождения: ') +city = input('Введите город проживания: ') +email = input('Введите email:') +tel = input('Введите телефон: ') + +print(person(name, sec_name, age, city, email, tel)) From babb021d6cf60bee3e9a61136bad6952ae921338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 26 Jan 2023 10:38:47 +1100 Subject: [PATCH 03/58] Create Lesson_03.py Practical work 3 --- Lesson_03.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Lesson_03.py diff --git a/Lesson_03.py b/Lesson_03.py new file mode 100644 index 0000000..24d461c --- /dev/null +++ b/Lesson_03.py @@ -0,0 +1,20 @@ +# 3. Реализовать функцию my_func(), которая принимает три позиционных +# аргумента и возвращает сумму наибольших двух аргументов. + +def my_func(a, b, c): + sum: int + if a > b > c: + return a + b + elif a > c > b: + return a + c + elif b > c > a: + return b + c + elif c > b > a: + return c + b + + +a = int(input('Введите первое число: ')) +b = int(input('Введите второе число: ')) +c = int(input('Введите третье число: ')) + +print(my_func(a, b, c)) From 13f955601cc57dfb10c4f7fa28c33a3fb212d2a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 26 Jan 2023 10:39:19 +1100 Subject: [PATCH 04/58] Create Lesson_04.py Practical work 3 --- Lesson_04.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Lesson_04.py diff --git a/Lesson_04.py b/Lesson_04.py new file mode 100644 index 0000000..7807199 --- /dev/null +++ b/Lesson_04.py @@ -0,0 +1,25 @@ +# 4. Программа принимает действительное положительное число x и целое +# отрицательное число y. Выполните возведение числа x в степень y. +# Задание реализуйте в виде функции my_func(x, y). При решении задания +# нужно обойтись без встроенной функции возведения числа в степень. +# Подсказка: попробуйте решить задачу двумя способами. +# Первый — возведение в степень с помощью оператора **. +# Второй — более сложная реализация без оператора **, предусматривающая +# использование цикла. + +def my_func(x, y): + res = x ** y + return res +def my_func_cicle(x, y): + tmp = x + for i in range(1, y*(-1)): + tmp *= x + res = 1/tmp + return res + + +x = float(input('Введите действительное положительное число: ')) +y = int(input('Введите целое отрицательное число: ')) + +print(f'Ответ с использывание встроеной функции {my_func(x, y)}') +print(f'Ответ с использованием цикла {my_func_cicle(x, y)}') From cd586db758bc781471d77f2219ae5d010293cce6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 26 Jan 2023 10:39:47 +1100 Subject: [PATCH 05/58] Create Lesson_05.py Practical work 3 --- Lesson_05.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Lesson_05.py diff --git a/Lesson_05.py b/Lesson_05.py new file mode 100644 index 0000000..ae4e0be --- /dev/null +++ b/Lesson_05.py @@ -0,0 +1,23 @@ + 5. Программа запрашивает у пользователя строку чисел, разделённых пробелом. +# При нажатии Enter должна выводиться сумма чисел. Пользователь может +# продолжить ввод чисел, разделённых пробелом и снова нажать Enter. +# Сумма вновь введённых чисел будет добавляться к уже подсчитанной сумме. +# Но если вместо числа вводится специальный символ, выполнение программы +# завершается. Если специальный символ введён после нескольких чисел, +# то вначале нужно добавить сумму этих чисел к полученной ранее сумме и +# после этого завершить программу. + +def sum_input(s_input): + ls = list(map(int, s_input.split(' '))) + return sum(ls) + + +ex = False +res = 0 +while not ex: + user_input = input('Введите строку чисел раделенных пробелом(для выхода введите q): ') + if user_input == 'q': + ex = True + else: + res += sum_input(user_input) + print(res) From cac14250ba904f602d761f380abceeaa05205275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 26 Jan 2023 10:40:17 +1100 Subject: [PATCH 06/58] Create Lesson_06.py Practical work 3 --- Lesson_06.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Lesson_06.py diff --git a/Lesson_06.py b/Lesson_06.py new file mode 100644 index 0000000..1065470 --- /dev/null +++ b/Lesson_06.py @@ -0,0 +1,11 @@ +# 6. Реализовать функцию int_func(), принимающую слова из маленьких латинских +# букв и возвращающую их же, но с прописной первой буквой. +# Например, print(int_func(‘text’)) -> Text. + +def int_func(s): + return s.capitalize() + + +input_string = input('Введите слово латинскими буквами в нижнем регистре: ') + +print(int_func(input_string)) From 4124c0ef027c8862159e24f0261c8f2c769eeddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 26 Jan 2023 10:40:46 +1100 Subject: [PATCH 07/58] Create Lesson_07.py Practical work 3 --- Lesson_07.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Lesson_07.py diff --git a/Lesson_07.py b/Lesson_07.py new file mode 100644 index 0000000..60a010f --- /dev/null +++ b/Lesson_07.py @@ -0,0 +1,15 @@ +# 7. Продолжить работу над заданием. В программу должна попадать строка из слов, +# разделённых пробелом. Каждое слово состоит из латинских букв в нижнем регистре. +# Нужно сделать вывод исходной строки, но каждое слово должно начинаться с +# заглавной буквы. Используйте написанную ранее функцию int_func(). + +def int_func(s): + res = '' + ls = list(map(str, s.split(' '))) + for i in ls: + res += ' ' + i.capitalize() + return res + + +input_string = input('Введите слово латинскими буквами в нижнем регистре: ') +print(int_func(input_string)) From 98980b177bebf39aa201ab2f1e525f0aa9bdf156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 30 Jan 2023 15:27:30 +1100 Subject: [PATCH 08/58] Practical work 4 --- Lesson_01.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Lesson_01.py b/Lesson_01.py index c30d88d..2338350 100644 --- a/Lesson_01.py +++ b/Lesson_01.py @@ -1,16 +1,16 @@ -# 1. Реализовать функцию, принимающую два числа (позиционные аргументы) -# и выполняющую их деление. Числа запрашивать у пользователя, предусмотреть -# обработку ситуации деления на ноль. +# 1. Реализовать скрипт, в котором должна быть предусмотрена функция расчёта заработной +# платы сотрудника. Используйте в нём формулу: (выработка в часах*ставка в час) + премия. +# Во время выполнения расчёта для конкретных значений необходимо запускать скрипт с параметрами. -def div(x, y): - res: int - error: str = 'Вы ввели не корректные числа.' - if x > 0 and y >0: - res = x/y - return res - else: - return error -var_input_first = int(input('Введите первое число: ')) -var_input_second = int(input('Введите второе число: ')) +from sys import argv -print(div(var_input_first, var_input_second)) +hours, pay_hour, bonus = argv + +# res = int(hours) * int(pay_hour) + int(bonus) +# +# print(res) + +print(hours) +print(pay_hour) +print(bonus) +# Не понял как правельно передать параметры в скрипт From b173d0058779be1194c177795cea3856000140d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 30 Jan 2023 15:28:09 +1100 Subject: [PATCH 09/58] Practical work 4 --- Lesson_02.py | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/Lesson_02.py b/Lesson_02.py index 64f6743..40496a4 100644 --- a/Lesson_02.py +++ b/Lesson_02.py @@ -1,18 +1,12 @@ -# 2. Выполнить функцию, которая принимает несколько параметров, описывающих -# данные пользователя: имя, фамилия, год рождения, город проживания, email, -# телефон. Функция должна принимать параметры как именованные аргументы. -# Осуществить вывод данных о пользователе одной строкой. - -def person(name, sec_name, age, city, email, tel): - return f'Имя - {name}, фамилия - {sec_name}, год рождения - {age}, город проживания - {city}, ' \ - f'email - {email}, телефон {tel}' - - -name = input('Введите имя: ') -sec_name = input('Введите Фамилию: ') -age = input('Введите год рождения: ') -city = input('Введите город проживания: ') -email = input('Введите email:') -tel = input('Введите телефон: ') - -print(person(name, sec_name, age, city, email, tel)) +# 2. Представлен список чисел. Необходимо вывести элементы исходного списка, значения +# которых больше предыдущего элемента. +# Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. +# Для его формирования используйте генератор. +# Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]. +# Результат: [12, 44, 4, 10, 78, 123]. + +my_list = [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55] +new_list = [el for i, el in enumerate(my_list) if my_list[i] > my_list[i - 1]] +res = new_list.pop(0) +print(f'Исходный список {my_list}') +print(f'Список с результатом {new_list}') From 55b912b244b859e37e0d9c6ec48dae6f2307baaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 30 Jan 2023 15:28:44 +1100 Subject: [PATCH 10/58] Practical work 4 --- Lesson_03.py | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/Lesson_03.py b/Lesson_03.py index 24d461c..b540961 100644 --- a/Lesson_03.py +++ b/Lesson_03.py @@ -1,20 +1,6 @@ -# 3. Реализовать функцию my_func(), которая принимает три позиционных -# аргумента и возвращает сумму наибольших двух аргументов. +# 3. Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. +# Решите задание в одну строку. +# Подсказка: используйте функцию range() и генератор. -def my_func(a, b, c): - sum: int - if a > b > c: - return a + b - elif a > c > b: - return a + c - elif b > c > a: - return b + c - elif c > b > a: - return c + b - - -a = int(input('Введите первое число: ')) -b = int(input('Введите второе число: ')) -c = int(input('Введите третье число: ')) - -print(my_func(a, b, c)) +ls = [el for el in range(20, 241) if el % 20 == 0 or el % 21 == 0] +print(ls) From 203d39f058bc7026d14390aa40210f9f429bbfc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 30 Jan 2023 15:29:18 +1100 Subject: [PATCH 11/58] Practical work 4 --- Lesson_04.py | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/Lesson_04.py b/Lesson_04.py index 7807199..c59ca02 100644 --- a/Lesson_04.py +++ b/Lesson_04.py @@ -1,25 +1,10 @@ -# 4. Программа принимает действительное положительное число x и целое -# отрицательное число y. Выполните возведение числа x в степень y. -# Задание реализуйте в виде функции my_func(x, y). При решении задания -# нужно обойтись без встроенной функции возведения числа в степень. -# Подсказка: попробуйте решить задачу двумя способами. -# Первый — возведение в степень с помощью оператора **. -# Второй — более сложная реализация без оператора **, предусматривающая -# использование цикла. - -def my_func(x, y): - res = x ** y - return res -def my_func_cicle(x, y): - tmp = x - for i in range(1, y*(-1)): - tmp *= x - res = 1/tmp - return res - - -x = float(input('Введите действительное положительное число: ')) -y = int(input('Введите целое отрицательное число: ')) - -print(f'Ответ с использывание встроеной функции {my_func(x, y)}') -print(f'Ответ с использованием цикла {my_func_cicle(x, y)}') +# 4. Представлен список чисел. Определите элементы списка, не имеющие повторений. +# Сформируйте итоговый массив чисел, соответствующих требованию. Элементы выведите +# в порядке их следования в исходном списке. Для выполнения задания обязательно используйте генератор(LC). +# Пример исходного списка: [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11]. +# Результат: [23, 1, 3, 10, 4, 11] + +my_list = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] +new_list = [el for i, el in enumerate(my_list) if my_list.count(el) < 2] +print(f'Исходный список {my_list}') +print(f'Список с результатом {new_list}') From 6ffa36109b161786b162a1ff272255f2c55cb22e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 30 Jan 2023 15:29:57 +1100 Subject: [PATCH 12/58] Practical work 4 --- Lesson_05.py | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/Lesson_05.py b/Lesson_05.py index ae4e0be..ed6d78e 100644 --- a/Lesson_05.py +++ b/Lesson_05.py @@ -1,23 +1,13 @@ - 5. Программа запрашивает у пользователя строку чисел, разделённых пробелом. -# При нажатии Enter должна выводиться сумма чисел. Пользователь может -# продолжить ввод чисел, разделённых пробелом и снова нажать Enter. -# Сумма вновь введённых чисел будет добавляться к уже подсчитанной сумме. -# Но если вместо числа вводится специальный символ, выполнение программы -# завершается. Если специальный символ введён после нескольких чисел, -# то вначале нужно добавить сумму этих чисел к полученной ранее сумме и -# после этого завершить программу. +# 5. Реализовать формирование списка, используя функцию range() и возможности генератора. +# В список должны войти чётные числа от 100 до 1000 (включая границы). Нужно получить +# результат вычисления произведения всех элементов списка. +# Подсказка: использовать функцию reduce(). -def sum_input(s_input): - ls = list(map(int, s_input.split(' '))) - return sum(ls) +from functools import reduce +def my_func(el_p, el): + return el_p * el -ex = False -res = 0 -while not ex: - user_input = input('Введите строку чисел раделенных пробелом(для выхода введите q): ') - if user_input == 'q': - ex = True - else: - res += sum_input(user_input) - print(res) + +print(f'Список четных значений {[el for el in range(100, 1001) if el % 2 == 0]}') +print(f'Произведение всех элементов списка {reduce(my_func, [el for el in range(100, 1001) if el % 2 == 0])}') From 8c7f74d4ac41fcf71b4961d35c1f22eb20487270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 30 Jan 2023 15:30:46 +1100 Subject: [PATCH 13/58] Practical work 4 --- Lesson_06.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/Lesson_06.py b/Lesson_06.py index 1065470..585030f 100644 --- a/Lesson_06.py +++ b/Lesson_06.py @@ -1,11 +1,22 @@ -# 6. Реализовать функцию int_func(), принимающую слова из маленьких латинских -# букв и возвращающую их же, но с прописной первой буквой. -# Например, print(int_func(‘text’)) -> Text. +# Подсказка: используйте функцию count() и cycle() модуля itertools. +# Обратите внимание, что создаваемый цикл не должен быть бесконечным. +# Предусмотрите условие его завершения. #### Например, в первом задании выводим целые числа, начиная с 3. +# # При достижении числа 10 — завершаем цикл. Вторым пунктом необходимо предусмотреть условие, +# # при котором повторение элементов списка прекратится. -def int_func(s): - return s.capitalize() +from itertools import count +for el in count(3): + if el == 10: + break + print(el) -input_string = input('Введите слово латинскими буквами в нижнем регистре: ') +from itertools import cycle + +c = 0 +for el in cycle('ABC'): + if c > 10: + break + print(el) + c += 1 -print(int_func(input_string)) From fa4a73c7c9e171e0814bd95d0e759b43dea98d7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 30 Jan 2023 15:31:21 +1100 Subject: [PATCH 14/58] Practical work 4 --- Lesson_07.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/Lesson_07.py b/Lesson_07.py index 60a010f..330f1c2 100644 --- a/Lesson_07.py +++ b/Lesson_07.py @@ -1,15 +1,25 @@ -# 7. Продолжить работу над заданием. В программу должна попадать строка из слов, -# разделённых пробелом. Каждое слово состоит из латинских букв в нижнем регистре. -# Нужно сделать вывод исходной строки, но каждое слово должно начинаться с -# заглавной буквы. Используйте написанную ранее функцию int_func(). +# 7. Реализовать генератор с помощью функции с ключевым словом yield, создающим очередное значение. +# При вызове функции должен создаваться объект-генератор. Функция вызывается следующим образом: +# for el in fact(n). Она отвечает за получение факториала числа. +# В цикле нужно выводить только первые n чисел, начиная с 1! и до n!. +# Подсказка: факториал числа n — произведение чисел от 1 до n. +# Например, факториал четырёх 4! = 1 * 2 * 3 * 4 = 24. -def int_func(s): - res = '' - ls = list(map(str, s.split(' '))) - for i in ls: - res += ' ' + i.capitalize() - return res +from itertools import count +from math import factorial +def fact(): + for el in count(1): + yield factorial(el) + + +space = fact() +n = int(input('Введите число n: ')) +x = 0 +for i in space: + if x < n: + print(i) + x += 1 + else: + break -input_string = input('Введите слово латинскими буквами в нижнем регистре: ') -print(int_func(input_string)) From 1a74daea632b43fbd41bed6e5e8787509e2097eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:43:28 +1100 Subject: [PATCH 15/58] Delete Lesson_01.py --- Lesson_01.py | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 Lesson_01.py diff --git a/Lesson_01.py b/Lesson_01.py deleted file mode 100644 index 2338350..0000000 --- a/Lesson_01.py +++ /dev/null @@ -1,16 +0,0 @@ -# 1. Реализовать скрипт, в котором должна быть предусмотрена функция расчёта заработной -# платы сотрудника. Используйте в нём формулу: (выработка в часах*ставка в час) + премия. -# Во время выполнения расчёта для конкретных значений необходимо запускать скрипт с параметрами. - -from sys import argv - -hours, pay_hour, bonus = argv - -# res = int(hours) * int(pay_hour) + int(bonus) -# -# print(res) - -print(hours) -print(pay_hour) -print(bonus) -# Не понял как правельно передать параметры в скрипт From 56a112ebfabc43fed0c75baae7949a35a0ce9480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:43:37 +1100 Subject: [PATCH 16/58] Delete Lesson_02.py --- Lesson_02.py | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 Lesson_02.py diff --git a/Lesson_02.py b/Lesson_02.py deleted file mode 100644 index 40496a4..0000000 --- a/Lesson_02.py +++ /dev/null @@ -1,12 +0,0 @@ -# 2. Представлен список чисел. Необходимо вывести элементы исходного списка, значения -# которых больше предыдущего элемента. -# Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. -# Для его формирования используйте генератор. -# Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]. -# Результат: [12, 44, 4, 10, 78, 123]. - -my_list = [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55] -new_list = [el for i, el in enumerate(my_list) if my_list[i] > my_list[i - 1]] -res = new_list.pop(0) -print(f'Исходный список {my_list}') -print(f'Список с результатом {new_list}') From 6a155655ec940548de42513f0d308e0f90821359 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:43:43 +1100 Subject: [PATCH 17/58] Delete Lesson_03.py --- Lesson_03.py | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 Lesson_03.py diff --git a/Lesson_03.py b/Lesson_03.py deleted file mode 100644 index b540961..0000000 --- a/Lesson_03.py +++ /dev/null @@ -1,6 +0,0 @@ -# 3. Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. -# Решите задание в одну строку. -# Подсказка: используйте функцию range() и генератор. - -ls = [el for el in range(20, 241) if el % 20 == 0 or el % 21 == 0] -print(ls) From 37852ee4db5f7fda3592e80a7bb210fbadddbfab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:43:50 +1100 Subject: [PATCH 18/58] Delete Lesson_04.py --- Lesson_04.py | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 Lesson_04.py diff --git a/Lesson_04.py b/Lesson_04.py deleted file mode 100644 index c59ca02..0000000 --- a/Lesson_04.py +++ /dev/null @@ -1,10 +0,0 @@ -# 4. Представлен список чисел. Определите элементы списка, не имеющие повторений. -# Сформируйте итоговый массив чисел, соответствующих требованию. Элементы выведите -# в порядке их следования в исходном списке. Для выполнения задания обязательно используйте генератор(LC). -# Пример исходного списка: [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11]. -# Результат: [23, 1, 3, 10, 4, 11] - -my_list = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] -new_list = [el for i, el in enumerate(my_list) if my_list.count(el) < 2] -print(f'Исходный список {my_list}') -print(f'Список с результатом {new_list}') From d984c173f048b63ba9cd5f60ffecbf221bbd8244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:43:58 +1100 Subject: [PATCH 19/58] Delete Lesson_05.py --- Lesson_05.py | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 Lesson_05.py diff --git a/Lesson_05.py b/Lesson_05.py deleted file mode 100644 index ed6d78e..0000000 --- a/Lesson_05.py +++ /dev/null @@ -1,13 +0,0 @@ -# 5. Реализовать формирование списка, используя функцию range() и возможности генератора. -# В список должны войти чётные числа от 100 до 1000 (включая границы). Нужно получить -# результат вычисления произведения всех элементов списка. -# Подсказка: использовать функцию reduce(). - -from functools import reduce - -def my_func(el_p, el): - return el_p * el - - -print(f'Список четных значений {[el for el in range(100, 1001) if el % 2 == 0]}') -print(f'Произведение всех элементов списка {reduce(my_func, [el for el in range(100, 1001) if el % 2 == 0])}') From f3ee37619fe9b833ca17072050761fc438a56da6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:44:13 +1100 Subject: [PATCH 20/58] Delete Lesson_06.py --- Lesson_06.py | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 Lesson_06.py diff --git a/Lesson_06.py b/Lesson_06.py deleted file mode 100644 index 585030f..0000000 --- a/Lesson_06.py +++ /dev/null @@ -1,22 +0,0 @@ -# Подсказка: используйте функцию count() и cycle() модуля itertools. -# Обратите внимание, что создаваемый цикл не должен быть бесконечным. -# Предусмотрите условие его завершения. #### Например, в первом задании выводим целые числа, начиная с 3. -# # При достижении числа 10 — завершаем цикл. Вторым пунктом необходимо предусмотреть условие, -# # при котором повторение элементов списка прекратится. - -from itertools import count - -for el in count(3): - if el == 10: - break - print(el) - -from itertools import cycle - -c = 0 -for el in cycle('ABC'): - if c > 10: - break - print(el) - c += 1 - From 307bea51d5c37c1648cd80865aa433680b6691d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:44:23 +1100 Subject: [PATCH 21/58] Delete Lesson_07.py --- Lesson_07.py | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 Lesson_07.py diff --git a/Lesson_07.py b/Lesson_07.py deleted file mode 100644 index 330f1c2..0000000 --- a/Lesson_07.py +++ /dev/null @@ -1,25 +0,0 @@ -# 7. Реализовать генератор с помощью функции с ключевым словом yield, создающим очередное значение. -# При вызове функции должен создаваться объект-генератор. Функция вызывается следующим образом: -# for el in fact(n). Она отвечает за получение факториала числа. -# В цикле нужно выводить только первые n чисел, начиная с 1! и до n!. -# Подсказка: факториал числа n — произведение чисел от 1 до n. -# Например, факториал четырёх 4! = 1 * 2 * 3 * 4 = 24. - -from itertools import count -from math import factorial - -def fact(): - for el in count(1): - yield factorial(el) - - -space = fact() -n = int(input('Введите число n: ')) -x = 0 -for i in space: - if x < n: - print(i) - x += 1 - else: - break - From 7563fec3489b5547c3e667f264d6fb77cc548ddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:45:12 +1100 Subject: [PATCH 22/58] Practical work 5 --- Less_1.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Less_1.py diff --git a/Less_1.py b/Less_1.py new file mode 100644 index 0000000..beee8a4 --- /dev/null +++ b/Less_1.py @@ -0,0 +1,10 @@ +# 1. Создать программный файл в текстовом формате, записать в него построчно данные, +# вводимые пользователем. Об окончании ввода данных будет свидетельствовать пустая строка. + +m_file = open('text.txt', 'w') +m_string = input('Введите данные:') +while len(m_string) > 0: + m_file.writelines(m_string + '\n') + m_string = input('Введите данные:') + +m_file.close() From 77f18686baca47a9844a7cc29554978bec72f59a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:45:53 +1100 Subject: [PATCH 23/58] Practical work 5 --- Less_2.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Less_2.py diff --git a/Less_2.py b/Less_2.py new file mode 100644 index 0000000..c7c86e9 --- /dev/null +++ b/Less_2.py @@ -0,0 +1,16 @@ +# 2. Создать текстовый файл (не программно), сохранить в нём несколько строк, +# выполнить подсчёт строк и слов в каждой строке. + +m_file = open('text.txt', 'r') +data = m_file.read() +print(data) +m_file = open('text.txt', 'r') +lines = len(m_file.readlines()) +print(f'Количество строк {lines}') +m_file = open('text.txt', 'r') +word_data = m_file.readlines() +for i, j in enumerate(word_data): + a = j.split() + print(f'Количество слов в {i + 1} строке равно {len(a)}') + +m_file.close() From fa49010f3ae4e667f86bb76bbfddcf0cc000c673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:46:49 +1100 Subject: [PATCH 24/58] Practical work 5 --- Less_3.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Less_3.py diff --git a/Less_3.py b/Less_3.py new file mode 100644 index 0000000..033fba5 --- /dev/null +++ b/Less_3.py @@ -0,0 +1,31 @@ +# 3. Создать текстовый файл (не программно). Построчно записать фамилии сотрудников +# и величину их окладов (не менее 10 строк). Определить, кто из сотрудников имеет +# оклад менее 20 тысяч, вывести фамилии этих сотрудников. Выполнить подсчёт средней +# величины дохода сотрудников. +# Пример файла: +# +# Иванов 23543.12 +# Петров 13749.32 + +m_file = open('text_2.txt', 'w') +m_string = input('Введите построчно фамилию и оклад: ') +while len(m_string) > 0: + m_file.writelines(m_string + '\n') + m_string = input('Введите построчно фамилию и оклад: ') +m_file.close() + +m_file = open('text_2.txt', 'r') +work_list = m_file.read().split('\n') +les_pay = [] +employee = [] +for i in work_list: + i = i.split() + if len(i) > 0: + if int(i[1]) < 20: + les_pay.append(i[0]) + employee.append(i[1]) + +avar = sum(map(int, employee)) / len(employee) +res = ', '.join(les_pay) +print(f'Оклад меньше 20 у {res}, средняя величена дохода {avar}') +m_file.close() From f03e72607b932d515aca221b68c087507efe87b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:47:20 +1100 Subject: [PATCH 25/58] Practical work 5 --- Less_4.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Less_4.py diff --git a/Less_4.py b/Less_4.py new file mode 100644 index 0000000..87580ab --- /dev/null +++ b/Less_4.py @@ -0,0 +1,21 @@ +# 4. Создать (не программно) текстовый файл со следующим содержимым: +# One — 1 +# Two — 2 +# Three — 3 +# Four — 4 +# Напишите программу, открывающую файл на чтение и считывающую построчно данные. +# При этом английские числительные должны заменяться на русские. Новый блок строк +# должен записываться в новый текстовый файл. + +rus = {'One' : 'Один', 'Two' : 'Два', 'Three' : 'Три', 'Four' : 'Четыре'} +new_file = [] +m_file = open('text_3.txt', 'r') + +for i in m_file: + i = i.split(' ', 1) + new_file.append(rus[i[0]] + ' ' + i[1]) +print(new_file) +m_file.close() +m_file_2 = open('text_3_new.txt', 'w') +m_file_2.writelines(new_file) +m_file_2.close() From 91c4d1c8aa6a7398b1f652e889c7ad8123bc8798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:47:58 +1100 Subject: [PATCH 26/58] Practical work 5 --- Less_5.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Less_5.py diff --git a/Less_5.py b/Less_5.py new file mode 100644 index 0000000..fce873f --- /dev/null +++ b/Less_5.py @@ -0,0 +1,10 @@ +# 5. Создать (программно) текстовый файл, записать в него программно набор чисел, +# разделённых пробелами. Программа должна подсчитывать сумму чисел в файле и +# выводить её на экран. + +m_file = open('text_4.txt', 'w+') +m_string = input('Набор чисел разделенных пробелом: ') +print(m_string) +m_file.writelines(m_string) +res_sum = list(map(int, m_string.split(' '))) +print(sum(res_sum)) From b0f49539f644b3069f006b034044e4392d9e2602 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:48:50 +1100 Subject: [PATCH 27/58] Practical work 5 --- Less_6.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Less_6.py diff --git a/Less_6.py b/Less_6.py new file mode 100644 index 0000000..9c416e3 --- /dev/null +++ b/Less_6.py @@ -0,0 +1,23 @@ +# 6. Сформировать (не программно) текстовый файл. В нём каждая строка должна +# описывать учебный предмет и наличие лекционных, практических и лабораторных +# занятий по предмету. Сюда должно входить и количество занятий. Необязательно, +# чтобы для каждого предмета были все типы занятий. +# Сформировать словарь, содержащий название предмета и общее количество занятий +# по нему. Вывести его на экран. +# Примеры строк файла: +# Информатика: 100(л) 50(пр) 20(лаб). +# Физика: 30(л) — 10(лаб) +# Физкультура: — 30(пр) — +# Пример словаря: {“Информатика”: 170, “Физика”: 40, “Физкультура”: 30} +# sum([i for i in (item.split(' ')[1:]) if i.isdigit()]) + +m_file = open('text_5.txt', 'r', encoding='utf-8') +lines = m_file.read().splitlines() +d = {} +for item in lines: + key = item.split(': ')[0] + value = item.split(' ')[1:] + d.update({key: value}) +print(d) +m_file.close() +# Не знаю как правльно распарсить сроку... From 03dbe20414394fefb0a33120c58a56bd9157f1b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:49:33 +1100 Subject: [PATCH 28/58] Practical work 5 --- Less_7.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Less_7.py diff --git a/Less_7.py b/Less_7.py new file mode 100644 index 0000000..dc41bbe --- /dev/null +++ b/Less_7.py @@ -0,0 +1,35 @@ +# 7. Создать вручную и заполнить несколькими строками текстовый файл, в котором +# каждая строка будет содержать данные о фирме: название, форма собственности, выручка, +# издержки. +# Пример строки файла: firm_1 ООО 10000 5000. +# +# Необходимо построчно прочитать файл, вычислить прибыль каждой компании, а также среднюю +# прибыль. Если фирма получила убытки, в расчёт средней прибыли её не включать. +# Далее реализовать список. Он должен содержать словарь с фирмами и их прибылями, а также +# словарь со средней прибылью. Если фирма получила убытки, также добавить её в словарь +# (со значением убытков). +# Пример списка: [{“firm_1”: 5000, “firm_2”: 3000, “firm_3”: 1000}, {“average_profit”: 2000}]. +# +# Итоговый список сохранить в виде json-объекта в соответствующий файл. +# Пример json-объекта: +# [{"firm_1": 5000, "firm_2": 3000, "firm_3": 1000}, {"average_profit": 2000}] + +m_file = open('text_6.txt', 'r', encoding='utf-8') +lines = m_file.read().splitlines() +d_1 = {} +sum_rev = 0 +num_f = 0 +for item in lines: + key = item.split(' ')[0] + ls = item.split(' ')[2:] + value = int(ls[0]) - int(ls[1]) + d_1.update({key: value}) + sum_rev += value + num_f += 1 + +d_2 = {} +key_2 = 'average_profit' +value_2 = sum_rev / num_f +d_2.update({key_2: value_2}) +res = [d_1, d_2] +print(res) From 2459f000087214f8078b19e5669fc05e820b0190 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:29:10 +1100 Subject: [PATCH 29/58] Delete Less_7.py --- Less_7.py | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 Less_7.py diff --git a/Less_7.py b/Less_7.py deleted file mode 100644 index dc41bbe..0000000 --- a/Less_7.py +++ /dev/null @@ -1,35 +0,0 @@ -# 7. Создать вручную и заполнить несколькими строками текстовый файл, в котором -# каждая строка будет содержать данные о фирме: название, форма собственности, выручка, -# издержки. -# Пример строки файла: firm_1 ООО 10000 5000. -# -# Необходимо построчно прочитать файл, вычислить прибыль каждой компании, а также среднюю -# прибыль. Если фирма получила убытки, в расчёт средней прибыли её не включать. -# Далее реализовать список. Он должен содержать словарь с фирмами и их прибылями, а также -# словарь со средней прибылью. Если фирма получила убытки, также добавить её в словарь -# (со значением убытков). -# Пример списка: [{“firm_1”: 5000, “firm_2”: 3000, “firm_3”: 1000}, {“average_profit”: 2000}]. -# -# Итоговый список сохранить в виде json-объекта в соответствующий файл. -# Пример json-объекта: -# [{"firm_1": 5000, "firm_2": 3000, "firm_3": 1000}, {"average_profit": 2000}] - -m_file = open('text_6.txt', 'r', encoding='utf-8') -lines = m_file.read().splitlines() -d_1 = {} -sum_rev = 0 -num_f = 0 -for item in lines: - key = item.split(' ')[0] - ls = item.split(' ')[2:] - value = int(ls[0]) - int(ls[1]) - d_1.update({key: value}) - sum_rev += value - num_f += 1 - -d_2 = {} -key_2 = 'average_profit' -value_2 = sum_rev / num_f -d_2.update({key_2: value_2}) -res = [d_1, d_2] -print(res) From 6ec341a464d47b8c8f02c2058f5fe1f1076d1267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:29:20 +1100 Subject: [PATCH 30/58] Delete Less_6.py --- Less_6.py | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 Less_6.py diff --git a/Less_6.py b/Less_6.py deleted file mode 100644 index 9c416e3..0000000 --- a/Less_6.py +++ /dev/null @@ -1,23 +0,0 @@ -# 6. Сформировать (не программно) текстовый файл. В нём каждая строка должна -# описывать учебный предмет и наличие лекционных, практических и лабораторных -# занятий по предмету. Сюда должно входить и количество занятий. Необязательно, -# чтобы для каждого предмета были все типы занятий. -# Сформировать словарь, содержащий название предмета и общее количество занятий -# по нему. Вывести его на экран. -# Примеры строк файла: -# Информатика: 100(л) 50(пр) 20(лаб). -# Физика: 30(л) — 10(лаб) -# Физкультура: — 30(пр) — -# Пример словаря: {“Информатика”: 170, “Физика”: 40, “Физкультура”: 30} -# sum([i for i in (item.split(' ')[1:]) if i.isdigit()]) - -m_file = open('text_5.txt', 'r', encoding='utf-8') -lines = m_file.read().splitlines() -d = {} -for item in lines: - key = item.split(': ')[0] - value = item.split(' ')[1:] - d.update({key: value}) -print(d) -m_file.close() -# Не знаю как правльно распарсить сроку... From 13490ade6620af126479aa29767c7487e1982b02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:29:29 +1100 Subject: [PATCH 31/58] Delete Less_5.py --- Less_5.py | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 Less_5.py diff --git a/Less_5.py b/Less_5.py deleted file mode 100644 index fce873f..0000000 --- a/Less_5.py +++ /dev/null @@ -1,10 +0,0 @@ -# 5. Создать (программно) текстовый файл, записать в него программно набор чисел, -# разделённых пробелами. Программа должна подсчитывать сумму чисел в файле и -# выводить её на экран. - -m_file = open('text_4.txt', 'w+') -m_string = input('Набор чисел разделенных пробелом: ') -print(m_string) -m_file.writelines(m_string) -res_sum = list(map(int, m_string.split(' '))) -print(sum(res_sum)) From cd6e9b00c3333979b72ddf1a668c9c8afe6510fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:29:37 +1100 Subject: [PATCH 32/58] Delete Less_4.py --- Less_4.py | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 Less_4.py diff --git a/Less_4.py b/Less_4.py deleted file mode 100644 index 87580ab..0000000 --- a/Less_4.py +++ /dev/null @@ -1,21 +0,0 @@ -# 4. Создать (не программно) текстовый файл со следующим содержимым: -# One — 1 -# Two — 2 -# Three — 3 -# Four — 4 -# Напишите программу, открывающую файл на чтение и считывающую построчно данные. -# При этом английские числительные должны заменяться на русские. Новый блок строк -# должен записываться в новый текстовый файл. - -rus = {'One' : 'Один', 'Two' : 'Два', 'Three' : 'Три', 'Four' : 'Четыре'} -new_file = [] -m_file = open('text_3.txt', 'r') - -for i in m_file: - i = i.split(' ', 1) - new_file.append(rus[i[0]] + ' ' + i[1]) -print(new_file) -m_file.close() -m_file_2 = open('text_3_new.txt', 'w') -m_file_2.writelines(new_file) -m_file_2.close() From 52539fd2fcecf5a290059933750afc0aada2a28b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:29:45 +1100 Subject: [PATCH 33/58] Delete Less_3.py --- Less_3.py | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 Less_3.py diff --git a/Less_3.py b/Less_3.py deleted file mode 100644 index 033fba5..0000000 --- a/Less_3.py +++ /dev/null @@ -1,31 +0,0 @@ -# 3. Создать текстовый файл (не программно). Построчно записать фамилии сотрудников -# и величину их окладов (не менее 10 строк). Определить, кто из сотрудников имеет -# оклад менее 20 тысяч, вывести фамилии этих сотрудников. Выполнить подсчёт средней -# величины дохода сотрудников. -# Пример файла: -# -# Иванов 23543.12 -# Петров 13749.32 - -m_file = open('text_2.txt', 'w') -m_string = input('Введите построчно фамилию и оклад: ') -while len(m_string) > 0: - m_file.writelines(m_string + '\n') - m_string = input('Введите построчно фамилию и оклад: ') -m_file.close() - -m_file = open('text_2.txt', 'r') -work_list = m_file.read().split('\n') -les_pay = [] -employee = [] -for i in work_list: - i = i.split() - if len(i) > 0: - if int(i[1]) < 20: - les_pay.append(i[0]) - employee.append(i[1]) - -avar = sum(map(int, employee)) / len(employee) -res = ', '.join(les_pay) -print(f'Оклад меньше 20 у {res}, средняя величена дохода {avar}') -m_file.close() From af888a850878d9545529f4d41fb81a0513a1235b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:29:51 +1100 Subject: [PATCH 34/58] Delete Less_2.py --- Less_2.py | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 Less_2.py diff --git a/Less_2.py b/Less_2.py deleted file mode 100644 index c7c86e9..0000000 --- a/Less_2.py +++ /dev/null @@ -1,16 +0,0 @@ -# 2. Создать текстовый файл (не программно), сохранить в нём несколько строк, -# выполнить подсчёт строк и слов в каждой строке. - -m_file = open('text.txt', 'r') -data = m_file.read() -print(data) -m_file = open('text.txt', 'r') -lines = len(m_file.readlines()) -print(f'Количество строк {lines}') -m_file = open('text.txt', 'r') -word_data = m_file.readlines() -for i, j in enumerate(word_data): - a = j.split() - print(f'Количество слов в {i + 1} строке равно {len(a)}') - -m_file.close() From e4812f6b00f64d62daa18731227609f10aa00903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:30:00 +1100 Subject: [PATCH 35/58] Delete Less_1.py --- Less_1.py | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 Less_1.py diff --git a/Less_1.py b/Less_1.py deleted file mode 100644 index beee8a4..0000000 --- a/Less_1.py +++ /dev/null @@ -1,10 +0,0 @@ -# 1. Создать программный файл в текстовом формате, записать в него построчно данные, -# вводимые пользователем. Об окончании ввода данных будет свидетельствовать пустая строка. - -m_file = open('text.txt', 'w') -m_string = input('Введите данные:') -while len(m_string) > 0: - m_file.writelines(m_string + '\n') - m_string = input('Введите данные:') - -m_file.close() From 9a605ab3e117ffd7fc413b85325a138a454c9def Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:30:54 +1100 Subject: [PATCH 36/58] Practical work 6 --- Less_1.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Less_1.py diff --git a/Less_1.py b/Less_1.py new file mode 100644 index 0000000..1c9a0de --- /dev/null +++ b/Less_1.py @@ -0,0 +1,27 @@ +# 1. Создать класс TrafficLight (светофор). +# определить у него один атрибут color (цвет) и метод running (запуск); +# атрибут реализовать как приватный; +# в рамках метода реализовать переключение светофора в режимы: красный, жёлтый, зелёный; +# продолжительность первого состояния (красный) составляет 7 секунд, второго +# (жёлтый) — 2 секунды, третьего (зелёный) — на ваше усмотрение; +# переключение между режимами должно осуществляться только в указанном порядке (красный, жёлтый, зелёный); +# проверить работу примера, создав экземпляр и вызвав описанный метод. +# Задачу можно усложнить, реализовав проверку порядка режимов. +# При его нарушении выводить соответствующее сообщение и завершать скрипт. + +import time +class TrafficLight: + __color = ['Красный', 'Желтый', 'Зеленый'] + + def running(self): + for i in range(3): + print(f'Светофор горит: {TrafficLight.__color[i]}') + if TrafficLight.__color[i] == 'Красный': + time.sleep(7) + elif TrafficLight.__color[i] == 'Желтый': + time.sleep(2) + elif TrafficLight.__color[i] == 'Зеленный': + time.sleep(5) + +a = TrafficLight() +a.running() From 661408b36ecf78bd52af261372e277975682a286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:31:31 +1100 Subject: [PATCH 37/58] Practical work 6 --- Less_2.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Less_2.py diff --git a/Less_2.py b/Less_2.py new file mode 100644 index 0000000..523f121 --- /dev/null +++ b/Less_2.py @@ -0,0 +1,24 @@ +# 2. Реализовать класс Road (дорога). +# определить атрибуты: length (длина), width (ширина); +# значения атрибутов должны передаваться при создании экземпляра класса; +# атрибуты сделать защищёнными; +# определить метод расчёта массы асфальта, необходимого для покрытия всей дороги; +# использовать формулу: длина*ширина*масса асфальта для покрытия одного кв. метра дороги асфальтом, +# толщиной в 1 см*число см толщины полотна; +# проверить работу метода. +# Например: 20 м*5000 м*25 кг*5 см = 12500 т. + +class Road: + def __init__(self, _length, _width): + self._length = _length + self._width = _width + + def mass(self): + self.weight = 25 + self.thickness = 0.05 + return self._length * self._width * self.weight * self.thickness + + +r = Road(20, 5000) + +print(r.mass()) From 44cdd5e1aaba2698c3963284d5d2040fa94cb8bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:32:00 +1100 Subject: [PATCH 38/58] Practical work 6 --- Less_3.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Less_3.py diff --git a/Less_3.py b/Less_3.py new file mode 100644 index 0000000..e3e1b73 --- /dev/null +++ b/Less_3.py @@ -0,0 +1,36 @@ +# 3. Реализовать базовый класс Worker (работник). +# определить атрибуты: name, surname, position (должность), income (доход); +# последний атрибут должен быть защищённым и ссылаться на словарь, содержащий элементы: +# оклад и премия, например, {"wage": wage, "bonus": bonus}; +# создать класс Position (должность) на базе класса Worker; +# в классе Position реализовать методы получения полного имени сотрудника (get_full_name) и +# дохода с учётом премии (get_total_income); +# проверить работу примера на реальных данных: создать экземпляры класса Position, передать данные, +# проверить значения атрибутов, вызвать методы экземпляров. + +class Worker: + + def __init__(self, name, surname, position, wage, bonus): + self.name = name + self.surname = surname + self.position = position + self._income = {"wage": wage, "bonus": bonus} + + +class Position(Worker): + + def __init__(self, name, surname, position, wage, bonus): + super().__init__(name, surname, position, wage, bonus) + + def get_full_name(self): + return f'{self.name} {self.surname}' + + def get_total_income(self): + return self._income.get('wage') + self._income.get('bonus') + + + +res = Position('Иван', 'Петров', 'Грузчик', 50000, 3000) +print(res.get_full_name()) +print(res.position) +print(res.get_total_income()) From 3a69e722fc24739dc9b21b1f22304fd6eb6ea08d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:32:30 +1100 Subject: [PATCH 39/58] Practical work 6 --- Less_4.py | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Less_4.py diff --git a/Less_4.py b/Less_4.py new file mode 100644 index 0000000..19a0b5f --- /dev/null +++ b/Less_4.py @@ -0,0 +1,87 @@ +# 4. Реализуйте базовый класс Car. +# у класса должны быть следующие атрибуты: speed, color, name, is_police (булево). +# А также методы: go, stop, turn(direction), которые должны сообщать, что машина +# поехала, остановилась, повернула (куда); +# опишите несколько дочерних классов: TownCar, SportCar, WorkCar, PoliceCar; +# добавьте в базовый класс метод show_speed, который должен показывать текущую скорость автомобиля; +# для классов TownCar и WorkCar переопределите метод show_speed. При значении скорости свыше +# 60 (TownCar) и 40 (WorkCar) должно выводиться сообщение о превышении скорости. +# Создайте экземпляры классов, передайте значения атрибутов. Выполните доступ к атрибутам, выведите +# результат. Вызовите методы и покажите результат. + +class Car: + def __init__(self, speed, color, name, is_police): + self.speed = speed + self.color = color + self.name = name + self.is_police = is_police + + def go(self): + return f'{self.name} едет' + + def stop(self): + return f'{self.name} остановился' + + def turn_right(self): + return f'{self.name} перевернулся в право' + + def turn_left(self): + return f'{self.name} перевернулся в лево' + + def show_speed(self): + return f'Скорость {self.name} равна {self.speed}' + + +class TownCar(Car): + def __init__(self, speed, color, name, is_police): + super().__init__(speed, color, name, is_police) + + def show_speed(self): + print(f'Скорость городского автомобиля {self.name} равна {self.speed}') + + if self.speed > 40: + return f' {self.name} привысил скорость' + else: + return f'{self.name} без привышения скорости' + +class SportCar(Car): + def __init__(self, speed, color, name, is_police): + super().__init__(speed, color, name, is_police) + + +class WorkCar(Car): + def __init__(self, speed, color, name, is_police): + super().__init__(speed, color, name, is_police) + + def show_speed(self): + print(f'Скорость рабочего автомобиля {self.name} равна {self.speed}') + + if self.speed > 60: + return f'Скорость {self.name} превышена' + + +class PoliceCar(Car): + def __init__(self, speed, color, name, is_police): + super().__init__(speed, color, name, is_police) + + def police(self): + if self.is_police: + return f'{self.name} полицейская машина' + else: + return f'{self.name} полицейская машина' + + +gaz = SportCar(100, 'красный', 'ГАЗ', False) +zaz = TownCar(30, 'белый', 'ЗАЗ', False) +lada = WorkCar(70, 'желтый', 'Лада', True) +uaz = PoliceCar(110, 'синий', 'Ford', True) +print(lada.turn_left()) +print(f'Когда {zaz.turn_right()}, тогда {gaz.stop()}') +print(f'{lada.go()} со скоростью {lada.show_speed()}') +print(f'{lada.name} имеет цвет {lada.color}') +print(f'{gaz.name} полицейский автомобиль? {gaz.is_police}') +print(f'{lada.name} полицейский автомобиль? {lada.is_police}') +print(gaz.show_speed()) +print(zaz.show_speed()) +print(uaz.police()) +print(uaz.show_speed()) From b0efbf85c0b6e9897f73326118571eb0c24d2cc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:33:07 +1100 Subject: [PATCH 40/58] Practical work 6 --- Less_5.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Less_5.py diff --git a/Less_5.py b/Less_5.py new file mode 100644 index 0000000..748b7de --- /dev/null +++ b/Less_5.py @@ -0,0 +1,46 @@ +# 5. Реализовать класс Stationery (канцелярская принадлежность). +# определить в нём атрибут title (название) и метод draw (отрисовка). +# Метод выводит сообщение «Запуск отрисовки»; +# создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер); +# в каждом классе реализовать переопределение метода draw. Для каждого класса +# метод должен выводить уникальное сообщение; +# создать экземпляры классов и проверить, что выведет описанный метод для каждого экземпляра. + +class Stationary: + def __init__(self, title): + self.title = title + + def draw(self): + return f'Запуск отрисовки {self.title}' + + +class Pen(Stationary): + def __init__(self, title): + super().__init__(title) + + def draw(self): + return f'Вы взяли {self.title}. Запуск отрисовки ручкой' + + +class Pencil(Stationary): + def __init__(self, title): + super().__init__(title) + + def draw(self): + return f'Вы взяли {self.title}. Запуск отрисовки карандашом' + + +class Handle(Stationary): + def __init__(self, title): + super().__init__(title) + + def draw(self): + return f'Вы взяли {self.title}. Запуск отрисовки маркером' + + +pen = Pen('Ручка') +pencil = Pencil('Карандаш') +handle = Handle('Маркер') +print(pen.draw()) +print(pencil.draw()) +print(handle.draw()) From bff2bd03d9473ede73814a0b62b67526084ae83d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Fri, 10 Feb 2023 12:00:43 +1100 Subject: [PATCH 41/58] Delete Less_5.py --- Less_5.py | 46 ---------------------------------------------- 1 file changed, 46 deletions(-) delete mode 100644 Less_5.py diff --git a/Less_5.py b/Less_5.py deleted file mode 100644 index 748b7de..0000000 --- a/Less_5.py +++ /dev/null @@ -1,46 +0,0 @@ -# 5. Реализовать класс Stationery (канцелярская принадлежность). -# определить в нём атрибут title (название) и метод draw (отрисовка). -# Метод выводит сообщение «Запуск отрисовки»; -# создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер); -# в каждом классе реализовать переопределение метода draw. Для каждого класса -# метод должен выводить уникальное сообщение; -# создать экземпляры классов и проверить, что выведет описанный метод для каждого экземпляра. - -class Stationary: - def __init__(self, title): - self.title = title - - def draw(self): - return f'Запуск отрисовки {self.title}' - - -class Pen(Stationary): - def __init__(self, title): - super().__init__(title) - - def draw(self): - return f'Вы взяли {self.title}. Запуск отрисовки ручкой' - - -class Pencil(Stationary): - def __init__(self, title): - super().__init__(title) - - def draw(self): - return f'Вы взяли {self.title}. Запуск отрисовки карандашом' - - -class Handle(Stationary): - def __init__(self, title): - super().__init__(title) - - def draw(self): - return f'Вы взяли {self.title}. Запуск отрисовки маркером' - - -pen = Pen('Ручка') -pencil = Pencil('Карандаш') -handle = Handle('Маркер') -print(pen.draw()) -print(pencil.draw()) -print(handle.draw()) From 0c8864b70bfae27292320b21338bb94e6a8be973 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Fri, 10 Feb 2023 12:00:58 +1100 Subject: [PATCH 42/58] Delete Less_4.py --- Less_4.py | 87 ------------------------------------------------------- 1 file changed, 87 deletions(-) delete mode 100644 Less_4.py diff --git a/Less_4.py b/Less_4.py deleted file mode 100644 index 19a0b5f..0000000 --- a/Less_4.py +++ /dev/null @@ -1,87 +0,0 @@ -# 4. Реализуйте базовый класс Car. -# у класса должны быть следующие атрибуты: speed, color, name, is_police (булево). -# А также методы: go, stop, turn(direction), которые должны сообщать, что машина -# поехала, остановилась, повернула (куда); -# опишите несколько дочерних классов: TownCar, SportCar, WorkCar, PoliceCar; -# добавьте в базовый класс метод show_speed, который должен показывать текущую скорость автомобиля; -# для классов TownCar и WorkCar переопределите метод show_speed. При значении скорости свыше -# 60 (TownCar) и 40 (WorkCar) должно выводиться сообщение о превышении скорости. -# Создайте экземпляры классов, передайте значения атрибутов. Выполните доступ к атрибутам, выведите -# результат. Вызовите методы и покажите результат. - -class Car: - def __init__(self, speed, color, name, is_police): - self.speed = speed - self.color = color - self.name = name - self.is_police = is_police - - def go(self): - return f'{self.name} едет' - - def stop(self): - return f'{self.name} остановился' - - def turn_right(self): - return f'{self.name} перевернулся в право' - - def turn_left(self): - return f'{self.name} перевернулся в лево' - - def show_speed(self): - return f'Скорость {self.name} равна {self.speed}' - - -class TownCar(Car): - def __init__(self, speed, color, name, is_police): - super().__init__(speed, color, name, is_police) - - def show_speed(self): - print(f'Скорость городского автомобиля {self.name} равна {self.speed}') - - if self.speed > 40: - return f' {self.name} привысил скорость' - else: - return f'{self.name} без привышения скорости' - -class SportCar(Car): - def __init__(self, speed, color, name, is_police): - super().__init__(speed, color, name, is_police) - - -class WorkCar(Car): - def __init__(self, speed, color, name, is_police): - super().__init__(speed, color, name, is_police) - - def show_speed(self): - print(f'Скорость рабочего автомобиля {self.name} равна {self.speed}') - - if self.speed > 60: - return f'Скорость {self.name} превышена' - - -class PoliceCar(Car): - def __init__(self, speed, color, name, is_police): - super().__init__(speed, color, name, is_police) - - def police(self): - if self.is_police: - return f'{self.name} полицейская машина' - else: - return f'{self.name} полицейская машина' - - -gaz = SportCar(100, 'красный', 'ГАЗ', False) -zaz = TownCar(30, 'белый', 'ЗАЗ', False) -lada = WorkCar(70, 'желтый', 'Лада', True) -uaz = PoliceCar(110, 'синий', 'Ford', True) -print(lada.turn_left()) -print(f'Когда {zaz.turn_right()}, тогда {gaz.stop()}') -print(f'{lada.go()} со скоростью {lada.show_speed()}') -print(f'{lada.name} имеет цвет {lada.color}') -print(f'{gaz.name} полицейский автомобиль? {gaz.is_police}') -print(f'{lada.name} полицейский автомобиль? {lada.is_police}') -print(gaz.show_speed()) -print(zaz.show_speed()) -print(uaz.police()) -print(uaz.show_speed()) From 10e0d38cd4a91f9bed2e6457b123044b813b9c1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Fri, 10 Feb 2023 12:01:10 +1100 Subject: [PATCH 43/58] Delete Less_3.py --- Less_3.py | 36 ------------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 Less_3.py diff --git a/Less_3.py b/Less_3.py deleted file mode 100644 index e3e1b73..0000000 --- a/Less_3.py +++ /dev/null @@ -1,36 +0,0 @@ -# 3. Реализовать базовый класс Worker (работник). -# определить атрибуты: name, surname, position (должность), income (доход); -# последний атрибут должен быть защищённым и ссылаться на словарь, содержащий элементы: -# оклад и премия, например, {"wage": wage, "bonus": bonus}; -# создать класс Position (должность) на базе класса Worker; -# в классе Position реализовать методы получения полного имени сотрудника (get_full_name) и -# дохода с учётом премии (get_total_income); -# проверить работу примера на реальных данных: создать экземпляры класса Position, передать данные, -# проверить значения атрибутов, вызвать методы экземпляров. - -class Worker: - - def __init__(self, name, surname, position, wage, bonus): - self.name = name - self.surname = surname - self.position = position - self._income = {"wage": wage, "bonus": bonus} - - -class Position(Worker): - - def __init__(self, name, surname, position, wage, bonus): - super().__init__(name, surname, position, wage, bonus) - - def get_full_name(self): - return f'{self.name} {self.surname}' - - def get_total_income(self): - return self._income.get('wage') + self._income.get('bonus') - - - -res = Position('Иван', 'Петров', 'Грузчик', 50000, 3000) -print(res.get_full_name()) -print(res.position) -print(res.get_total_income()) From 92e5ee1f58a3f4d60943e8c1ba7e10bb0315b4fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Fri, 10 Feb 2023 12:01:21 +1100 Subject: [PATCH 44/58] Delete Less_2.py --- Less_2.py | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 Less_2.py diff --git a/Less_2.py b/Less_2.py deleted file mode 100644 index 523f121..0000000 --- a/Less_2.py +++ /dev/null @@ -1,24 +0,0 @@ -# 2. Реализовать класс Road (дорога). -# определить атрибуты: length (длина), width (ширина); -# значения атрибутов должны передаваться при создании экземпляра класса; -# атрибуты сделать защищёнными; -# определить метод расчёта массы асфальта, необходимого для покрытия всей дороги; -# использовать формулу: длина*ширина*масса асфальта для покрытия одного кв. метра дороги асфальтом, -# толщиной в 1 см*число см толщины полотна; -# проверить работу метода. -# Например: 20 м*5000 м*25 кг*5 см = 12500 т. - -class Road: - def __init__(self, _length, _width): - self._length = _length - self._width = _width - - def mass(self): - self.weight = 25 - self.thickness = 0.05 - return self._length * self._width * self.weight * self.thickness - - -r = Road(20, 5000) - -print(r.mass()) From 815dbcda23dbed5deaf885cea89cd7a4ef9832bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Fri, 10 Feb 2023 12:01:28 +1100 Subject: [PATCH 45/58] Delete Less_1.py --- Less_1.py | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 Less_1.py diff --git a/Less_1.py b/Less_1.py deleted file mode 100644 index 1c9a0de..0000000 --- a/Less_1.py +++ /dev/null @@ -1,27 +0,0 @@ -# 1. Создать класс TrafficLight (светофор). -# определить у него один атрибут color (цвет) и метод running (запуск); -# атрибут реализовать как приватный; -# в рамках метода реализовать переключение светофора в режимы: красный, жёлтый, зелёный; -# продолжительность первого состояния (красный) составляет 7 секунд, второго -# (жёлтый) — 2 секунды, третьего (зелёный) — на ваше усмотрение; -# переключение между режимами должно осуществляться только в указанном порядке (красный, жёлтый, зелёный); -# проверить работу примера, создав экземпляр и вызвав описанный метод. -# Задачу можно усложнить, реализовав проверку порядка режимов. -# При его нарушении выводить соответствующее сообщение и завершать скрипт. - -import time -class TrafficLight: - __color = ['Красный', 'Желтый', 'Зеленый'] - - def running(self): - for i in range(3): - print(f'Светофор горит: {TrafficLight.__color[i]}') - if TrafficLight.__color[i] == 'Красный': - time.sleep(7) - elif TrafficLight.__color[i] == 'Желтый': - time.sleep(2) - elif TrafficLight.__color[i] == 'Зеленный': - time.sleep(5) - -a = TrafficLight() -a.running() From 6ea702850c40e55c3018e40efbc4b818235a8186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Fri, 10 Feb 2023 12:02:26 +1100 Subject: [PATCH 46/58] Practical work 7 --- Less_1.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Less_1.py diff --git a/Less_1.py b/Less_1.py new file mode 100644 index 0000000..65aaf7f --- /dev/null +++ b/Less_1.py @@ -0,0 +1,43 @@ +# 1. Реализовать класс Matrix (матрица). Обеспечить перегрузку конструктора класса +# (метод __init__()), который должен принимать данные (список списков) для формирования матрицы. +# Подсказка: матрица — система некоторых математических величин, расположенных в виде прямоугольной схемы. +# Примеры матриц: 3 на 2, 3 на 3, 2 на 4. +# +# 31 32 3 5 32 3 5 8 3 +# 37 43 2 4 6 8 3 7 1 +# 51 86 -1 64 -8 +# Следующий шаг — реализовать перегрузку метода __str__() для вывода матрицы в привычном виде. +# Далее реализовать перегрузку метода __add__() для реализации операции сложения двух объектов класса +# Matrix (двух матриц). Результатом сложения должна быть новая матрица. +# Подсказка: сложение элементов матриц выполнять поэлементно — первый элемент первой строки первой матрицы +# складываем с первым элементом первой строки второй матрицы и т.д. + +class Matrix: + def __init__(self, list_1, list_2): + self.list_1 = list_1 + self.list_2 = list_2 + + def __add__(self): + matr = [[0, 0, 0], + [0, 0, 0], + [0, 0, 0]] + + for i in range(len(self.list_1)): + + for j in range(len(self.list_2[i])): + matr[i][j] = self.list_1[i][j] + self.list_2[i][j] + + return str('\n'.join(['\t'.join([str(j) for j in i]) for i in matr])) + + def __str__(self): + return str('\n'.join(['\t'.join([str(j) for j in i]) for i in matr])) + + +my_matrix = Matrix([[5, 18, 11], + [6, 17, 23], + [41, 50, 9]], + [[45, 8, 2], + [6, 7, 93], + [24, 5, 97]]) + +print(my_matrix.__add__()) From 92f8ea557e13aba04ac98ef621a1130fa2d2e317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Fri, 10 Feb 2023 12:03:06 +1100 Subject: [PATCH 47/58] Practical work 7 --- Less_2.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Less_2.py diff --git a/Less_2.py b/Less_2.py new file mode 100644 index 0000000..1a1d0af --- /dev/null +++ b/Less_2.py @@ -0,0 +1,51 @@ +# 2. Реализовать проект расчёта суммарного расхода ткани на производство одежды. +# Основная сущность (класс) этого проекта — одежда, которая может иметь определённое название. +# К типам одежды в этом проекте относятся пальто и костюм. У этих типов одежды существуют параметры: +# размер (для пальто) и рост (для костюма). Это могут быть обычные числа: V и H, соответственно. +# Для определения расхода ткани по каждому типу одежды использовать формулы: +# для пальто (V/6.5 + 0.5), для костюма (2*H + 0.3). Проверить работу этих методов на реальных данных. +# Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке знания: +# реализовать абстрактные классы для основных классов проекта, проверить на практике работу декоратора @property. + +class Textil: + def __init__(self, width, height): + self.width = width + self.height = height + + def get_square_c(self): + return self.width / 6.5 + 0.5 + + def get_square_j(self): + return self.height * 2 + 0.3 + + @property + def get_sq_full(self): + return str(f'Площадь общая ткани \n' + f' {(self.width / 6.5 + 0.5) + (self.height * 2 + 0.3)}') + + +class Coat(Textil): + def __init__(self, width, height): + super().__init__(width, height) + self.square_c = round(self.width / 6.5 + 0.5) + + def __str__(self): + return f'Площадь на пальто {self.square_c}' + + +class Jacket(Textil): + def __init__(self, width, height): + super().__init__(width, height) + self.square_j = round(self.height * 2 + 0.3) + + def __str__(self): + return f'Площадь на костюм {self.square_j}' + +coat = Coat(2, 4) +jacket = Jacket(1, 2) +print(coat) +print(jacket) +print(coat.get_sq_full) +print(jacket.get_sq_full) +print(jacket.get_square_c()) +print(jacket.get_square_j()) From 88c059b3df5ef2fa0df07f4d0ebaa564840fc378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Fri, 10 Feb 2023 12:04:33 +1100 Subject: [PATCH 48/58] Practical work 7 --- Less_3.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Less_3.py diff --git a/Less_3.py b/Less_3.py new file mode 100644 index 0000000..109a8f7 --- /dev/null +++ b/Less_3.py @@ -0,0 +1,70 @@ +# 3. Реализовать программу работы с органическими клетками, состоящими из ячеек. +# Необходимо создать класс Клетка. В его конструкторе инициализировать параметр, +# соответствующий количеству ячеек клетки (целое число). В классе должны быть +# реализованы методы перегрузки арифметических операторов: сложение (__add__()), +# вычитание (__sub__()), умножение (__mul__()), деление (__truediv__()). +# Данные методы должны применяться только к клеткам и выполнять увеличение, уменьшение, +# умножение и целочисленное (с округлением до целого) деление клеток, соответственно. +# Сложение. Объединение двух клеток. При этом число ячеек общей клетки должно равняться +# сумме ячеек исходных двух клеток. +# Вычитание. Участвуют две клетки. Операцию необходимо выполнять только если разность +# количества ячеек двух клеток больше нуля, иначе выводить соответствующее сообщение. +# Умножение. Создаётся общая клетка из двух. Число ячеек общей клетки определяется как +# произведение количества ячеек этих двух клеток. +# Деление. Создаётся общая клетка из двух. Число ячеек общей клетки определяется как +# целочисленное деление количества ячеек этих двух клеток. +# +# В классе необходимо реализовать метод make_order(), принимающий экземпляр класса и +# количество ячеек в ряду. Данный метод позволяет организовать ячейки по рядам. +# Метод должен возвращать строку вида *****\n*****\n*****..., где количество ячеек между \n +# равно переданному аргументу. Если ячеек на формирование ряда не хватает, то в последний +# ряд записываются все оставшиеся. +# Например, количество ячеек клетки равняется 12, количество ячеек в ряду — 5. +# Тогда метод make_order() вернёт строку: *****\n*****\n**. +# Или, количество ячеек клетки равняется 15, количество ячеек в ряду — 5. +# Тогда метод make_order() вернёт строку: *****\n*****\n*****. +# Подсказка: подробный список операторов для перегрузки доступен по ссылке. + +class Cell: + def __init__(self, quantity): + self.quantity = int(quantity) + + def __str__(self): + return f'Результат операции {self.quantity * "*"}' + + def __add__(self, other): + return Cell(self.quantity + other.quantity) + + def __sub__(self, other): + ''' + Выдает ошибку о том, что результат не число при вычислении + if int(Cell(self.quantity - other.quantity)) > 0: + return Cell(int(self.quantity - other.quantity)) + else: + return f'Операция вычитания невозможна'"" + ''' + return self.quantity - other.quantity if (self.quantity - other.quantity) > 0 else print('Отрицательно!') + + + def __mul__(self, other): + return Cell(int(self.quantity * other.quantity)) + + def __truediv__(self, other): + return Cell(round(self.quantity // other.quantity)) + + + def make_order(self, cells_in_row): + row = '' + for i in range(int(self.quantity / cells_in_row)): + row += f'{"*" * cells_in_row} \\n' + row += f'{"*" * (self.quantity % cells_in_row)}' + return row + +cells1 = Cell(33) +cells2 = Cell(9) +print(cells1) +print(cells1 + cells2) +print(cells2 - cells1) +print(cells2.make_order(5)) +print(cells1.make_order(10)) +print(cells1 / cells2) From 17e919769a1a1eee9c8115eba26b15950922c495 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:10:00 +1100 Subject: [PATCH 49/58] Delete Less_1.py --- Less_1.py | 43 ------------------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 Less_1.py diff --git a/Less_1.py b/Less_1.py deleted file mode 100644 index 65aaf7f..0000000 --- a/Less_1.py +++ /dev/null @@ -1,43 +0,0 @@ -# 1. Реализовать класс Matrix (матрица). Обеспечить перегрузку конструктора класса -# (метод __init__()), который должен принимать данные (список списков) для формирования матрицы. -# Подсказка: матрица — система некоторых математических величин, расположенных в виде прямоугольной схемы. -# Примеры матриц: 3 на 2, 3 на 3, 2 на 4. -# -# 31 32 3 5 32 3 5 8 3 -# 37 43 2 4 6 8 3 7 1 -# 51 86 -1 64 -8 -# Следующий шаг — реализовать перегрузку метода __str__() для вывода матрицы в привычном виде. -# Далее реализовать перегрузку метода __add__() для реализации операции сложения двух объектов класса -# Matrix (двух матриц). Результатом сложения должна быть новая матрица. -# Подсказка: сложение элементов матриц выполнять поэлементно — первый элемент первой строки первой матрицы -# складываем с первым элементом первой строки второй матрицы и т.д. - -class Matrix: - def __init__(self, list_1, list_2): - self.list_1 = list_1 - self.list_2 = list_2 - - def __add__(self): - matr = [[0, 0, 0], - [0, 0, 0], - [0, 0, 0]] - - for i in range(len(self.list_1)): - - for j in range(len(self.list_2[i])): - matr[i][j] = self.list_1[i][j] + self.list_2[i][j] - - return str('\n'.join(['\t'.join([str(j) for j in i]) for i in matr])) - - def __str__(self): - return str('\n'.join(['\t'.join([str(j) for j in i]) for i in matr])) - - -my_matrix = Matrix([[5, 18, 11], - [6, 17, 23], - [41, 50, 9]], - [[45, 8, 2], - [6, 7, 93], - [24, 5, 97]]) - -print(my_matrix.__add__()) From a903767049684cc6719229ec996aba05ba39c6fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:10:08 +1100 Subject: [PATCH 50/58] Delete Less_2.py --- Less_2.py | 51 --------------------------------------------------- 1 file changed, 51 deletions(-) delete mode 100644 Less_2.py diff --git a/Less_2.py b/Less_2.py deleted file mode 100644 index 1a1d0af..0000000 --- a/Less_2.py +++ /dev/null @@ -1,51 +0,0 @@ -# 2. Реализовать проект расчёта суммарного расхода ткани на производство одежды. -# Основная сущность (класс) этого проекта — одежда, которая может иметь определённое название. -# К типам одежды в этом проекте относятся пальто и костюм. У этих типов одежды существуют параметры: -# размер (для пальто) и рост (для костюма). Это могут быть обычные числа: V и H, соответственно. -# Для определения расхода ткани по каждому типу одежды использовать формулы: -# для пальто (V/6.5 + 0.5), для костюма (2*H + 0.3). Проверить работу этих методов на реальных данных. -# Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке знания: -# реализовать абстрактные классы для основных классов проекта, проверить на практике работу декоратора @property. - -class Textil: - def __init__(self, width, height): - self.width = width - self.height = height - - def get_square_c(self): - return self.width / 6.5 + 0.5 - - def get_square_j(self): - return self.height * 2 + 0.3 - - @property - def get_sq_full(self): - return str(f'Площадь общая ткани \n' - f' {(self.width / 6.5 + 0.5) + (self.height * 2 + 0.3)}') - - -class Coat(Textil): - def __init__(self, width, height): - super().__init__(width, height) - self.square_c = round(self.width / 6.5 + 0.5) - - def __str__(self): - return f'Площадь на пальто {self.square_c}' - - -class Jacket(Textil): - def __init__(self, width, height): - super().__init__(width, height) - self.square_j = round(self.height * 2 + 0.3) - - def __str__(self): - return f'Площадь на костюм {self.square_j}' - -coat = Coat(2, 4) -jacket = Jacket(1, 2) -print(coat) -print(jacket) -print(coat.get_sq_full) -print(jacket.get_sq_full) -print(jacket.get_square_c()) -print(jacket.get_square_j()) From 8c0966183e7d577a779beecd75fbfcfff90b7f0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:10:16 +1100 Subject: [PATCH 51/58] Delete Less_3.py --- Less_3.py | 70 ------------------------------------------------------- 1 file changed, 70 deletions(-) delete mode 100644 Less_3.py diff --git a/Less_3.py b/Less_3.py deleted file mode 100644 index 109a8f7..0000000 --- a/Less_3.py +++ /dev/null @@ -1,70 +0,0 @@ -# 3. Реализовать программу работы с органическими клетками, состоящими из ячеек. -# Необходимо создать класс Клетка. В его конструкторе инициализировать параметр, -# соответствующий количеству ячеек клетки (целое число). В классе должны быть -# реализованы методы перегрузки арифметических операторов: сложение (__add__()), -# вычитание (__sub__()), умножение (__mul__()), деление (__truediv__()). -# Данные методы должны применяться только к клеткам и выполнять увеличение, уменьшение, -# умножение и целочисленное (с округлением до целого) деление клеток, соответственно. -# Сложение. Объединение двух клеток. При этом число ячеек общей клетки должно равняться -# сумме ячеек исходных двух клеток. -# Вычитание. Участвуют две клетки. Операцию необходимо выполнять только если разность -# количества ячеек двух клеток больше нуля, иначе выводить соответствующее сообщение. -# Умножение. Создаётся общая клетка из двух. Число ячеек общей клетки определяется как -# произведение количества ячеек этих двух клеток. -# Деление. Создаётся общая клетка из двух. Число ячеек общей клетки определяется как -# целочисленное деление количества ячеек этих двух клеток. -# -# В классе необходимо реализовать метод make_order(), принимающий экземпляр класса и -# количество ячеек в ряду. Данный метод позволяет организовать ячейки по рядам. -# Метод должен возвращать строку вида *****\n*****\n*****..., где количество ячеек между \n -# равно переданному аргументу. Если ячеек на формирование ряда не хватает, то в последний -# ряд записываются все оставшиеся. -# Например, количество ячеек клетки равняется 12, количество ячеек в ряду — 5. -# Тогда метод make_order() вернёт строку: *****\n*****\n**. -# Или, количество ячеек клетки равняется 15, количество ячеек в ряду — 5. -# Тогда метод make_order() вернёт строку: *****\n*****\n*****. -# Подсказка: подробный список операторов для перегрузки доступен по ссылке. - -class Cell: - def __init__(self, quantity): - self.quantity = int(quantity) - - def __str__(self): - return f'Результат операции {self.quantity * "*"}' - - def __add__(self, other): - return Cell(self.quantity + other.quantity) - - def __sub__(self, other): - ''' - Выдает ошибку о том, что результат не число при вычислении - if int(Cell(self.quantity - other.quantity)) > 0: - return Cell(int(self.quantity - other.quantity)) - else: - return f'Операция вычитания невозможна'"" - ''' - return self.quantity - other.quantity if (self.quantity - other.quantity) > 0 else print('Отрицательно!') - - - def __mul__(self, other): - return Cell(int(self.quantity * other.quantity)) - - def __truediv__(self, other): - return Cell(round(self.quantity // other.quantity)) - - - def make_order(self, cells_in_row): - row = '' - for i in range(int(self.quantity / cells_in_row)): - row += f'{"*" * cells_in_row} \\n' - row += f'{"*" * (self.quantity % cells_in_row)}' - return row - -cells1 = Cell(33) -cells2 = Cell(9) -print(cells1) -print(cells1 + cells2) -print(cells2 - cells1) -print(cells2.make_order(5)) -print(cells1.make_order(10)) -print(cells1 / cells2) From 146cfe4700eb5d917702ae9f259846f855192fa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:10:49 +1100 Subject: [PATCH 52/58] Practical work 8 --- Less_1.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Less_1.py diff --git a/Less_1.py b/Less_1.py new file mode 100644 index 0000000..06185f4 --- /dev/null +++ b/Less_1.py @@ -0,0 +1,45 @@ +# 1. Реализовать класс «Дата», функция-конструктор которого должна принимать +# дату в виде строки формата «день-месяц-год». В рамках класса реализовать два метода. +# Первый, с декоратором @classmethod, должен извлекать число, месяц, +# год и преобразовывать их тип к типу «Число». Второй, с декоратором @staticmethod, +# должен проводить валидацию числа, месяца и года (например, месяц — от 1 до 12). +# Проверить работу полученной структуры на реальных данных. + +class Data: + def __init__(self, day_month_year): + self.day_month_year = str(day_month_year) + + @classmethod + def extract(cls, day_month_year): + my_date = [] + + for i in day_month_year.split(): + if i != '-': my_date.append(i) + + return int(my_date[0]), int(my_date[1]), int(my_date[2]) + + @staticmethod + def valid(day, month, year): + + if 1 <= day <= 31: + if 1 <= month <= 12: + if 2019 >= year >= 0: + return f'All right' + else: + return f'Неправильный год' + else: + return f'Неправильный месяц' + else: + return f'Неправильный день' + + def __str__(self): + return f'Текущая дата {Data.extract(self.day_month_year)}' + + +today = Data('11 - 1 - 2001') +print(today) +print(Data.valid(11, 11, 2022)) +print(today.valid(11, 13, 2011)) +print(Data.extract('11 - 11 - 2011')) +print(today.extract('11 - 11 - 2020')) +print(Data.valid(1, 11, 2000)) From 6c6576519cc21fdf4fc3faf10fdd49a8b9cca35d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:11:13 +1100 Subject: [PATCH 53/58] Practical work 8 --- Less_2.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Less_2.py diff --git a/Less_2.py b/Less_2.py new file mode 100644 index 0000000..a80093d --- /dev/null +++ b/Less_2.py @@ -0,0 +1,23 @@ +# 2. Создайте собственный класс-исключение, обрабатывающий ситуацию деления на нуль. +# Проверьте его работу на данных, вводимых пользователем. При вводе пользователем +# нуля в качестве делителя программа должна корректно обработать эту ситуацию и +# не завершиться с ошибкой. + + +class DivisionByNull: + def __init__(self, divider, denominator): + self.divider = divider + self.denominator = denominator + + @staticmethod + def divide_by_null(divider, denominator): + try: + return (divider / denominator) + except: + return (f"Деление на ноль недопустимо") + + +div = DivisionByNull(10, 100) +print(DivisionByNull.divide_by_null(10, 0)) +print(DivisionByNull.divide_by_null(10, 0.1)) +print(div.divide_by_null(100, 0)) From f72945794b5788b60a59bb87a57ee00fa85bd308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:11:34 +1100 Subject: [PATCH 54/58] Practical work 8 --- Less_3.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Less_3.py diff --git a/Less_3.py b/Less_3.py new file mode 100644 index 0000000..306826a --- /dev/null +++ b/Less_3.py @@ -0,0 +1,31 @@ +# 3. Создайте собственный класс-исключение, который должен проверять содержимое списка +# на отсутствие элементов типа строка и булево. Проверить работу исключения на реальном примере. +# Необходимо запрашивать у пользователя данные и заполнять список. +# Класс-исключение должен контролировать типы данных элементов списка. + + +class Error: + def __init__(self, *args): + self.my_list = [] + + def my_input(self): + + + while True: + try: + val = int(input('Введите значения и нажимайте Enter - ')) + self.my_list.append(val) + print(f'Текущий список - {self.my_list} \n ') + except: + print(f"Недопустимое значение - строка и булево") + y_or_n = input(f'Попробовать еще раз? Y/N ') + + if y_or_n == 'Y' or y_or_n == 'y': + print(try_except.my_input()) + elif y_or_n == 'N' or y_or_n == 'n': + return f'Вы вышли' + else: + return f'Вы вышли' + +try_except = Error(1) +print(try_except.my_input()) From 1ddac2a084ed6c4214d7474e0703e20761ee163d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:11:57 +1100 Subject: [PATCH 55/58] Practical work 8 --- Less_4.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Less_4.py diff --git a/Less_4.py b/Less_4.py new file mode 100644 index 0000000..fbee49a --- /dev/null +++ b/Less_4.py @@ -0,0 +1,55 @@ +# 4. Начните работу над проектом «Склад оргтехники». Создайте класс, описывающий склад. +# А также класс «Оргтехника», который будет базовым для классов-наследников. +# Эти классы — конкретные типы оргтехники (принтер, сканер, ксерокс). +# В базовом классе определить параметры, общие для приведенных типов. +# В классах-наследниках реализовать параметры, уникальные для каждого типа оргтехники. + +class Sklad: + def __init__(self): + self._dict = {} + + +class Equipment: + def __init__(self, name, make, year): + self.name = name + self.make = make + self.year = year + self.group = self.__class__.__name__ + + def group_name(self): + return f'{self.group}' + + def __repr__(self): + return f'{self.name} {self.make} {self.year}' + + +class Printer(Equipment): + def __init__(self, series, name, make, year): + super().__init__(name, make, year) + self.series = series + + def __repr__(self): + return f'{self.name} {self.series} {self.make} {self.year}' + + def action(self): + return 'Печатает' + + +class Scaner(Equipment): + def __init__(self, name, make, year): + super().__init__(name, make, year) + + def action(self): + return 'Сканирует' + + +class Xerox(Sklad): + def __init__(self, name, make, year): + super().__init__(name, make, year) + + def action(self): + return 'Копирует' + + +sklad = Sklad() +print(sklad.__dict__) From 31e376863947bfb559892176e51c370ece42abe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:12:19 +1100 Subject: [PATCH 56/58] Practical work 8 --- Less_5.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Less_5.py diff --git a/Less_5.py b/Less_5.py new file mode 100644 index 0000000..4555d16 --- /dev/null +++ b/Less_5.py @@ -0,0 +1,41 @@ +# 5. Продолжить работу над первым заданием. Разработать методы, отвечающие за приём оргтехники +# на склад и передачу в определенное подразделение компании. Для хранения данных +# о наименовании и количестве единиц оргтехники, а также других данных, можно использовать +# любую подходящую структуру (например словарь). + +class Sklad: + def __init__(self): + self._dict = {} + + def add_to(self, equipment): + self._dict.setdefault(equipment.group_name(), []).append(equipment) + + def extract(self, name): + if self._dict[name]: + self._dict.setdefault(name).pop(0) + + +class Equipment: + def __init__(self, name, make, year): + self.name = name + self.make = make + self.year = year + self.group = self.__class__.__name__ + + def group_name(self): + return f'{self.group}' + + def __repr__(self): + return f'{self.name} {self.make} {self.year}' + + +class Printer(Equipment): + def __init__(self, series, name, make, year): + super().__init__(name, make, year) + self.series = series + + def __repr__(self): + return f'{self.name} {self.series} {self.make} {self.year}' + + def action(self): + return 'Печатает' From 4bd25a98b285377367a5b61106fd77bca956bdd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:12:45 +1100 Subject: [PATCH 57/58] Practical work 8 --- Less_6.py | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Less_6.py diff --git a/Less_6.py b/Less_6.py new file mode 100644 index 0000000..8c62189 --- /dev/null +++ b/Less_6.py @@ -0,0 +1,67 @@ +# 6. Продолжить работу над вторым заданием. Реализуйте механизм валидации вводимых +# пользователем данных. Например, для указания количества принтеров, отправленных +# на склад, нельзя использовать строковый тип данных. +# Подсказка: постарайтесь по возможности реализовать в проекте «Склад оргтехники» +# максимум возможностей, изученных на уроках по ООП. + + +class StoreMashines: + + def __init__(self, name, price, quantity, number_of_lists, *args): + self.name = name + self.price = price + self.quantity = quantity + self.numb = number_of_lists + self.my_store_full = [] + self.my_store = [] + self.my_unit = {'Модель устройства': self.name, 'Цена за ед': self.price, 'Количество': self.quantity} + + def __str__(self): + return f'{self.name} цена {self.price} количество {self.quantity}' + + + def reception(self): + try: + unit = input(f'Введите наименование ') + unit_p = int(input(f'Введите цену за ед ')) + unit_q = int(input(f'Введите количество ')) + unique = {'Модель устройства': unit, 'Цена за ед': unit_p, 'Количество': unit_q} + self.my_unit.update(unique) + self.my_store.append(self.my_unit) + print(f'Текущий список -\n {self.my_store}') + except: + return f'Ошибка ввода данных' + + print(f'Для выхода - Q, продолжение - Enter') + q = input(f'---> ') + if q == 'Q' or q == 'q': + self.my_store_full.append(self.my_store) + print(f'Весь склад -\n {self.my_store_full}') + return f'Выход' + else: + return StoreMashines.reception(self) + + +class Printer(StoreMashines): + def to_print(self): + return f'to print smth {self.numb} times' + + +class Scanner(StoreMashines): + def to_scan(self): + return f'to scan smth {self.numb} times' + + +class Copier(StoreMashines): + def to_copier(self): + return f'to copier smth {self.numb} times' + + +unit_1 = Printer('hp', 2000, 5, 10) +unit_2 = Scanner('Canon', 1200, 5, 10) +unit_3 = Copier('Xerox', 1500, 1, 15) +print(unit_1.reception()) +print(unit_2.reception()) +print(unit_3.reception()) +print(unit_1.to_print()) +print(unit_3.to_copier()) From ec9cefd06896343979c0f7bae7293088e6fdc224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=9F=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=9F=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D1=8B=D0=B9?= <99702662+evgeniypogoreliy@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:13:19 +1100 Subject: [PATCH 58/58] Praticical work 8 --- Less_7.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Less_7.py diff --git a/Less_7.py b/Less_7.py new file mode 100644 index 0000000..525ff74 --- /dev/null +++ b/Less_7.py @@ -0,0 +1,31 @@ +# 7. Реализовать проект «Операции с комплексными числами». Создайте класс «Комплексное число», +# реализуйте перегрузку методов сложения и умножения комплексных чисел. +# Проверьте работу проекта, создав экземпляры класса (комплексные числа) и +# выполнив сложение и умножение созданных экземпляров. +# Проверьте корректность полученного результата. + + + +class ComplexNumber: + def __init__(self, a, b, *args): + self.a = a + self.b = b + self.z = 'a + b * i' + + def __add__(self, other): + print(f'Сумма z1 и z2 равна') + return f'z = {self.a + other.a} + {self.b + other.b} * i' + + def __mul__(self, other): + print(f'Произведение z1 и z2 равно') + return f'z = {self.a * other.a - (self.b * other.b)} + {self.b * other.a} * i' + + def __str__(self): + return f'z = {self.a} + {self.b} * i' + + +z_1 = ComplexNumber(1, -2) +z_2 = ComplexNumber(3, 4) +print(z_1) +print(z_1 + z_2) +print(z_1 * z_2)