From 3d8fdf70240493d77cb170d90ec43ba1557e2365 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 28 Sep 2019 21:10:06 +0300 Subject: [PATCH 1/9] =?UTF-8?q?=D0=9F=D0=BE=D1=87=D1=82=D0=B8=20=D0=B2?= =?UTF-8?q?=D1=81=D0=B5=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=B5=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/home_work/hw02_easy.py | 26 ++++++++++++++++++ lesson02/home_work/hw02_hard.py | 27 ++++++++++++++----- lesson02/home_work/hw02_normal.py | 45 +++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 6 deletions(-) diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index ed4447e50..40ac8d310 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -1,3 +1,5 @@ +__author__ = 'Насонов Алексей Сергеевич' + # Задача-1: # Дан список фруктов. # Напишите программу, выводящую фрукты в виде нумерованного списка, @@ -13,13 +15,37 @@ # Подсказка: воспользоваться методом .format() +print("Задача-1:") +NumList = ["яблоко", "банан", "киви", "арбуз"] +for Item in NumList: + print('{:}. {:>6}'.format(str(NumList.index(Item)+1), Item)) + + + # Задача-2: # Даны два произвольные списка. # Удалите из первого списка элементы, присутствующие во втором списке. +print("Задача-2:") +NumList1 = ["яблоко", "банан", "киви", "арбуз"] +NumList2 = ["банан", "киви"] +for Item in NumList2: + if Item in NumList1: + NumList1.remove(Item) +print(NumList1) # Задача-3: # Дан произвольный список из целых чисел. # Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: # если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. + +print("Задача-3:") +NumList1 = [1, 2, 3, 4, 5] +NumList2 = [] +for Num in NumList1: + if Num % 2 == 0: + NumList2.append(Num/4) + else: + NumList2.append(Num*2) +print(NumList2) diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index c96843184..a0b54d4f9 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -1,10 +1,18 @@ +__author__ = 'Насонов Алексей Сергеевич' + # Задание-1: уравнение прямой вида y = kx + b задано в виде строки. # Определить координату y точки с заданной координатой x. -equation = 'y = -12x + 11111140.2121' -x = 2.5 +#equation = 'y = -12x + 11111140.2121' +#x = 2.5 # вычислите и выведите y +print("Задача-1:") +x = 2.5 +y = -12*x + 11111140.2121 +print("Координата точки: x = {0}, y = {1}".format(x,y)) + + # Задание-2: Дата задана в виде строки формата 'dd.mm.yyyy'. # Проверить, корректно ли введена дата. @@ -17,12 +25,19 @@ # (т.е. 2 символа для дня, 2 - для месяца, 4 - для года) # Пример корректной даты -date = '01.11.1985' +#date = '01.11.1985' # Примеры некорректных дат -date = '01.22.1001' -date = '1.12.1001' -date = '-2.10.3001' +#date = '01.22.1001' +#date = '1.12.1001' +#date = '-2.10.3001' + +DaysInToMonth = [30, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] +date_text = '01.11.1985' +# Проверяем день +# Проверяем месяц +# Проверяем год + # Задание-3: "Перевёрнутая башня" (Задача олимпиадного уровня) diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index 3acfaabb6..70a7c4c66 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -1,3 +1,5 @@ +__author__ = 'Насонов Алексей Сергеевич' + # Задача-1: # Дан список, заполненный произвольными целыми числами, получите новый список, # элементами которого будут квадратные корни элементов исходного списка, @@ -5,17 +7,37 @@ # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] +# print("Задача-1:") +# NumList1 = [1, 2, 3, 4, 5, -10, 25] +# NumList2 = [] +# import math +# for Num in NumList1: +# if Num >= 0: +# Res = math.sqrt(Num) +# if (float(Res) % 1) == 0: +# NumList2.append(int(Res)) +# print(NumList2) # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. # Склонением пренебречь (2000 года, 2010 года) +print("Задача-2:") +date = "26.11.2013" + # Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами # в диапазоне от -100 до 100. В списке должно быть n - элементов. # Подсказка: # для получения случайного числа используйте функцию randint() модуля random +# print("Задача-3") +# import random +# NumList = [] +# n = int(input("Введите количество элементов списка случайных значений")) +# for item in range(n): +# NumList.append(random.randint(-100, 100)) +# print(NumList) # Задача-4: Дан список, заполненный произвольными целыми числами. # Получите новый список, элементами которого будут: @@ -23,3 +45,26 @@ # например, lst = [1, 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 2, 4, 5, 6] # б) элементы исходного списка, которые не имеют повторений: # например, lst = [1 , 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 4, 6] + +print("Задача-4") +NumList1 = [1, 2, 4, 5, 6, 2, 5, 2] +NumList_a = [] +NumList_b = [] +NumList_temp = NumList1.copy() +while NumList_temp: + Num = NumList_temp[0] + NumList_temp.remove(Num) + if Num in NumList_temp: + NumList_a.append(Num) + while Num in NumList_temp: + NumList_temp.remove(Num) + else: + NumList_a.append(Num) + NumList_b.append(Num) + +print("Исходный список:") +print(NumList1) +print("Список с уникальными элементами:") +print(NumList_a) +print("Список без повторяющихся элементов:") +print(NumList_b) From 1ccbf583fc94ad1e65e0fa994ecb9dcdc5c5a36d Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 28 Sep 2019 21:24:37 +0300 Subject: [PATCH 2/9] =?UTF-8?q?=D0=92=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=B8=D0=BB=20=D1=81=D1=82=D0=B5=D1=80=D1=82=D0=BE?= =?UTF-8?q?=D0=B5=20=D1=81=D0=BB=D1=83=D1=87=D0=B0=D0=B9=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=20=D0=B4=D0=B0=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/home_work/hw02_normal.py | 50 ++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index 70a7c4c66..752e86e18 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -23,7 +23,55 @@ # Склонением пренебречь (2000 года, 2010 года) print("Задача-2:") -date = "26.11.2013" +days = ["первое", + "второе", + "третье", + "четвертое", + "пятое", + "шестое", + "седьмое", + "восьмое", + "девятое", + "десятое", + "одиннадцатое", + "двенадцатое", + "тринадцатое", + "четырнадцатое", + "пятнадцатое", + "шестнадцатое", + "семьнадцатое", + "восемнадцатое", + "девятнадцатое", + "двадцатое", + "двадцать первое", + "двадцать второе", + "двадцать третье", + "двадцать четвертое", + "двадцать пятое", + "двадцать шестое", + "двадцать седьмое", + "двадцать восьмое", + "двадцать девятое", + "тридцатое", + "тридцать первое"] +month = ["января", + "февраля", + "марта", + "апреля", + "мая", + "июня", + "июля", + "августа", + "сентября", + "октября", + "ноября", + "декабря"] +date = "26.02.1975" +D = int((date.split("."))[0]) +M = int((date.split("."))[1]) +Y = (date.split("."))[2] +print(date) +print("Дата: {0} {1} {2} года".format(days[D-1],month[M-1],Y)) # Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами From 336f26c6c322801190841abe32361e32d55f03e3 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 28 Sep 2019 23:10:53 +0300 Subject: [PATCH 3/9] =?UTF-8?q?=D0=92=D1=81=D0=B5=20=D1=81=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/home_work/hw02_hard.py | 66 ++++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 10 deletions(-) diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index a0b54d4f9..20c060590 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -7,10 +7,10 @@ #x = 2.5 # вычислите и выведите y -print("Задача-1:") -x = 2.5 -y = -12*x + 11111140.2121 -print("Координата точки: x = {0}, y = {1}".format(x,y)) +# print("Задача-1:") +# x = 2.5 +# y = -12*x + 11111140.2121 +# print("Координата точки: x = {0}, y = {1}".format(x,y)) @@ -32,11 +32,33 @@ #date = '1.12.1001' #date = '-2.10.3001' -DaysInToMonth = [30, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] -date_text = '01.11.1985' -# Проверяем день -# Проверяем месяц -# Проверяем год +# print("Задача-1:") +# DaysInToMonth = [30, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] +# date = '21.11.1985' +# List = date.split(".") +# # Проверка по формату +# if len(List[0]) != 2 or len(List[1]) != 2 or len(List[2]) != 4: +# print("Формат не соответсвует dd.mm.yyyy") +# quit() +# +# D = int(List[0]) +# M = int(List[1]) +# Y = int(List[2]) +# +# # Проверяем месяц +# if M not in list(range(1, 13)): +# print("Некоректно определен месяц") +# quit() +# # Проверяем день +# elif D not in list(range(1, DaysInToMonth[M-1]+1)): +# print("Некоректно определен день") +# quit() +# # Проверяем год +# elif Y not in list(range(1, 10000)): +# print("Некоректно определен год") +# quit() +# +# print("Дата {} введена корректно".format(date)) @@ -68,4 +90,28 @@ # Выход: 6 2 # # Вход: 11 -# Выход: 5 3 \ No newline at end of file +# Выход: 5 3 + + +print("Задача-3:") +# Определяем в каком квадрате находится комната (сумму квадратов n натуральных чисел) +Num = 50000000 +for n in range(1, 2000): + MaxKvart = n * (n + 1) * (2 * n + 1) / 6 + if MaxKvart >= Num: + break + +print("Номер квадрата:", n) +print("Номер последней квартиры(в правом верхнем углу):",MaxKvart) +# Определяем верхний этаж этого квадрата (сумму n натуральных чисел) +MaxEtag = n * (n + 1) / 2 + +print("Этаж самой верхней квартиры в квадрате", MaxEtag) +# Определяем искомый этаж и смещение слева на право на этаже у искомой квартиры +DeltaEtag = (MaxKvart - Num) // n +RightOffset = (MaxKvart - Num) % n +print("Дельта этаж",DeltaEtag) +print("Смещение квартиры справа",RightOffset) + +print("Искомый этаж", (MaxEtag-DeltaEtag)) +print("Смещение квартиры справа", (n-RightOffset)) From 9c5e9bc3116544101e71564366d48ae5d25a2ee1 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 29 Sep 2019 11:23:54 +0300 Subject: [PATCH 4/9] =?UTF-8?q?=D0=A4=D0=B8=D0=BD=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/home_work/hw02_hard.py | 83 ++++++++++++++++--------------- lesson02/home_work/hw02_normal.py | 40 ++++++++------- 2 files changed, 67 insertions(+), 56 deletions(-) diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index 20c060590..5f50c6361 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -7,10 +7,10 @@ #x = 2.5 # вычислите и выведите y -# print("Задача-1:") -# x = 2.5 -# y = -12*x + 11111140.2121 -# print("Координата точки: x = {0}, y = {1}".format(x,y)) +print("Задача-1:") +x = 2.5 +y = -12*x + 11111140.2121 +print("Координата точки: x = {0}, y = {1}".format(x,y)) @@ -32,33 +32,33 @@ #date = '1.12.1001' #date = '-2.10.3001' -# print("Задача-1:") -# DaysInToMonth = [30, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] -# date = '21.11.1985' -# List = date.split(".") -# # Проверка по формату -# if len(List[0]) != 2 or len(List[1]) != 2 or len(List[2]) != 4: -# print("Формат не соответсвует dd.mm.yyyy") -# quit() -# -# D = int(List[0]) -# M = int(List[1]) -# Y = int(List[2]) -# -# # Проверяем месяц -# if M not in list(range(1, 13)): -# print("Некоректно определен месяц") -# quit() -# # Проверяем день -# elif D not in list(range(1, DaysInToMonth[M-1]+1)): -# print("Некоректно определен день") -# quit() -# # Проверяем год -# elif Y not in list(range(1, 10000)): -# print("Некоректно определен год") -# quit() -# -# print("Дата {} введена корректно".format(date)) +print("Задача-2:") +DaysInToMonth = [30, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] +date = '21.11.1985' +List = date.split(".") +# Проверка по формату +if len(List[0]) != 2 or len(List[1]) != 2 or len(List[2]) != 4: + print("Формат не соответсвует dd.mm.yyyy") + quit() + +D = int(List[0]) +M = int(List[1]) +Y = int(List[2]) + +# Проверяем месяц +if M not in list(range(1, 13)): + print("Некоректно определен месяц") + quit() +# Проверяем день +elif D not in list(range(1, DaysInToMonth[M-1]+1)): + print("Некоректно определен день") + quit() +# Проверяем год +elif Y not in list(range(1, 10000)): + print("Некоректно определен год") + quit() + +print("Дата {} введена корректно".format(date)) @@ -94,24 +94,29 @@ print("Задача-3:") -# Определяем в каком квадрате находится комната (сумму квадратов n натуральных чисел) -Num = 50000000 +# Задаем номер квартиры +Num = 11 + +# Определяем в каком квадрате находится квартира (сумму квадратов n натуральных чисел) +# Правильнее бы было найти обратную функцию, но как-то не получилось. Поэтому ищем решение по исходной функции for n in range(1, 2000): MaxKvart = n * (n + 1) * (2 * n + 1) / 6 if MaxKvart >= Num: break +print("Номер исходной квартиры:", Num) print("Номер квадрата:", n) -print("Номер последней квартиры(в правом верхнем углу):",MaxKvart) +print("Номер последней квартиры(в правом верхнем углу):", int(MaxKvart)) # Определяем верхний этаж этого квадрата (сумму n натуральных чисел) MaxEtag = n * (n + 1) / 2 -print("Этаж самой верхней квартиры в квадрате", MaxEtag) +print("Этаж самой последней квартиры в этом квадрате", int(MaxEtag)) # Определяем искомый этаж и смещение слева на право на этаже у искомой квартиры DeltaEtag = (MaxKvart - Num) // n RightOffset = (MaxKvart - Num) % n -print("Дельта этаж",DeltaEtag) -print("Смещение квартиры справа",RightOffset) +print("Дельта этаж", int(DeltaEtag)) +print("Смещение квартиры справа", int(RightOffset)) -print("Искомый этаж", (MaxEtag-DeltaEtag)) -print("Смещение квартиры справа", (n-RightOffset)) +print("\nРЕШЕНИЕ:") +print("Искомый этаж:", int(MaxEtag-DeltaEtag)) +print("Номер квартиры на этаже слева:", int(n-RightOffset)) diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index 752e86e18..82e5c7ffb 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -7,16 +7,16 @@ # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] -# print("Задача-1:") -# NumList1 = [1, 2, 3, 4, 5, -10, 25] -# NumList2 = [] -# import math -# for Num in NumList1: -# if Num >= 0: -# Res = math.sqrt(Num) -# if (float(Res) % 1) == 0: -# NumList2.append(int(Res)) -# print(NumList2) +print("Задача-1:") +NumList1 = [1, 2, 3, 4, 5, -10, 25] +NumList2 = [] +import math +for Num in NumList1: + if Num >= 0: + Res = math.sqrt(Num) + if (float(Res) % 1) == 0: + NumList2.append(int(Res)) +print(NumList2) # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. @@ -79,13 +79,14 @@ # Подсказка: # для получения случайного числа используйте функцию randint() модуля random -# print("Задача-3") -# import random -# NumList = [] -# n = int(input("Введите количество элементов списка случайных значений")) -# for item in range(n): -# NumList.append(random.randint(-100, 100)) -# print(NumList) +print("Задача-3") +import random +NumList = [] +# Задаем количество элементов списка случайных значений +n = 10 +for item in range(n): + NumList.append(random.randint(-100, 100)) +print(NumList) # Задача-4: Дан список, заполненный произвольными целыми числами. # Получите новый список, элементами которого будут: @@ -99,6 +100,11 @@ NumList_a = [] NumList_b = [] NumList_temp = NumList1.copy() +# Выполняем проверку первого элемента и удаляем его, +# если элемент встречается в исходном списке несколько раз, +# то заносим его только в новый список NumList_a +# если элемент встречается в исходном списке только один раз, +# то добавляем его в списки NumList_a, NumList_b while NumList_temp: Num = NumList_temp[0] NumList_temp.remove(Num) From bf6b2320ec91c9ada06590c2b4df25dd9955239e Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 29 Sep 2019 11:26:48 +0300 Subject: [PATCH 5/9] =?UTF-8?q?=D0=92=D1=81=D0=B5=20=D0=B2=D1=8B=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/home_work/hw02_easy.py | 1 + lesson02/home_work/hw02_hard.py | 1 + lesson02/home_work/hw02_normal.py | 1 + 3 files changed, 3 insertions(+) diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index 40ac8d310..a08a511c2 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -49,3 +49,4 @@ else: NumList2.append(Num*2) print(NumList2) + diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index 5f50c6361..f1faf7012 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -120,3 +120,4 @@ print("\nРЕШЕНИЕ:") print("Искомый этаж:", int(MaxEtag-DeltaEtag)) print("Номер квартиры на этаже слева:", int(n-RightOffset)) + diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index 82e5c7ffb..3d677dc38 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -122,3 +122,4 @@ print(NumList_a) print("Список без повторяющихся элементов:") print(NumList_b) + From 6b7e65115fb819e17e624f22bdf84dcbab842870 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 13 Oct 2019 10:44:32 +0300 Subject: [PATCH 6/9] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=BC=D0=B5=D0=B6=D1=83?= =?UTF-8?q?=D1=82=D0=BE=D1=87=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=BE=D0=BC=D0=B8?= =?UTF-8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson06/home_work/hw06_easy.py | 97 +++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index fe5dc2b11..cd56d0e6c 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -1,9 +1,106 @@ # Задача-1: Написать класс для фигуры-треугольника, заданного координатами трех точек. # Определить методы, позволяющие вычислить: площадь, высоту и периметр фигуры. +print("Задача-1") + +class triangle: + def __init__(self, p1, p2, p3): + self.p1 = p1 + self.p2 = p2 + self.p3 = p3 + + def calculate_area(self): + r = 0.5*abs((p2["x"]-p1["x"])*(p3["y"]-p1["y"]) - (p3["x"]-p1["x"])*(p2["y"])-p1["y"]) + return r + + def calculate_heights(self): + def get_height(p1,p2,p3): + import math + distance = abs((p3["y"]-p2["y"])*p1["x"]-(p3["x"]-p2["x"])*p1["y"]+p3["x"]*p2["y"]-p3["y"]*p2["x"])/math.sqrt((p3["y"]-p2["y"])**2 + (p3["x"]-p2["x"])**2) + return distance + h1 = get_height(self.p1, self.p2, self.p3) + h2 = get_height(self.p2, self.p3, self.p1) + h3 = get_height(self.p3, self.p1, self.p2) + return h1,h2,h3 + + def calculate_perimeter(self): + def get_len(p1,p2): + import math + len = math.sqrt((self.p2["x"] - self.p1["x"]) ** 2 + (self.p2["y"] - self.p1["y"]) ** 2) + return len + + p1p2 = get_len(p1,p2) + p2p3 = get_len(p2,p3) + p3p1 = get_len(p3,p1) + perimeter = p1p2+p2p3+p3p1 + return perimeter + +p1 = {"x": 5, + "y": 7} +p2 = {"x": 3, + "y": 4} +p3 = {"x": 6, + "y": 1} +tr = triangle(p1,p2,p3) +print("Площадь:", tr.calculate_area()) +print("h1,h2,h3", tr.calculate_heights()) +print("Периметр:", tr.calculate_perimeter()) + # Задача-2: Написать Класс "Равнобочная трапеция", заданной координатами 4-х точек. # Предусмотреть в классе методы: # проверка, является ли фигура равнобочной трапецией; # вычисления: длины сторон, периметр, площадь. +print("Задача-2") + +class ravtrapetc: + def __get_abc(self): + def get_len(p1, p2): + import math + len = math.sqrt((self.p2["x"] - self.p1["x"]) ** 2 + (self.p2["y"] - self.p1["y"]) ** 2) + return len + self.C = get_len(self.p1,self.p2) + self.B = get_len(self.p2,self.p3) + self.A = get_len(self.p4,self.p1) + + + def __init__(self,p1,p2,p3,p4): + self.p1 = p1 + self.p2 = p2 + self.p3 = p3 + self.p4 = p4 + self.__get_abc() + def verify(self): + 'Если стороны A и B параллельны, а углы сторон C с онованием трапеции равны' + + pass + def calculate_perimeter(self): + perimeter = self.A+self.B+2*self.C + return perimeter + def calculate_area(self): + import math + area = (self.A+self.B)/2*math.sqrt(self.C**2 - (self.A-self.B)**2/4) + return area + +p1 = {"x": 5, + "y": 7} +p2 = {"x": 3, + "y": 4} +p3 = {"x": 6, + "y": 1} +p4 = {"x": 6, + "y": 2} + + + +trap = ravtrapetc(p1,p2,p3,p4) +print("Площадь:", trap.calculate_area()) +print("Стороны: A= {}, B= {}, C= {}".format(trap.A, trap.B, trap.C)) +print("Периметр:", trap.calculate_perimeter()) + +#from collections import Counter +#counter = Counter(y) +#print(counter.values()) +#print(counter) +#print([i for i in y if y[i]>1]) \ No newline at end of file From 61357b1a243dec4c802af4564b9a5a602768f32c Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 13 Oct 2019 14:18:47 +0300 Subject: [PATCH 7/9] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=B8=20=D0=B8=20=D0=BD=D0=BE=D1=80=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson06/home_work/hw06_easy.py | 48 ++++++++++++++------ lesson06/home_work/hw06_normal.py | 75 +++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 13 deletions(-) diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index cd56d0e6c..1f5c3269d 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -73,8 +73,34 @@ def __init__(self,p1,p2,p3,p4): self.__get_abc() def verify(self): 'Если стороны A и B параллельны, а углы сторон C с онованием трапеции равны' - - pass + def Vetify_Parallel(self): + if self.p1["x"] != self.p4["x"]: + A1 = (self.p1["y"] - self.p4["y"]) / (self.p1["x"] - self.p4["x"]) + else: + A1 = 0 + if self.p2["x"] != self.p3["x"]: + A2 = (self.p2["y"] - self.p3["y"]) / (self.p2["x"] - self.p3["x"]) + else: + A2 = 0 + if A1 == A2: + return True + else: + return False + def Vetify_equality_angles(self): + import math + angles1 = (((self.p1["x"]-self.p2["x"])**2)+((self.p1["y"]-self.p2["y"])**2)+((self.p1["x"]-self.p4["x"])**2)+((self.p1["y"]-self.p4["y"])**2)-((self.p2["x"]-self.p4["x"])**2)-((self.p2["y"]-self.p4["y"])**2))/(2*math.sqrt(((self.p1["x"]-self.p2["x"])**2)+((self.p1["y"]-self.p2["y"])**2))*math.sqrt(((self.p1["x"]-self.p4["x"])**2)+((self.p1["y"]-self.p4["y"])**2))) + angles2 = (((self.p4["x"]-self.p3["x"])**2)+((self.p4["y"]-self.p3["y"])**2)+((self.p4["x"]-self.p1["x"])**2)+((self.p4["y"]-self.p1["y"])**2)-((self.p3["x"]-self.p1["x"])**2)-((self.p3["y"]-self.p1["y"])**2))/(2*math.sqrt(((self.p4["x"]-self.p3["x"])**2)+((self.p4["y"]-self.p3["y"])**2))*math.sqrt(((self.p4["x"]-self.p1["x"])**2)+((self.p4["y"]-self.p1["y"])**2))) + if angles1 == angles2: + return True + else: + return False + + if Vetify_Parallel(self) and Vetify_equality_angles(self): + return True + + + + def calculate_perimeter(self): perimeter = self.A+self.B+2*self.C return perimeter @@ -83,24 +109,20 @@ def calculate_area(self): area = (self.A+self.B)/2*math.sqrt(self.C**2 - (self.A-self.B)**2/4) return area -p1 = {"x": 5, +p1 = {"x": 1, + "y": 1} +p2 = {"x": 2, "y": 7} -p2 = {"x": 3, - "y": 4} -p3 = {"x": 6, +p3 = {"x": 7, + "y": 7} +p4 = {"x": 8, "y": 1} -p4 = {"x": 6, - "y": 2} trap = ravtrapetc(p1,p2,p3,p4) +print("Это равнобедренная тропеция?:", trap.verify()) print("Площадь:", trap.calculate_area()) print("Стороны: A= {}, B= {}, C= {}".format(trap.A, trap.B, trap.C)) print("Периметр:", trap.calculate_perimeter()) -#from collections import Counter -#counter = Counter(y) -#print(counter.values()) -#print(counter) -#print([i for i in y if y[i]>1]) \ No newline at end of file diff --git a/lesson06/home_work/hw06_normal.py b/lesson06/home_work/hw06_normal.py index 01c3982f4..629086d8c 100644 --- a/lesson06/home_work/hw06_normal.py +++ b/lesson06/home_work/hw06_normal.py @@ -15,3 +15,78 @@ # (Ученик --> Класс --> Учителя --> Предметы) # 4. Узнать ФИО родителей указанного ученика # 5. Получить список всех Учителей, преподающих в указанном классе + +print("Задание-1") + +class klass(): + def __init__(self,name): + self.name +class uchenik(): + def __init__(self,name,klass,fio_mama,fio_papa): + self.name = name + self.klass = klass + self.fio_mama = fio_mama + self.fio_papa = fio_papa +class teacher(): + def __init__(self,name,predmet,list_klass): + self.name = name + self.predmet = predmet + self.list_klass = list_klass + +class school(): + def __init__(self,name): + self.name = name + self.list_uchenik = [] + self.list_teacher = [] + def add_uchenik(self,uchenik): + self.list_uchenik.append(uchenik) + def add_teacher(self, teacher): + self.list_teacher.append(teacher) + def get_listklass(self): + l = list(set([uchenik.klass for uchenik in self.list_uchenik])) + return l + def get_listuchenik(self,klass): + l = [uchenik.name for uchenik in self.list_uchenik if uchenik.klass == klass] + return l + def get_listpredmet(self,fio_uchenik): + u = "" + for uchenik in self.list_uchenik: + if uchenik.name == fio_uchenik: + u = uchenik + break + if not u: + return "Ученик с таким ФИО не найден" + print(u.klass) + res = [] + for teacher in self.list_teacher: + if u.klass in teacher.list_klass: + res.append("Ученик: {} Класс: {} Преподаватель: {} Предмет: {}".format(u.name,u.klass,teacher.name,teacher.predmet)) + return res + def get_roditeli(self,fio_uchenik): + for uchenik in self.list_uchenik: + if uchenik.name == fio_uchenik: + return "Отец: {} Мать: {}".format(uchenik.fio_papa,uchenik.fio_mama) + def get_teacher(self,klass): + l = [teacher.name for teacher in self.list_teacher if klass in teacher.list_klass] + return l + +school = school("Школа 1111") +school.add_uchenik(uchenik("Иванов Василий Алибабаевич","5А","Иванова Ирина Васильевна","Иванов Павел Петрович")) +school.add_uchenik(uchenik("Сидорова Елена Олеговна","5А","Сидорова Полина Васильевна","Сидоров Егор Александрович")) +school.add_uchenik(uchenik("Петрова Анна Александровна","7Б","Петрова Виктория Тимофеевна","Петров Сергей Сергеевич")) +school.add_uchenik(uchenik("Синичкина Ольга Петровна","7Б","Синичкина Татьяна Егоровна","Синичкин Иван Алексеевич")) +school.add_uchenik(uchenik("Козлова Анна Денисовна","3Б","Петрова Виктория Тимофеевна","Петров Сергей Сергеевич")) +school.add_uchenik(uchenik("Щукина Виктория Максимовна","3Б","Синичкина Татьяна Егоровна","Синичкин Иван Алексеевич")) +school.add_teacher(teacher("Федоров Иван Иванович","Математика",["5А","7Б","3Б"])) +school.add_teacher(teacher("Павлов Сергей Генадьевич","Физкультура",["5А","7Б","3Б"])) + +#Получаем список учеников в классе +print(school.get_listuchenik("3Б")) +#Получаем список всех классов +print(school.get_listklass()) +#Получаем список всех предметов у ученика +print(school.get_listpredmet("Щукина Виктория Максимовна")) +#Получаем родителей ученика +print(school.get_roditeli("Щукина Виктория Максимовна")) +#Получаем список учителей в классе +print(school.get_teacher("3Б")) From 0c9e1a6a960950cd1db687a8a352ae08f6244d61 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 13 Oct 2019 14:40:53 +0300 Subject: [PATCH 8/9] =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B8=D1=82=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BD=D0=B0=20lesson03?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson06/home_work/hw06_hard.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lesson06/home_work/hw06_hard.py b/lesson06/home_work/hw06_hard.py index fae8d84d2..214b8a5f1 100644 --- a/lesson06/home_work/hw06_hard.py +++ b/lesson06/home_work/hw06_hard.py @@ -10,3 +10,10 @@ # С использованием классов. # Реализуйте классы сотрудников так, чтобы на вход функции-конструктора # каждый работник получал строку из файла + +class sotrudnik(): + def __init__(self,init_str): + pass +class vedomost(): + def __init__(self): + pass \ No newline at end of file From 9a5cf3b5b0a0bd160c28555e5e7829750bf3f1b9 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 13 Oct 2019 16:21:25 +0300 Subject: [PATCH 9/9] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B2=D1=81=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson06/home_work/data/hours_of | 2 +- lesson06/home_work/hw06_hard.py | 69 ++++++++++++++++++++++++++++++-- 2 files changed, 67 insertions(+), 4 deletions(-) diff --git a/lesson06/home_work/data/hours_of b/lesson06/home_work/data/hours_of index 7e3c12c36..227d52838 100644 --- a/lesson06/home_work/data/hours_of +++ b/lesson06/home_work/data/hours_of @@ -1,4 +1,4 @@ -Имя Фамилия Отработано часов +Имя Фамилия Отработано_часов Петр Алексеев 120 Матвей Бурин 160 Василий Сидоров 122 diff --git a/lesson06/home_work/hw06_hard.py b/lesson06/home_work/hw06_hard.py index 214b8a5f1..bf8ae5bd4 100644 --- a/lesson06/home_work/hw06_hard.py +++ b/lesson06/home_work/hw06_hard.py @@ -11,9 +11,72 @@ # Реализуйте классы сотрудников так, чтобы на вход функции-конструктора # каждый работник получал строку из файла +print("Задание-1") + class sotrudnik(): - def __init__(self,init_str): - pass + def __init__(self,header,init_str): + data_line = init_str.split() + for j, item in enumerate(header): + if j < len(data_line): + setattr(self,item,data_line[j]) class vedomost(): def __init__(self): - pass \ No newline at end of file + self.list_sotrudnik = [] + self.list_hours_of = [] + self.__init_sprav_sotrudnik() + self.__init_otrabotka() + def __init_sprav_sotrudnik(self): + import os + DIR = "data" + FileName = "workers" + with open(os.path.join(DIR, FileName), 'r', encoding='UTF-8') as f: + for i, line in enumerate(f): # считываем файл построчно + # Первую строку парсим как заголовок + if i == 0: + header = line.split() + else: + # Все остальные строки с данными + # Создаем экзэмпляр класса сотрудник и добавляем в справочник сотрудников + self.list_sotrudnik.append(sotrudnik(header,line)) + def get_sotrudmik(self,name,family_name): + for item in self.list_sotrudnik: + if item.Имя == name and item.Фамилия == family_name: + return item + def __init_otrabotka(self): + def add_hours_of(self, header, init_str): + d = {} + data_line = init_str.split() + for j, item in enumerate(header): + if j < len(data_line): + d[item] = data_line[j] + else: + d[item] = "" + sotrudnik = self.get_sotrudmik(d["Имя"], d["Фамилия"]) + setattr(sotrudnik, item, d["Отработано_часов"]) + import os + DIR = "data" + FileName = "hours_of" + with open(os.path.join(DIR, FileName), 'r', encoding='UTF-8') as f: + for i, line in enumerate(f): # считываем файл построчно + # Первую строку парсим как заголовок + if i == 0: + header = line.split() + else: + # Все остальные строки с данными + # Добавляем атрибут отработки сотруднику + add_hours_of(self, header, line) + def Calculate_ZP(self): + for item in self.list_sotrudnik: + StoimostChasa = int(item.Зарплата) / int(item.Норма_часов) + if int(item.Отработано_часов) > int(item.Норма_часов): + Pererabotka = int(item.Отработано_часов) - int(item.Норма_часов) + setattr(item, "Начислено", int(item.Зарплата)+Pererabotka*2*StoimostChasa) + elif int(item.Отработано_часов) < int(item.Норма_часов): + Nedorabotka = int(item.Норма_часов) - int(item.Отработано_часов) + setattr(item, "Начислено", int(item.Зарплата)-Nedorabotka*StoimostChasa) + else: + setattr(item, "Начислено", item.Зарплата) + print("Имя: {} Фамилия: {} Зарплата: {} Начислено: {}".format(item.Имя,item.Фамилия,item.Зарплата,item.Начислено)) + +vedomost = vedomost() +vedomost.Calculate_ZP() \ No newline at end of file