From 8fe06fd58695e9f0a7cf72d1dd9c2dc8d20ca54e Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 10 Feb 2020 21:23:51 +0300 Subject: [PATCH 01/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=202.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/task_1.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 lesson02/task_1.py diff --git a/lesson02/task_1.py b/lesson02/task_1.py new file mode 100644 index 0000000..eb7584d --- /dev/null +++ b/lesson02/task_1.py @@ -0,0 +1,8 @@ +# 1. Создать список и заполнить его элементами различных типов данных. +# Реализовать скрипт проверки типа данных каждого элемента. Использовать функцию type() для проверки типа. +# Элементы списка можно не запрашивать у пользователя, а указать явно, в программе. + + +my_list = [1, 1.2, 'soap', False, [1, 2, 3]] +for types in my_list: + print(type(types)) \ No newline at end of file From 0ef8b410cdc5dfffcf61eeee5fb68bb4a00f9bc1 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 10 Feb 2020 21:24:50 +0300 Subject: [PATCH 02/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=202.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/task_2.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 lesson02/task_2.py diff --git a/lesson02/task_2.py b/lesson02/task_2.py new file mode 100644 index 0000000..ebc7ba6 --- /dev/null +++ b/lesson02/task_2.py @@ -0,0 +1,18 @@ +# 2. Для списка реализовать обмен значений соседних элементов, т.е. +# Значениями обмениваются элементы с индексами 0 и 1, 2 и 3 и т.д. +# При нечетном количестве элементов последний сохранить на своем месте. +# Для заполнения списка элементов необходимо использовать функцию input(). + +#a = input('Введите элементы списка: ') +my_list = [1, 2, 3, 4, 5] +#for i in my_list: +#print(my_list[2::-1]) +print(my_list[:2:]) +#print(my_list.index(5)) + +#print(my_list.reverse()) +#my_list.reverse() +#print(my_list) + +# не хватило времени вникнуть в срезы которые меняют порядок - [::-1] + From 3cbcde41573edb88072dd9b2f6ed6f386e4225f0 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 10 Feb 2020 21:25:11 +0300 Subject: [PATCH 03/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=202.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/task_3.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 lesson02/task_3.py diff --git a/lesson02/task_3.py b/lesson02/task_3.py new file mode 100644 index 0000000..b6757ba --- /dev/null +++ b/lesson02/task_3.py @@ -0,0 +1,39 @@ +# 3. Пользователь вводит месяц в виде целого числа от 1 до 12. +# Сообщить к какому времени года относится месяц (зима, весна, лето, осень). +# Напишите решения через list и через dict. + +mon = int(input('Введите номер месяца: ')) +year = {'зима': (1, 2, 12), 'весна': (3, 4, 5), 'лето': (6, 7, 8), 'осень': (9, 10, 11)} +for key in year.keys(): + if mon in year[key]: + print(key) + break + +# со словарем легко + +month = int(input('Введите номер месяца: ')) +#winter = [1, 2, 12] +#spring = [3, 4, 5] +#summer = [6, 7, 8] +#autumm = [9, 10, 11] +#year = ['winter', 'spring', 'summer', 'autumm'] +#year = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +#print(year[0]) +for season in year: + if month == 1 or 2 or 12: + season = 'winter' + print(season) + break + elif month == 3 or 4 or 5: + season = 'spring' + print(season) + #break + #elif month == 6 or 7 or 8: + #break + #elif month == 9 or 10 or 11: + #season = 'осень' + #print(season) + #break + + +# со списком, не понял как input прикрепить к списку и через цикл вывести \ No newline at end of file From f72041584ae00c19360159a88d38ac0c6101ec8c Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 10 Feb 2020 21:25:34 +0300 Subject: [PATCH 04/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=202.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/task_4.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 lesson02/task_4.py diff --git a/lesson02/task_4.py b/lesson02/task_4.py new file mode 100644 index 0000000..12dd075 --- /dev/null +++ b/lesson02/task_4.py @@ -0,0 +1,18 @@ +# 4. Пользователь вводит строку из нескольких слов, разделённых пробелами. +# # Вывести каждое слово с новой строки. +# # Строки необходимо пронумеровать. +# # Если в слово длинное, выводить только первые 10 букв в слове. + + +words = input('Введите несколько слов через пробел: ').split() +#a = [words] +#for a in words: + +print(len(words)) +#for word in words: + #print(word) +#a = '\n' +#word = '\n'words + + +# стопнулся на том, как разбить строку на слова From 076bc59ef0f7b6b11e59db862af7a23cdf356396 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 10 Feb 2020 21:25:56 +0300 Subject: [PATCH 05/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=202.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/task_5.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 lesson02/task_5.py diff --git a/lesson02/task_5.py b/lesson02/task_5.py new file mode 100644 index 0000000..c6dedf4 --- /dev/null +++ b/lesson02/task_5.py @@ -0,0 +1,9 @@ +# 5. Реализовать структуру «Рейтинг», представляющую собой не возрастающий набор натуральных чисел. +# У пользователя необходимо запрашивать новый элемент рейтинга. +# Если в рейтинге существуют элементы с одинаковыми значениями, +# то новый элемент с тем же значением должен разместиться после них. +# Подсказка. Например, набор натуральных чисел: 7, 5, 3, 3, 2. +# Пользователь ввел число 3. Результат: 7, 5, 3, 3, 3, 2. +# Пользователь ввел число 8. Результат: 8, 7, 5, 3, 3, 2. +# Пользователь ввел число 1. Результат: 7, 5, 3, 3, 2, 1. +# Набор натуральных чисел можно задать непосредственно в коде, например, my_list = [7, 5, 3, 3, 2]. \ No newline at end of file From ee8d73da0b4e943b5d16e1ee06376281909d79ba Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 10 Feb 2020 21:26:16 +0300 Subject: [PATCH 06/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=202.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/task_6.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 lesson02/task_6.py diff --git a/lesson02/task_6.py b/lesson02/task_6.py new file mode 100644 index 0000000..54f8588 --- /dev/null +++ b/lesson02/task_6.py @@ -0,0 +1,21 @@ +# 6. *Реализовать структуру данных «Товары». Она должна представлять собой список кортежей. +# Каждый кортеж хранит информацию об отдельном товаре. +# В кортеже должно быть два элемента — номер товара и словарь с параметрами +# (характеристиками товара: название, цена, количество, единица измерения). +# Структуру нужно сформировать программно, т.е. запрашивать все данные у пользователя. +# Пример готовой структуры: +# [ +# (1, {“название”: “компьютер”, “цена”: 20000, “количество”: 5, “eд”: “шт.”}), +# (2, {“название”: “принтер”, “цена”: 6000, “количество”: 2, “eд”: “шт.”}), +# (3, {“название”: “сканер”, “цена”: 2000, “количество”: 7, “eд”: “шт.”}) +# ] +# Необходимо собрать аналитику о товарах. Реализовать словарь, +# в котором каждый ключ — характеристика товара, например название, +# а значение — список значений-характеристик, например список названий товаров. +# Пример: +# { +# “название”: [“компьютер”, “принтер”, “сканер”], +# “цена”: [20000, 6000, 2000], +# “количество”: [5, 2, 7], +# “ед”: [“шт.”] +# } \ No newline at end of file From 48640f68674a0ab68984fdc45613a04497fc5d39 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Thu, 13 Feb 2020 21:04:52 +0300 Subject: [PATCH 07/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=203.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson03/task_1.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 lesson03/task_1.py diff --git a/lesson03/task_1.py b/lesson03/task_1.py new file mode 100644 index 0000000..1d335b0 --- /dev/null +++ b/lesson03/task_1.py @@ -0,0 +1,13 @@ +# 1. Реализовать функцию, принимающую два числа (позиционные аргументы) и выполняющую их деление. +# Числа запрашивать у пользователя, предусмотреть обработку ситуации деления на ноль. + +def s_div(): + try: + first_n = float(input('Введите первое число: ')) + sec_n = float(input('Введите второе число: ')) + gen_n = first_n / sec_n + except ZeroDivisionError: + print('Деление на ноль') + return + return gen_n +print(s_div()) \ No newline at end of file From afcee37e975b04ff61ca21f7bbba0c08fa675090 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Thu, 13 Feb 2020 21:07:20 +0300 Subject: [PATCH 08/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=203.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson03/task_2.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 lesson03/task_2.py diff --git a/lesson03/task_2.py b/lesson03/task_2.py new file mode 100644 index 0000000..c7355bc --- /dev/null +++ b/lesson03/task_2.py @@ -0,0 +1,8 @@ +# 2. Реализовать функцию, принимающую несколько параметров, описывающих данные пользователя: +# имя, фамилия, год рождения, город проживания, email, телефон. +# Функция должна принимать параметры как именованные аргументы. +# Реализовать вывод данных о пользователе одной строкой. + +def g_unit(name, surname, birth, city, email, phone): + print(name, surname, birth, city, email, phone) +g_unit(name='', surname='', birth='', city='', email='', phone='') \ No newline at end of file From ce321073fea6802d09390e93e250aba9bf107a61 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Thu, 13 Feb 2020 21:07:42 +0300 Subject: [PATCH 09/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=203.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson03/task_3.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 lesson03/task_3.py diff --git a/lesson03/task_3.py b/lesson03/task_3.py new file mode 100644 index 0000000..d9baacb --- /dev/null +++ b/lesson03/task_3.py @@ -0,0 +1,8 @@ +#3. Реализовать функцию my_func(), которая принимает три позиционных аргумента, +# и возвращает сумму наибольших двух аргументов. + +def my_func(a, b, c): + num = [a, b, c] + num.remove(min(a, b, c, key=int)) + return sum(num) +print(my_func(90, 8, 4)) \ No newline at end of file From 625a8cb9df1de9a527d5d709d32a6f5d3d32e98d Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Thu, 13 Feb 2020 21:07:57 +0300 Subject: [PATCH 10/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=203.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson03/task_4.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 lesson03/task_4.py diff --git a/lesson03/task_4.py b/lesson03/task_4.py new file mode 100644 index 0000000..00019d7 --- /dev/null +++ b/lesson03/task_4.py @@ -0,0 +1,31 @@ +# 4. Программа принимает действительное положительное число x и целое отрицательное число y. +# Необходимо выполнить возведение числа x в степень y. Задание необходимо реализовать в виде функции my_func(x, y). +# При решении задания необходимо обойтись без встроенной функции возведения числа в степень. +# Подсказка: попробуйте решить задачу двумя способами. +# Первый — возведение в степень с помощью оператора **. +# Второй — более сложная реализация без оператора **, предусматривающая использование цикла. + + +def my_func(x, y): + return x ** abs(y) + +print(my_func(3, -3)) + + +#def my_func(x, y): + #for i in range(abs(y-1)): + #b = i * x + #return b + + + + +#print(my_func(2, -2)) + + + + + + + + From 2c2f826ba31a43d6cfdff65e92b14bc0483c38db Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Thu, 13 Feb 2020 21:08:11 +0300 Subject: [PATCH 11/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=203.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson03/task_5.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 lesson03/task_5.py diff --git a/lesson03/task_5.py b/lesson03/task_5.py new file mode 100644 index 0000000..960e191 --- /dev/null +++ b/lesson03/task_5.py @@ -0,0 +1,26 @@ +# 5. Программа запрашивает у пользователя строку чисел, разделенных пробелом. +# # При нажатии Enter должна выводиться сумма чисел. +# Пользователь может продолжить ввод чисел, разделенных пробелом и снова нажать Enter. +# Сумма вновь введенных чисел будет добавляться к уже подсчитанной сумме. +# Но если вместо числа вводится специальный символ, выполнение программы завершается. +# Если специальный символ введен после нескольких чисел, +# то вначале нужно добавить сумму этих чисел к полученной ранее сумме и после этого завершить программу. + + +line = list(input('Введите числа: ')) +num = int(line) +result = sum(line) +print(result) + +#list(map(int, "42 0".split())) + +#aa = input('введите числа') +#dd = aa.split(" : ") +#print(dd) + + + + + + + From 448b7600d5c0ae4a1b2b69270672538d46ca4263 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Thu, 13 Feb 2020 21:08:27 +0300 Subject: [PATCH 12/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=203.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson03/task_6.py | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 lesson03/task_6.py diff --git a/lesson03/task_6.py b/lesson03/task_6.py new file mode 100644 index 0000000..79182e2 --- /dev/null +++ b/lesson03/task_6.py @@ -0,0 +1,7 @@ +# 6. Реализовать функцию int_func(), принимающую слово из маленьких латинских букв и возвращающую его же, +# но с прописной первой буквой. Например, print(int_func(‘text’)) -> Text. +# Продолжить работу над заданием. +# В программу должна попадать строка из слов, разделенных пробелом. +# Каждое слово состоит из латинских букв в нижнем регистре. +# Сделать вывод исходной строки, но каждое слово должно начинаться с заглавной буквы. +# Необходимо использовать написанную ранее функцию int_func(). \ No newline at end of file From 4a08b2b3632a6fd4fd71c943b8b7bf39031a2479 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 17 Feb 2020 20:46:50 +0300 Subject: [PATCH 13/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=204.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson04/task_1.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 lesson04/task_1.py diff --git a/lesson04/task_1.py b/lesson04/task_1.py new file mode 100644 index 0000000..211a148 --- /dev/null +++ b/lesson04/task_1.py @@ -0,0 +1,6 @@ +# 1. Реализовать скрипт, в котором должна быть предусмотрена функция расчета заработной платы сотрудника. +# В расчете необходимо использовать формулу: +# (выработка в часах * ставка в час) + премия. +# Для выполнения расчета для конкретных значений необходимо запускать скрипт с параметрами. + + From 6e9351d3bdd7a59f2d513cd401076e732bcdae43 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 17 Feb 2020 20:47:39 +0300 Subject: [PATCH 14/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=204.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson04/task_2.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 lesson04/task_2.py diff --git a/lesson04/task_2.py b/lesson04/task_2.py new file mode 100644 index 0000000..bbfb414 --- /dev/null +++ b/lesson04/task_2.py @@ -0,0 +1,10 @@ +# 2. Представлен список чисел. +# Необходимо вывести элементы исходного списка, значения которых больше предыдущего элемента. +#Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. +# Для формирования списка использовать генератор. + + +a = [0, 1, 2, 4, 5, 6, 5] +b = [el for el in a if el > el - 1] +print(b) + From 30c32a57517d0a7301414f82ab03defad4a54006 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 17 Feb 2020 20:48:01 +0300 Subject: [PATCH 15/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=204.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson04/task_3.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 lesson04/task_3.py diff --git a/lesson04/task_3.py b/lesson04/task_3.py new file mode 100644 index 0000000..f0a79a2 --- /dev/null +++ b/lesson04/task_3.py @@ -0,0 +1,5 @@ +# 3. Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. Необходимо решить задание в одну строку. +# Подсказка: использовать функцию range() и генератор. + +my_list = [el for el in range(20, 240) if el % 20 == 0 or el % 21 == 0] +print(my_list) From 7c7526007dada1ac2ee96419855ae45c484db522 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 17 Feb 2020 20:48:21 +0300 Subject: [PATCH 16/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=204.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson04/task_4.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 lesson04/task_4.py diff --git a/lesson04/task_4.py b/lesson04/task_4.py new file mode 100644 index 0000000..b35d971 --- /dev/null +++ b/lesson04/task_4.py @@ -0,0 +1,10 @@ +# 4. Представлен список чисел. +# Определить элементы списка, не имеющие повторений. +# Сформировать итоговый массив чисел, соответствующих требованию. +# Элементы вывести в порядке их следования в исходном списке. +# Для выполнения задания обязательно использовать генератор. + + +my_list = [1, 5, 3, 3, 4, 4, 7, 2, 9] +new_list = [el for el in set(my_list)] +print(new_list) \ No newline at end of file From c4590ffe8baf48c2054906e68675d46d3c9abc63 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 17 Feb 2020 20:48:41 +0300 Subject: [PATCH 17/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=204.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson04/task_5.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 lesson04/task_5.py diff --git a/lesson04/task_5.py b/lesson04/task_5.py new file mode 100644 index 0000000..6cf2a52 --- /dev/null +++ b/lesson04/task_5.py @@ -0,0 +1,10 @@ +# 5. Реализовать формирование списка, используя функцию range() и возможности генератора. +# В список должны войти четные числа от 100 до 1000 (включая границы). +# Необходимо получить результат вычисления произведения всех элементов списка. +# Подсказка: использовать функцию reduce(). + +from functools import reduce + +my_list = [el for el in range(100, 1001) if el % 2 == 0] +new_list = reduce(lambda x, y: x * y, my_list) +print(new_list) \ No newline at end of file From 8c075e7d1bfa3e87bc0878bf27e24d98214162fa Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 17 Feb 2020 20:49:05 +0300 Subject: [PATCH 18/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=204.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson04/task_6.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 lesson04/task_6.py diff --git a/lesson04/task_6.py b/lesson04/task_6.py new file mode 100644 index 0000000..671c025 --- /dev/null +++ b/lesson04/task_6.py @@ -0,0 +1,28 @@ +# 6. Реализовать два небольших скрипта:начиная с указанного, +# а) бесконечный итератор, генерирующий целые числа, +# б) бесконечный итератор, повторяющий элементы некоторого списка, определенного заранее. +# Подсказка: использовать функцию count() и cycle() модуля itertools. + + +from itertools import count, cycle + +for z in count(-100): # 1 + print(z) + if z > 99: + break + + +phone = ['xiaomi', 'iphone', 'samsumg', 'Huawei', 'Sony'] # 2 +iter = cycle(phone) +print(next(iter)) +print(next(iter)) +print(next(iter)) +print(next(iter)) +print(next(iter)) + + + + + + + From 3255c610096c4ffe92f58a919598264fbf533d6b Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 17 Feb 2020 20:49:27 +0300 Subject: [PATCH 19/34] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=204.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson04/task_7.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 lesson04/task_7.py diff --git a/lesson04/task_7.py b/lesson04/task_7.py new file mode 100644 index 0000000..999cfc9 --- /dev/null +++ b/lesson04/task_7.py @@ -0,0 +1,27 @@ +# 7. Реализовать генератор с помощью функции с ключевым словом yield, создающим очередное значение. +# При вызове функции должен создаваться объект-генератор. +# Функция должна вызываться следующим образом: for el in fibo_gen(). +# Функция отвечает за получение факториала числа, а в цикле необходимо выводить только первые 15 чисел. +# Подсказка: факториал числа n — произведение чисел от 1 до n. Например, факториал четырёх 4! = 1 * 2 * 3 * 4 = 24. + + + +def fibo_gen(n): + fac = 1 + for el in range(1, n + 1): + fac *= el + yield fac + +factorial = input(input('factorial yuo would like to know? ')) +for i in fibo_gen(n): + print(i) + + + + + + + + + + From 6d117e93984bf5f62c9a5509a4306840ff6a691a Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Sun, 23 Feb 2020 11:50:27 +0300 Subject: [PATCH 20/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=205.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson05/task_1.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 lesson05/task_1.py diff --git a/lesson05/task_1.py b/lesson05/task_1.py new file mode 100644 index 0000000..235c8ba --- /dev/null +++ b/lesson05/task_1.py @@ -0,0 +1,9 @@ +# 1. Создать программно файл в текстовом формате, записать в него построчно данные, +# вводимые пользователем. +# Об окончании ввода данных свидетельствует пустая строка. + +with open('my_file.txt', 'w') as f: + while True: + line = input('Введите строку: ') + break + f.write(line + '\n') From 834282594ff09e83faf7189084f309c4d2f8a6f5 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Sun, 23 Feb 2020 11:51:04 +0300 Subject: [PATCH 21/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=205.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson05/task_2.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 lesson05/task_2.py diff --git a/lesson05/task_2.py b/lesson05/task_2.py new file mode 100644 index 0000000..c332ab7 --- /dev/null +++ b/lesson05/task_2.py @@ -0,0 +1,8 @@ +# 2. Создать текстовый файл (не программно), сохранить в нем несколько строк, +# выполнить подсчет количества строк, количества слов в каждой строке. + +with open('test.txt') as f: + lines = f.readlines() + print('Колличество строк:', len(lines)) + for num_line, line in enumerate(lines, start=1): + print('{} строка содержит ‚ - {} слов'.format(num_line, len(line.split()))) From d38d8c091a0eb5054b0cadb3dc592c334311f9fd Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Sun, 23 Feb 2020 11:51:21 +0300 Subject: [PATCH 22/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=205.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson05/task_3.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 lesson05/task_3.py diff --git a/lesson05/task_3.py b/lesson05/task_3.py new file mode 100644 index 0000000..f8faf70 --- /dev/null +++ b/lesson05/task_3.py @@ -0,0 +1,15 @@ +# 3. Создать текстовый файл (не программно), построчно записать фамилии сотрудников и величину их окладов. +# Определить, кто из сотрудников имеет оклад менее 20 тыс., вывести фамилии этих сотрудников. +# Выполнить подсчет средней величины дохода сотрудников. + + + +with open('salaries.txt') as f: + salaries = [] + lines = f.readlines() + for line in lines: + name, salary = line.split(' - ') + salaries.append(int(salary)) + if int(salary) < 20000: + print(line, end='') + print('\nСредняя зарплата:', sum(salaries) / len(salaries)) From f9064f932b092b7b5de38864bff0dd88f45a6790 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Sun, 23 Feb 2020 11:51:37 +0300 Subject: [PATCH 23/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=205.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson05/task_4.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 lesson05/task_4.py diff --git a/lesson05/task_4.py b/lesson05/task_4.py new file mode 100644 index 0000000..4596831 --- /dev/null +++ b/lesson05/task_4.py @@ -0,0 +1,24 @@ +# 4. Создать (не программно) текстовый файл со следующим содержимым: +# One — 1 +# Two — 2 +# Three — 3 +# Four — 4 +# Необходимо написать программу, открывающую файл на чтение и считывающую построчно данные. +# При этом английские числительные должны заменяться на русские. +# Новый блок строк должен записываться в новый текстовый файл. + + +with open('eng.txt') as f: + lines = f.readlines() + +with open('rus.txt', 'w') as f: + for line in lines: + if '1' in line: + line = line.replace('One', 'Один') + elif '2' in line: + line = line.replace('Two', 'Два') + elif '3' in line: + line = line.replace('Three', 'Три') + elif '4' in line: + line = line.replace('Four', 'Четыре') + f.write(line) From 014d4ba9a9699b08ed0bc8f06e586cb291fd4dc9 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Sun, 23 Feb 2020 11:51:52 +0300 Subject: [PATCH 24/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=205.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson05/task_5.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 lesson05/task_5.py diff --git a/lesson05/task_5.py b/lesson05/task_5.py new file mode 100644 index 0000000..47dcfef --- /dev/null +++ b/lesson05/task_5.py @@ -0,0 +1,11 @@ +# 5. Создать (программно) текстовый файл, записать в него программно набор чисел, разделенных пробелами. +# Программа должна подсчитывать сумму чисел в файле и выводить ее на экран. + +with open('5.txt', 'w') as f: + nums = input('Введите целые числа через пробел: ') + f.write('Введите числа: ' + nums + '\n') + nums = map(int, nums.split()) # without list + sum_nums = sum(nums) + f.write('Сумма чисел: ' + str(sum_nums)) + print('Сумма введуных чисел:', sum_nums) +print('Все записано в файл') From 928d35ca361f85c58851534265ab50ff5fd60580 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Sun, 23 Feb 2020 11:52:07 +0300 Subject: [PATCH 25/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=205.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson05/task_6.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 lesson05/task_6.py diff --git a/lesson05/task_6.py b/lesson05/task_6.py new file mode 100644 index 0000000..7f69744 --- /dev/null +++ b/lesson05/task_6.py @@ -0,0 +1,23 @@ +# 6. Необходимо создать (не программно) текстовый файл, +# где каждая строка описывает учебный предмет и наличие лекционных, +# практических и лабораторных занятий по этому предмету и их количество. +# Важно, чтобы для каждого предмета не обязательно были все типы занятий. +# Сформировать словарь, содержащий название предмета и общее количество занятий по нему. Вывести словарь на экран. +# Примеры строк файла: +# Информатика: 100(л) 50(пр) 20(лаб). +# Физика: 30(л) — 10(лаб) +# Физкультура: — 30(пр) — + +# Пример словаря: +# {“Информатика”: 170, “Физика”: 40, “Физкультура”: 30} + + +my_dict = dict() +with open('6.txt') as f: + lines = f.readlines() + for line in lines: + splitted_line = line.split() + subject = splitted_line[0] + sum_lessons = sum([int(x[:x.find('(')]) for x in splitted_line[1:] if '(' in x]) + my_dict[subject] = sum_lessons +print(my_dict) From c0a6cf1f3ebeea27a78de5a84ec0ae3e69e8ce7a Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Sun, 23 Feb 2020 11:52:22 +0300 Subject: [PATCH 26/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=205.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson05/task_7.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 lesson05/task_7.py diff --git a/lesson05/task_7.py b/lesson05/task_7.py new file mode 100644 index 0000000..de619e8 --- /dev/null +++ b/lesson05/task_7.py @@ -0,0 +1,36 @@ +# 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}] +# +# Подсказка: использовать менеджеры контекста. + + +import json + +firm_dict = {} +average_profit = [] +with open('7.txt') as f: + lines = f.readlines() + for line in lines: + name, form, revenue, costs = line.split() + profit = int(revenue) - int(costs) + firm_dict[name] = profit + if profit > 0: + average_profit.append(profit) + +average_profit = sum(average_profit) / len(average_profit) +out_info = [firm_dict, {'average_profit': average_profit}] + +with open('7.json', 'w') as f_json: + json.dump(out_info, f_json) + +with open('7.json') as f_json: + print(json.load(f_json)) \ No newline at end of file From 53948c0fd5ea0fad6785b2e295ee40c2b7045619 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 24 Feb 2020 20:35:41 +0300 Subject: [PATCH 27/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=206.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson06/task_1.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 lesson06/task_1.py diff --git a/lesson06/task_1.py b/lesson06/task_1.py new file mode 100644 index 0000000..7a0c946 --- /dev/null +++ b/lesson06/task_1.py @@ -0,0 +1,32 @@ +# 1. Создать класс TrafficLight (светофор) и определить у него один атрибут color (цвет) и метод running (запуск). +# Атрибут реализовать как приватный. +# В рамках метода реализовать переключение светофора в режимы: красный, желтый, зеленый. +# Продолжительность первого состояния (красный) составляет 7 секунд, +# второго (желтый) — 2 секунды, третьего (зеленый) — на ваше усмотрение. +# Переключение между режимами должно осуществляться только в указанном порядке (красный, желтый, зеленый). +# Проверить работу примера, создав экземпляр и вызвав описанный метод. +# Задачу можно усложнить, реализовав проверку порядка режимов, +# и при его нарушении выводить соответствующее сообщение и завершать скрипт. + + +from time import sleep + + +class TrafficLight: + __color = ['red', 'yellow', 'green'] + + def running(self): + i = 0 + while i != 3: + print(TrafficLight.__color[i]) + if i == 0: + sleep(7) + elif i == 1: + sleep(2) + elif i == 2: + sleep(5) + i += 1 + + +a = TrafficLight() +a.running() From 3c10f8d19d7f0cfb22ce0b5308795e2f4c93d029 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 24 Feb 2020 20:36:16 +0300 Subject: [PATCH 28/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=206.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson06/task_2.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 lesson06/task_2.py diff --git a/lesson06/task_2.py b/lesson06/task_2.py new file mode 100644 index 0000000..7dd69c2 --- /dev/null +++ b/lesson06/task_2.py @@ -0,0 +1,23 @@ +# 2. Реализовать класс Road (дорога), в котором определить атрибуты: length (длина), width (ширина). +# Значения данных атрибутов должны передаваться при создании экземпляра класса. Атрибуты сделать защищенными. +# Определить метод расчета массы асфальта, необходимого для покрытия всего дорожного полотна. +# Использовать формулу: длинаширинамасса асфальта для покрытия одного кв метра дороги асфальтом, +# толщиной в 1 см*число см толщины полотна. Проверить работу метода. +# Например: 20м*5000м*25кг*5см = 12500 т + + +class Road: + + def __init__(self, length, width): + self._length = length + self._width = width + self.weight = 32 + self.height = 7 + + def asphalt_mass(self): + asphalt_mass = self._length * self._width * self.weight * self.height / 1000 + print(f'To cover the entire roadway, you must {round(asphalt_mass)} a lot of asphalt') + + +r = Road(7500, 35) +r.asphalt_mass() \ No newline at end of file From c5c1786cf8a008ce0a723abe3af2f3a35624a9b7 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 24 Feb 2020 20:36:29 +0300 Subject: [PATCH 29/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=206.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson06/task_3.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 lesson06/task_3.py diff --git a/lesson06/task_3.py b/lesson06/task_3.py new file mode 100644 index 0000000..158607d --- /dev/null +++ b/lesson06/task_3.py @@ -0,0 +1,34 @@ +#3. Реализовать базовый класс Worker (работник), +# в котором определить атрибуты: name, surname, position (должность), income (доход). +# Последний атрибут должен быть защищенным и ссылаться на словарь, содержащий элементы: +# оклад и премия, например, {"wage": wage, "bonus": bonus}. +# Создать класс Position (должность) на баых +# (создать экземпляры класса Position, передать данные, проверить значения атрибутов, +# вызвать методы экземпляров).зе класса Worker. +# В классе Position реализовать методы получения полного имени сотрудника (get_full_name) +# и дохода с учетом премии (get_total_income). Проверить работу примера на реальных данн + + + +class Worker: + + def __init__(self, name, surname, position, wage, bonus): + self.name = name + self.surname = surname + self.position = position + self._income = {"wage": int(wage), "bonus": int(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 self.name + ' ' + self.surname + + def get_total_income(self): + return self._income["wage"] + self._income["bonus"] + + +a = Position('Sergey', 'Maslov', 'Python Developer', '70000', '30000') +print(a.get_full_name(), a.get_total_income()) \ No newline at end of file From ebe17878cb712bf6d2f3a07947a1304e6d548dfe Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 24 Feb 2020 20:36:43 +0300 Subject: [PATCH 30/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=206.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson06/task_4.py | 64 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 lesson06/task_4.py diff --git a/lesson06/task_4.py b/lesson06/task_4.py new file mode 100644 index 0000000..fdd2797 --- /dev/null +++ b/lesson06/task_4.py @@ -0,0 +1,64 @@ +# 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=True): + self.speed = speed + self.color = color + self.name = name + self.is_police = is_police + + def go(self): + return f'the {self.name} went' + + def stop(self): + return f'the {self.name} was stop' + + def turn(self, direction): + return f'the {self.name} turn{direction}' + + def show_speed(self): + return f'Yuor speed is {self.speed}' + + +class TownCar(Car): + def show_speed(self): + if self.speed > 60: + return f'High speed!!!' + else: + return f'normal speed' + + +class SportCar(Car): + pass + + +class WorkCar(Car): + def show_speed(self): + if self.speed > 40: + return f'High speed!!!' + else: + return f'normal speed' + + +class PoliceCar(Car): + pass + + +town = TownCar() + +sport = SportCar() + +work = WorkCar() + +police = PoliceCar() From 8f81e5bc101b474956c87196e32a2c6937ea2370 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Mon, 24 Feb 2020 20:37:04 +0300 Subject: [PATCH 31/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=206.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson06/task_5.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lesson06/task_5.py diff --git a/lesson06/task_5.py b/lesson06/task_5.py new file mode 100644 index 0000000..c4d24c1 --- /dev/null +++ b/lesson06/task_5.py @@ -0,0 +1,38 @@ +# 5. Реализовать класс Stationery (канцелярская принадлежность). +# Определить в нем атрибут title (название) и метод draw (отрисовка). +# Метод выводит сообщение “Запуск отрисовки.” +# Создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер). +# В каждом из классов реализовать переопределение метода draw. +# Для каждого из классов методы должен выводить уникальное сообщение. +# Создать экземпляры классов и проверить, что выведет описанный метод для каждого экземпляра. + + +class Stationery: + def __init__(self, title): + self.title = title + + def draw(self): + return f'Запуск отрисовки' + + +class Pen(Stationery): + def draw(self): + return f'Запуск отрисовки {self.title}' + + +class Pencil(Stationery): + def draw(self): + return f'Запуск отрисовки {self.title}' + + +class Handle(Stationery): + def draw(self): + return f'Запуск отрисовки {self.title}' + + +pen = Pen('ручкой') +print(pen.draw()) +pencil = Pencil('карандашем') +print(pencil.draw()) +handle = Handle('маркером') +print(handle.draw()) From 104311b3196e2edb79b3a9587bbe7a1fd5d70194 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Sun, 1 Mar 2020 13:31:43 +0300 Subject: [PATCH 32/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=207.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson07/task_1.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 lesson07/task_1.py diff --git a/lesson07/task_1.py b/lesson07/task_1.py new file mode 100644 index 0000000..2223afa --- /dev/null +++ b/lesson07/task_1.py @@ -0,0 +1,39 @@ +# 1. Реализовать класс Matrix (матрица). +# Обеспечить перегрузку конструктора класса (метод init()), +# который должен принимать данные (список списков) для формирования матрицы. +# Подсказка: матрица — система некоторых математических величин, расположенных в виде прямоугольной схемы. +# Примеры матриц вы найдете в методичке. +# Следующий шаг — реализовать перегрузку метода str() для вывода матрицы в привычном виде. +# Далее реализовать перегрузку метода add() для реализации операции сложения двух объектов класса Matrix (двух матриц). +# Результатом сложения должна быть новая матрица. +# Подсказка: сложение элементов матриц выполнять поэлементно — +# первый элемент первой строки первой матрицы складываем с первым элементом первой строки второй матрицы и т.д. + + +class Matrix: + def __init__(self, input_data): + self.input = input_data + + def __str__(self): + return '\n'.join([' '.join([str(elem) for elem in line]) for line in self.input]) + + def __add__(self, other): + answer = '' + if len(self.input) == len(other.input): + for line_1, line_2 in zip(self.input, other.input): + if len(line_1) != len(line_2): + return 'Problems with shape' + + summed_line = [x + y for x, y in zip(line_1, line_2)] + answer += ' '.join([str(i) for i in summed_line]) + '\n' + else: + return 'Problems with shape' + return answer + + +matrix_1 = Matrix([[1, 2], [3, 4], [5, 6], [7, 8]]) +matrix_2 = Matrix([[2, 3], [4, 5], [6, 7], [10, 20]]) + +print(matrix_1) +print() +print(matrix_1 + matrix_2) # matrix_1.__add__(matrix_2) \ No newline at end of file From 15152b82d5e204df38a36da59d4b8cd0f7d84702 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Sun, 1 Mar 2020 13:32:43 +0300 Subject: [PATCH 33/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=207.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson07/task_2.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 lesson07/task_2.py diff --git a/lesson07/task_2.py b/lesson07/task_2.py new file mode 100644 index 0000000..c07d22f --- /dev/null +++ b/lesson07/task_2.py @@ -0,0 +1,54 @@ +# 2. Реализовать проект расчета суммарного расхода ткани на производство одежды. +# Основная сущность (класс) этого проекта — одежда, которая может иметь определенное название. +# К типам одежды в этом проекте относятся пальто и костюм. +# У этих типов одежды существуют параметры: размер (для пальто) и рост (для костюма). +# Это могут быть обычные числа: V и H, соответственно. +# Для определения расхода ткани по каждому типу одежды использовать формулы: +# для пальто (V/6.5 + 0.5), для костюма (2 * H + 0.3). Проверить работу этих методов на реальных данных. +# Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке знания: +# реализовать абстрактные классы для основных классов проекта, проверить на практике работу декоратора @property. + +class Garment: + def __init__(self, size, high): + self.size = size + self.high = high + + def get_area_с(self): + return self.size / 6.5 + 0.5 + + def get_area_b(self): + return self.high * 2 + 0.3 + + @property + def get_area_f(self): + return str(f'общая площадь ткани {(self.size / 6.5 + 0.5) + (self.high * 2 + 0.3)}') + + +class Cloak(Garment): + def __init__(self, size, high): + super().__init__(size, high) + self.area_с = self.size / 6.5 + 0.5 + + def __str__(self): + return f'площадь на плащ {self.area_с}' + + +class Blouse(Garment): + def __init__(self, size, high): + super().__init__(size, high) + self.area_b = self.high * 2 + 0.3 + + def __str__(self): + return f'площадь на кофту {self.area_b}' + + +cloak = Cloak(10, 2) +blouse = Blouse(8, 4) +print(cloak) +print(blouse) +print(cloak.get_area_f) +print(blouse.get_area_f) +print(cloak.area_с) +print(blouse.area_b) + + From 0fb30312a6a729199c3c0af6c1914154781348a5 Mon Sep 17 00:00:00 2001 From: Sergey Maslov Date: Sun, 1 Mar 2020 13:33:16 +0300 Subject: [PATCH 34/34] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=207.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson07/task_3.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 lesson07/task_3.py diff --git a/lesson07/task_3.py b/lesson07/task_3.py new file mode 100644 index 0000000..5942775 --- /dev/null +++ b/lesson07/task_3.py @@ -0,0 +1,58 @@ +#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, nums): + self.nums = nums + + def make_order(self, rows): + return '\n'.join(['*' * rows for _ in range(self.nums // rows)]) + '\n' + '*' * (self.nums % rows) + + def __str__(self): + return self.nums + + def __add__(self, other): + return 'Sum of cell is ' + str(self.nums + other.nums) + + def __sub__(self, other): + return self.nums - other.nums if self.nums - other.nums > 0 \ + else 'Ячеек в первой клетке меньше или равно второй, вычитание невозможно' + + def __mul__(self, other): + return 'Multiply of cells is ' + str(self.nums * other.nums) + + def __truediv__(self, other): + return 'Truediv of cells is ' + round(self.nums / other.nums) + + +cell_1 = Cell(10) +cell_2 = Cell(14) +print(cell_1 + cell_2) +print(cell_2.make_order(8)) \ No newline at end of file