From d10a30e3a591fe5342569a9c16cfc0a04300aadb Mon Sep 17 00:00:00 2001 From: Sin93 Date: Sun, 18 Aug 2019 00:16:57 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D0=97=D0=B8=D0=BD=D0=BE=D0=B2=D1=8C=D0=B5?= =?UTF-8?q?=D0=B2=20=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC.=20=D0=94=D0=97?= =?UTF-8?q?=20=D0=BA=201=20=D1=83=D1=80=D0=BE=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson01/home_work/hw01_easy.py | 60 ++++++++++++++++++++++++--- lesson01/home_work/hw01_hard.py | 15 ++++++- lesson01/home_work/hw01_normal.py | 69 ++++++++++++++++++++++++++++++- 3 files changed, 137 insertions(+), 7 deletions(-) diff --git a/lesson01/home_work/hw01_easy.py b/lesson01/home_work/hw01_easy.py index f927b0b06..37162fde9 100644 --- a/lesson01/home_work/hw01_easy.py +++ b/lesson01/home_work/hw01_easy.py @@ -1,5 +1,23 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Зиновьев Максим Игоревич' + +# Задача-3: Запросите у пользователя его возраст. +# Если ему есть 18 лет, выведите: "Доступ разрешен", +# иначе "Извините, пользование данным ресурсом только с 18 лет" + +# Мне показалось логичным с точки зрения конструкции программы, сделать эту задачу первой. + +while True: + userAge = int(input('Укажите Ваш возраст: ')) + if userAge >= 18: + print('Доступ разрешен \n') + break + elif userAge < 18: + print('Извините, пользование данным ресурсом только с 18 лет') + +# Хотел сделать проверку на то какой тип данных введен и отбрасывать назад если введено не число, но если убрать int +# в начале, то введенное значение в любом случае является строкой и не проходит проверку, как это обойти пока не +# придумал, попробую попозже что-то накрутить. # Задача-1: Дано произвольное целое число (число заранее неизвестно). # Вывести поочередно цифры исходного числа (порядок вывода цифр неважен). @@ -7,7 +25,31 @@ # * постарайтесь решить задачу с применением арифметики и цикла while; # * при желании решите задачу с применением цикла for. -# код пишем тут... +userNumber = int(input('''Здравствуйте! +Данная программа выводит поочередно цифры введенного целого числа (в обратном порядке). +Введите ваше число: +''')) +print('Вы ввели: ', userNumber, ', это число состоит из:\n') +# создадим список в который будем помещать все цифры введенного числа +listNumber = [] +while userNumber > 0: + remainder = userNumber % 10 + # Начиная с конца напечатаем все цифры из которых состоит число + print (remainder) + userNumber //= 10 + # Добавим в список все цифры, которые входят в наше число + listNumber.append(remainder) + +# если вдруг пользователю принципиален порядок цифр как в числе, выведем в том порядке, в котором число вводили +userAnswer = input('Вы хотите чтоб программа вывела числа в обратном порядке? (да/нет): ') +if userAnswer == 'да': + listNumber.reverse() + # выстроим наш список в обратном порядке + print(listNumber) +elif userAnswer == 'нет': + print('ОК, идём дальше.\n') +else: + print('Программе не известна такая команда. Переходим к выполнению следующей программы.') # Задача-2: Исходные значения двух переменных запросить у пользователя. @@ -19,6 +61,14 @@ # print("a = ", b, "b = ", a) - это неправильное решение! -# Задача-3: Запросите у пользователя его возраст. -# Если ему есть 18 лет, выведите: "Доступ разрешен", -# иначе "Извините, пользование данным ресурсом только с 18 лет" +print('\nА эта программа меняет местами значения введенных чисел') +userNumber1 = int(input("Введите первое число: ")) +userNumber2 = int(input("Введите второе число: ")) +# Зададим дополнительную переменную, которая будет выступать в качестве временного хранилища +virtualNumber = userNumber2 +userNumber2 = userNumber1 +userNumber1 = virtualNumber +print('Мы поместили число из первой переменной во вторую и наоборот, вот что получилось: \n', + 'Первое число стало: ', userNumber1, '\n А второе: ', userNumber2) + + diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index 7df268664..da2eb1e41 100644 --- a/lesson01/home_work/hw01_hard.py +++ b/lesson01/home_work/hw01_hard.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Зиновьев Максим Игоревич' # Задание-1: # Ваня набрал несколько операций в интерпретаторе и получал результаты: @@ -14,3 +14,16 @@ # если точно известно, что её значение не изменялось? # Подсказка: это значение точно есть ;) + +# Единственное, что приходит в голову и подходит под условия, это бесконечность. +# Пришлось погуглить как её присвоить переменной. +# Подключим математический модуль + +import math + +# присвоим переменной a значение .inf - это бесконечность +a = math.inf + +# Проверим все ли условия выполняются +if a == a**2 and a == a*2 and a > 999999: + print('Ура, это и правда - бесконечность') diff --git a/lesson01/home_work/hw01_normal.py b/lesson01/home_work/hw01_normal.py index 991724e9a..cacb2a493 100644 --- a/lesson01/home_work/hw01_normal.py +++ b/lesson01/home_work/hw01_normal.py @@ -1,5 +1,8 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Зиновьев Максим Игоревич' + +# Подключим математический модуль для дальнейших изысканий +import math # Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. # Например, дается x = 58375. @@ -10,6 +13,27 @@ # * постарайтесь решить задачу с применением арифметики и цикла while; # * при желании и понимании решите задачу с применением цикла for. +userNumber = int(input('Эта программа выводит самую большую цифру в числе. Введите целое число: ')) +print('Вы ввели: ', userNumber) +# Создадим список в который поместим все цифры числа +listNumber = [] +while userNumber > 0: + remainder = userNumber % 10 + userNumber //= 10 + # запишем в список все цифры из которых состоит число + listNumber.append(remainder) + +# зададим меременную в которую будем складировать поочередно каждое число из списка +number = 0 + +# зададим переменную в которую будем помещать самое большое число в данной итерации +maxNumber = listNumber.pop() + +# Циклом for переберем все числа в нашем списке +for number in listNumber: + if number > maxNumber: + maxNumber = number +print('Самая большая цифра в заданном числе: ', maxNumber) # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. @@ -18,6 +42,28 @@ # * постарайтесь сделать решение через действия над числами; # * при желании и понимании воспользуйтесь синтаксисом кортежей Python. +print('\nА эта программа меняет местами значения введенных чисел') +userNumber1 = int(input("Введите первое число: ")) +userNumber2 = int(input("Введите второе число: ")) +# Поменяем значения местами +userNumber1, userNumber2 = userNumber2, userNumber1 +print('1. В данном исполнении, значение первой переменной, присвоилось второй переменной и наоборот: ', + userNumber1, userNumber2) + +# Данное решение допустимо если нет необходимости сохранять то в каком перядке пользователь вводил переменные. +# Теперь пойдём по другому пути, сохраним числа в исходных переменных (для этого откатим предыдущие действия). +# Например соберем из наших переменных список и выведем значения в обратном порядке + +print('2. А в этом мы откатим изменения в переменных к исходным и сделаем список, ' + 'из которого выведем переменные в обратном порядке с помощью цикла while:') +userNumber1, userNumber2 = userNumber2, userNumber1 +userList = [userNumber1, userNumber2] +i = 1 +lengthList = len(userList) +while i <= lengthList: + print(userList[-i]) + i += 1 + # Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида # ax² + bx + c = 0. @@ -25,3 +71,24 @@ # Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math: # import math # math.sqrt(4) - вычисляет корень числа 4 + +print('Эта программа вычисляет корень квадратного уравнения вида ax² + bx + c = 0.') +# Запросим у пользователя коэффициенты +coefA = int(input('Введите коэффициент a: ')) +coefB = int(input('Введите коэффициент b: ')) +coefC = int(input('Введите коэффициент c: ')) +# Вычислим дискременант по формуле b^2 - 4ac +discretonaty = coefB ** 2 - 4 * coefA * coefC +print('Дискременант: ', discretonaty) + +# Далее по формулам вычисляем корни уравнения при различных значениях дискременанта +if discretonaty == 0: + root = (-coefB) / (2 * coefA) + print('x1 = x2 =', root) +elif discretonaty > 0: + root1 = (- coefB + math.sqrt(discretonaty)) / (2 * coefA) + root2 = (- coefB - math.sqrt(discretonaty)) / (2 * coefA) + print('Уравнение имеет два корня: \nx1 =', root1, 'x2 =', root2) +else: + print('Решений уравнения с такими корнями - нет.') + From 8626193762b5e95e0258a99efd358d2168ae2859 Mon Sep 17 00:00:00 2001 From: Sin93 Date: Thu, 22 Aug 2019 01:31:31 +0300 Subject: [PATCH 2/8] =?UTF-8?q?=D0=97=D0=B8=D0=BD=D0=BE=D0=B2=D1=8C=D0=B5?= =?UTF-8?q?=D0=B2=20=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC.=20=D0=94=D0=97?= =?UTF-8?q?=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/home_work/hw02_easy.py | 29 +++++++++++ lesson02/home_work/hw02_hard.py | 80 +++++++++++++++++++++++++++---- lesson02/home_work/hw02_normal.py | 50 +++++++++++++++++++ 3 files changed, 151 insertions(+), 8 deletions(-) diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index ed4447e50..0e2388e81 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -1,3 +1,6 @@ + +__author__ = 'Зиновьев Максим Игоревич' + # Задача-1: # Дан список фруктов. # Напишите программу, выводящую фрукты в виде нумерованного списка, @@ -13,13 +16,39 @@ # Подсказка: воспользоваться методом .format() +fruitList = ["яблоко", "банан", "киви", "арбуз", "манго"] +print('\n1. Данная программа выводит пронумерованный список фруктов ', fruitList, + 'и выравнивает наименование фруктов по правому краю (как продемонстрировано в примере)') +index = 1 +for fruit in fruitList: + print('{}. {:>8}'.format(index, fruit)) + index += 1 # Задача-2: # Даны два произвольные списка. # Удалите из первого списка элементы, присутствующие во втором списке. +list1 = [12, 16, 8, 94, 12, 61, 34, 26, 58, 'один', "яблоко", "банан", "киви", "арбуз", "манго"] +list2 = [8, 14, 61, 'банан', 12, 'арбуз'] +print('\n2. Данная программа удаляет из Список1: ', list1, '\nЭлементы которые есть в Список2: ', list2) +for i in list2: + while list1.count(i) != 0: + list1.remove(i) +print('И в результате получается вот такой список: ', list1) # Задача-3: # Дан произвольный список из целых чисел. # Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: # если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. + +list = [15, 16, 84, 31, 24, 63, 8, 49, 67, 35, 68] +print(''' +3. Данная программа проверяет элементы Списка: [15, 16, 84, 31, 24, 63, 8, 49, 67, 35, 68] +следующим образом: если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два и помещает результат в новый список.''') +newList = [] +for number in list: + if number % 2 == 0: + newList.append(number / 4) + else: + newList.append(number * 2) +print('Новый список: ', newList) diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index c96843184..04aa3ebfb 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -1,9 +1,24 @@ + +__author__ = 'Зиновьев Максим Игоревич' + +import datetime + # Задание-1: уравнение прямой вида y = kx + b задано в виде строки. # Определить координату y точки с заданной координатой x. -equation = 'y = -12x + 11111140.2121' -x = 2.5 -# вычислите и выведите y +# Я напишу программу строго по условию, то-есть уравнение всегда задаётся по шаблону, шаг впрао, шаг в лево и fatalError +# при необходимости можно накрутить проверок, но на 2 и 3 задание ушло слишком много сил + +# y = -12x + 11111140.2121 +# x = 2.5 + +equation = input('1. Введите уравнение прямой: ') +posX = equation.find('x') +k = float(equation[4:posX]) +b = float(equation[posX + 4:]) +x = float(input('Введите кординату x: ')) +y = k * x + b +print('Кордината y: ', y) # Задание-2: Дата задана в виде строки формата 'dd.mm.yyyy'. @@ -17,12 +32,28 @@ # (т.е. 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' + +while True: + userAnswer = input('Введите дату') + if userAnswer.find('.') != 2: + print('Ошибочный формат даты, введите dd.mm.yyyy') + continue + elif userAnswer.rfind('.') != 5: + print('Ошибочный формат даты, введите dd.mm.yyyy') + continue + try: + date = datetime.datetime.strptime(userAnswer, '%d.%m.%Y') + print('Дата: ', date, 'корректна') + break + except ValueError: + print('Введена не корректная дата! Введите dd.mm.yyyy') + continue # Задание-3: "Перевёрнутая башня" (Задача олимпиадного уровня) @@ -53,4 +84,37 @@ # Выход: 6 2 # # Вход: 11 -# Выход: 5 3 \ No newline at end of file +# Выход: 5 3 + +room = int(input('''\n3. Вы стоите у лифта странной башни, вам известен номер комнаты, в которую вам надо, +но вы не знаете на каком она этаже. +Эта программа поможет вам сориентироваться в башне. Введите номер комнаты: ''')) +# количество комнат нам пригодится в нескольких вычислениях, по этому сохраню его в ещё одной переменной +n = room +roomsBefore = 0 +bloc = 0 + +# определяем количество комнат до интересующего нас блока +while n > 0: + bloc += 1 + n = n - bloc**2 + roomsBefore = roomsBefore + bloc**2 +roomsBefore = roomsBefore - bloc**2 + +# определим номер этажа в блоке +numberInBloc = room - roomsBefore +floorInBloc = 1 +while numberInBloc > bloc: + floorInBloc += 1 + numberInBloc = numberInBloc - bloc + +# определим номер этажа в башне +floorInTower = 0 +while bloc > 0: + floorInTower = floorInTower + (bloc - 1) + bloc -= 1 +floor = floorInTower + floorInBloc +print('Этаж: ', floor) +print('Номер комнаты слева на право: ', numberInBloc) + + diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index 3acfaabb6..2bfa5190c 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -1,3 +1,9 @@ + +__author__ = 'Зиновьев Максим Игоревич' + +import math +import numpy as np + # Задача-1: # Дан список, заполненный произвольными целыми числами, получите новый список, # элементами которого будут квадратные корни элементов исходного списка, @@ -5,17 +11,42 @@ # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] +list = [2, -5, 8, 9, -25, 25, 4, 81, -64, 15] +newList = [] +for number in list: + if number < 0: + pass + elif (math.sqrt(number) * 10) % 10 != 0: + pass + else: + newList.append(math.sqrt(number)) +print(newList) # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. # Склонением пренебречь (2000 года, 2010 года) +dd = int(input('Введите день ')) +mm = int(input('Введите месяц ')) +yyyy = int(input('Введите год ')) +days = {1: 'первое', 2: 'второе', 3: 'третье', 4: 'четвертое', 5: 'пятое', 6: 'шестое', 7: 'седьмое', 8: 'восьмое', + 9: 'девятое', 10: 'десятое', 11: 'одиннадцатое', 12: 'двеннадцатое', 13: 'триннадцатое', 14: 'четырнадцатое', + 15: 'пятнадцатое', 16: 'шестнадцатое', 17: 'семнадцатое', 18: 'восемнадцатое', 19: 'девятнадцатое', + 20: 'двадцатое', 21: 'двадцать первое', 22: 'двадцать второе', 23: 'двадцать третье', 24: 'двадцать четвертное', + 25: 'двадцать пятое', 26: 'двадцать шестое', 27: 'двадцать седьмое', 28: 'двадцать восьмое', + 29: 'двадцать девятое', 30: 'тридцатое', 31: 'тридцать первое'} +month = {1: 'января', 2: 'февраля', 3: 'марта', 4: 'апреля', 5: 'мая', 6: 'июня', 7: 'июля', 8: 'августа', + 9: 'сертября', 10: 'октября', 11: 'ноября', 12: 'декабря'} +print('{} {}'.format(days[dd], month[mm]), yyyy, 'года') # Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами # в диапазоне от -100 до 100. В списке должно быть n - элементов. # Подсказка: # для получения случайного числа используйте функцию randint() модуля random +n = int(input("Введите количество элементов списка: ")) +list2 = np.random.randint(-100, 100, n) +print(list2) # Задача-4: Дан список, заполненный произвольными целыми числами. # Получите новый список, элементами которого будут: @@ -23,3 +54,22 @@ # например, 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] + +list3 = np.random.randint(0, 10, 10) +list3 = list3.tolist() +print(list3) +newList2 = [] +for number in list3: + if newList2.count(number) > 1: + pass + elif newList2.count(number) < 1: + newList2.append(number) +newList2 = sorted(newList2) +print(newList2) + +newList3 = [] +for number in list3: + if list3.count(number) == 1: + newList3.append(number) +newList3 = sorted(newList3) +print(newList3) \ No newline at end of file From dc688426281c06c60928fee52165eee434d22295 Mon Sep 17 00:00:00 2001 From: Sin93 Date: Sun, 25 Aug 2019 17:27:57 +0300 Subject: [PATCH 3/8] =?UTF-8?q?=D0=94=D0=97=20=D0=BA=20=D1=82=D1=80=D0=B5?= =?UTF-8?q?=D1=82=D1=8C=D0=B5=D0=BC=D1=83=20=D1=83=D1=80=D0=BE=D0=BA=D1=83?= =?UTF-8?q?,=20=D1=83=D1=80=D0=BE=D0=B2=D0=B5=D0=BD=D1=8C=20=D0=A5=D0=B0?= =?UTF-8?q?=D1=80=D0=B4=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D1=8E=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=81=D0=BB=D0=B5=202=20=D1=81=D0=B5=D0=BD=D1=82=D1=8F?= =?UTF-8?q?=D0=B1=D1=80=D1=8F=20=D0=B8=20=D0=B4=D0=BE=D1=88=D0=BB=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson03/home_work/hw03_easy.py | 22 ++++-- lesson03/home_work/hw03_hard.py | 2 + lesson03/home_work/hw03_normal.py | 127 +++++++++++++++++++++++++++++- 3 files changed, 143 insertions(+), 8 deletions(-) diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index 63d13f646..8ca38a44b 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -5,23 +5,35 @@ # Для решения задачи не используйте встроенные функции и функции из модуля math. def my_round(number, ndigits): - pass - + a = int(number * (10 ** ndigits)) + if int(number * 10 ** (ndigits + 1) / 10) < 5: + return a / (10 ** ndigits) + else: + return (a + 1) / (10 ** ndigits) print(my_round(2.1234567, 5)) print(my_round(2.1999967, 5)) print(my_round(2.9999967, 5)) - # Задание-2: # Дан шестизначный номер билета. Определить, является ли билет счастливым. # Решение реализовать в виде функции. # Билет считается счастливым, если сумма его первых и последних цифр равны. # !!!P.S.: функция не должна НИЧЕГО print'ить +# такое решение конечно очень не универсальное, но если по условию номер билета строго 6-тизначный, то будет работать def lucky_ticket(ticket_number): - pass - + if ticket_number > 99999 and ticket_number < 1000000: + half1 = int(ticket_number // 1000) + sum1 = half1 % 10 + half1 % 100 // 10 + half1 // 100 + half2 = int(ticket_number % 1000) + sum2 = half2 % 10 + half2 % 100 // 10 + half2 // 100 + if sum1 == sum2: + return 'Билет счастливый' + else: + return 'Билет не счастливый' + else: + return 'Не корректный номер билета' print(lucky_ticket(123006)) print(lucky_ticket(12321)) diff --git a/lesson03/home_work/hw03_hard.py b/lesson03/home_work/hw03_hard.py index a8c7f668a..90dae566b 100644 --- a/lesson03/home_work/hw03_hard.py +++ b/lesson03/home_work/hw03_hard.py @@ -1,3 +1,5 @@ +# Задания hard выполню позже и дошлю + # Задание-1: # Написать программу, выполняющую операции (сложение и вычитание) с простыми дробями. # Дроби вводятся и выводятся в формате: diff --git a/lesson03/home_work/hw03_normal.py b/lesson03/home_work/hw03_normal.py index 38ac1fcc1..74703e071 100644 --- a/lesson03/home_work/hw03_normal.py +++ b/lesson03/home_work/hw03_normal.py @@ -1,9 +1,30 @@ +import math + # Задание-1: # Напишите функцию, возвращающую ряд Фибоначчи с n-элемента до m-элемента. # Первыми элементами ряда считать цифры 1 1 +# это первый вариант решения, который у меня вышел, он сначала формирует ВСЮ последовательность, а потом отсекает лишнее +# опасаясь за оперативку на больших числах сделал второй вариант +# def fibonacci(n, m): +# fibonacciList = [1, 1] +# while len(fibonacciList) < m: +# fibonacciList.append(fibonacciList[-1] + fibonacciList[-2]) +# return fibonacciList[n-1:] + def fibonacci(n, m): - pass + i = 1 + fibonacciList = [1, 1] + while len(fibonacciList) < m and i != n: + fibonacciList.append(fibonacciList[-1] + fibonacciList[-2]) + fibonacciList.pop(0) + i += 1 + else: + while len(fibonacciList) < m + 1 - n: + fibonacciList.append(fibonacciList[-1] + fibonacciList[-2]) + return fibonacciList + +print(fibonacci(5, 8)) # Задача-2: # Напишите функцию, сортирующую принимаемый список по возрастанию. @@ -12,16 +33,116 @@ def fibonacci(n, m): def sort_to_max(origin_list): - pass + lenghtList = len(origin_list) + for i in range(lenghtList - 1): + for n in range(lenghtList - i - 1): + if origin_list[n] > origin_list[n + 1]: + origin_list[n], origin_list[n + 1] = origin_list[n + 1], origin_list[n] + return origin_list + +print(sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0])) -sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) # Задача-3: # Напишите собственную реализацию стандартной функции filter. # Разумеется, внутри нельзя использовать саму функцию filter. +def newFilter(funct, arg): + list = [] + for itm in arg: + if funct(itm) == True: + list.append(itm) + return list + +list2 = newFilter(lambda x: x < 20, [1, 5, 8, 15, 16, 7, 46, 5]) +print(list2) # Задача-4: # Даны четыре точки А1(х1, у1), А2(x2 ,у2), А3(x3 , у3), А4(х4, у4). # Определить, будут ли они вершинами параллелограмма. +def check(n, m): + deltaX = n[0] - m[0] + deltaY = n[1] - m[1] + zN = math.sqrt(deltaX ** 2 + deltaY ** 2) + return zN + +a1x = int(input('a1x: ')) +a1y = int(input('a1y: ')) +a2x = int(input('a2x: ')) +a2y = int(input('a2y: ')) +a3x = int(input('a3x: ')) +a3y = int(input('a3y: ')) +a4x = int(input('a4x: ')) +a4y = int(input('a4y: ')) + +a = [ + [a1x, a1y], + [a2x, a2y], + [a3x, a3y], + [a4x, a4y] +] +z = [check(a[0], a[1]), + check(a[0], a[2]), + check(a[0], a[3]), + check(a[1], a[2]), + check(a[1], a[3]), + check(a[2], a[3]), +] + +i = 0 +for w in range(len(z) - 1): + for q in range(len(z) - w - 1): + if z[w] == z[q + w + 1]: + i += 1 +if i == 2: + print('введенные точки являются вершинами паралелограмма') +elif i == 3: + print('введенные точки являются частным случаем паралелограмма - прямоугольником') +elif i == 6: + print('введенные точки являются частным случаем паралелограмма - ромбом') +elif i == 7: + print('введенные точки являются частным случаем паралелограмма - квадратом') +else: + print('введенные точки НЕявляются вершинами паралелограмма') + +# примеры фигур: +# ромб +# a1x = 1 +# a1y = 4 +# a2x = 3 +# a2y = 7 +# a3x = 5 +# a3y = 4 +# a4x = 3 +# a4y = 1 +# +# квадрат +# a1x = 1 +# a1y = 1 +# a2x = 1 +# a2y = 4 +# a3x = 4 +# a3y = 4 +# a4x = 4 +# a4y = 1 +# +# прямоугольник +# a1x = 1 +# a1y = 1 +# a2x = 1 +# a2y = 4 +# a3x = 5 +# a3y = 4 +# a4x = 5 +# a4y = 1 +# +# паралелограмм +# a1x = 3 +# a1y = 2 +# a2x = 1 +# a2y = 5 +# a3x = 5 +# a3y = 6 +# a4x = 7 +# a4y = 3 \ No newline at end of file From 615dcd5554f179910159af649a40b67fc1e25b3d Mon Sep 17 00:00:00 2001 From: Sin93 Date: Fri, 30 Aug 2019 08:57:47 +0300 Subject: [PATCH 4/8] =?UTF-8?q?=D0=A1=D0=B5=D0=B9=D1=87=D0=B0=D1=81=20?= =?UTF-8?q?=D0=B2=20=D0=BE=D1=82=D0=BF=D1=83=D1=81=D0=BA=D0=B5,=20=D0=BA?= =?UTF-8?q?=20=D1=81=D0=BE=D0=B6=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D1=8E=20?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=B0=D0=BA=20=D0=BD=D0=B5=20=D0=B2=D1=8B?= =?UTF-8?q?=D1=85=D0=BE=D0=B4=D0=B8=D1=82=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20=D1=87=D1=82=D0=BE-=D1=82=D0=BE=20=D0=BE=D1=81?= =?UTF-8?q?=D0=BC=D1=8B=D1=81=D0=BB=D0=B5=D0=BD=D0=BD=D0=BE=D0=B5,=202=20?= =?UTF-8?q?=D1=87=D0=B8=D1=81=D0=BB=D0=B0=20=D0=B2=D0=B5=D1=80=D0=BD=D1=83?= =?UTF-8?q?=D1=81=D1=8C=20=D1=81=20=D0=B3=D0=BE=D1=80=20=D0=B8=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D1=8E=20=D0=B2=D1=8B=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=BD=D0=BE=D0=B5=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson04/home_work/hw04_easy.py | 7 +++++++ lesson04/home_work/hw04_hard.py | 3 +++ lesson04/home_work/hw04_normal.py | 3 +++ 3 files changed, 13 insertions(+) diff --git a/lesson04/home_work/hw04_easy.py b/lesson04/home_work/hw04_easy.py index 85035ea8b..27ce109cd 100644 --- a/lesson04/home_work/hw04_easy.py +++ b/lesson04/home_work/hw04_easy.py @@ -1,3 +1,6 @@ + +# После отпуска (3-4 сентября) сдам, сейчас никак не успеваю( + # Все задачи текущего блока решите с помощью генераторов списков! # Задание-1: @@ -6,6 +9,10 @@ # квадратами элементов исходного списка # [1, 2, 4, 0] --> [1, 4, 16, 0] +a = ... +b = list(map(lambda x: x ** 2, a)) +print(b) + # Задание-2: # Даны два списка фруктов. # Получить список фруктов, присутствующих в обоих исходных списках. diff --git a/lesson04/home_work/hw04_hard.py b/lesson04/home_work/hw04_hard.py index 3b12dc315..404251f0d 100644 --- a/lesson04/home_work/hw04_hard.py +++ b/lesson04/home_work/hw04_hard.py @@ -1,3 +1,6 @@ + +# После отпуска (3-4 сентября) сдам, сейчас никак не успеваю( + # Задание-1: # Матрицы в питоне реализуются в виде вложенных списков: # Пример. Дано: diff --git a/lesson04/home_work/hw04_normal.py b/lesson04/home_work/hw04_normal.py index 739dd33f8..02861353e 100644 --- a/lesson04/home_work/hw04_normal.py +++ b/lesson04/home_work/hw04_normal.py @@ -1,3 +1,6 @@ + +# После отпуска (3-4 сентября) сдам, сейчас никак не успеваю( + # Задание-1: # Вывести символы в нижнем регистре, которые находятся вокруг # 1 или более символов в верхнем регистре. From f712b310dae2062e0b10d50d880ce279ef342b11 Mon Sep 17 00:00:00 2001 From: Sin93 Date: Fri, 6 Sep 2019 13:06:42 +0300 Subject: [PATCH 5/8] =?UTF-8?q?=D0=94=D0=97=205?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson05/home_work/__init__.py | 0 lesson05/home_work/hw05_easy.py | 63 +++++++++++++++++++++++++++++++ lesson05/home_work/hw05_hard.py | 52 +++++++++++++++++++++++++ lesson05/home_work/hw05_normal.py | 38 +++++++++++++++++++ 4 files changed, 153 insertions(+) create mode 100644 lesson05/home_work/__init__.py diff --git a/lesson05/home_work/__init__.py b/lesson05/home_work/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/lesson05/home_work/hw05_easy.py b/lesson05/home_work/hw05_easy.py index c6317de2b..94e37d5fc 100644 --- a/lesson05/home_work/hw05_easy.py +++ b/lesson05/home_work/hw05_easy.py @@ -1,10 +1,73 @@ +import os +import sys # Задача-1: # Напишите скрипт, создающий директории dir_1 - dir_9 в папке, # из которой запущен данный скрипт. # И второй скрипт, удаляющий эти папки. +def createDIR(dirrectory, name): + try: + path = f'{dirrectory}\{name}' + os.mkdir(path) + print(f'Дирректория {name} создана') + return True + except Exception as e: + print(f'Создать дирректорию {name} не вышло, ошибка: ', e) + return False + +def deleteDIR(name): + try: + os.rmdir(os.path.join(os.getcwd(), name)) + print(f'Дирректория {name} удалена') + return True + except Exception as e: + print(f'Удалить дирректорию {name} не вышло, ошибка: ', e) + return False + +# i = 1 +# while i <= 9: +# nameDir = (f'dir_{i}') +# a = createDIR(nameDir) +# i += 1 +# +# userAnswer = input('Хотите удалить дирректории dir_1 - dir_9? (y/n)') +# if userAnswer == 'y': +# i = 1 +# while i <= 9: +# nameDir = (f'dir_{i}') +# a = deleteDIR(nameDir) +# i += 1 + + # Задача-2: # Напишите скрипт, отображающий папки текущей директории. +def dirInThisDIR(dir): + try: + a = [] + [a.append(itm) for itm in os.listdir(dir) if os.path.isdir(f'{dir}\{itm}')] + return a + except Exception as e: + return e + +def filesInThisDIR(dir): + try: + a = [] + [a.append(f) for f in os.listdir(dir)] + return a + except Exception as e: + return e + +# dirInThisDIR(os.getcwd()) + # Задача-3: # Напишите скрипт, создающий копию файла, из которого запущен данный скрипт. + +def copyFile(fileName): + with open(os.path.join(os.getcwd(), fileName), 'br') as f: + reed_data = f.read() + with open(os.path.join(os.getcwd(), f'copy-{fileName}'), 'bw') as f: + f.write(reed_data) + +# copyFile(os.path.basename(sys.argv[0])) + diff --git a/lesson05/home_work/hw05_hard.py b/lesson05/home_work/hw05_hard.py index 7507e47b2..6d6367275 100644 --- a/lesson05/home_work/hw05_hard.py +++ b/lesson05/home_work/hw05_hard.py @@ -1,3 +1,5 @@ +# Hard постараюсь попозже выполнить, пока просто перенес содержимое examples/5_with_args.py + # Задание-1: # Доработайте реализацию программы из примера examples/5_with_args.py, # добавив реализацию следующих команд (переданных в качестве аргументов): @@ -13,3 +15,53 @@ # Исходной директорией считать ту, в которой был запущен скрипт. # P.S. По возможности, сделайте кросс-платформенную реализацию. + +import os +import sys +print('sys.argv = ', sys.argv) + + +def print_help(): + print("help - получение справки") + print("mkdir - создание директории") + print("ping - тестовый ключ") + + +def make_dir(): + if not dir_name: + print("Необходимо указать имя директории вторым параметром") + return + dir_path = os.path.join(os.getcwd(), dir_name) + try: + os.mkdir(dir_path) + print('директория {} создана'.format(dir_name)) + except FileExistsError: + print('директория {} уже существует'.format(dir_name)) + + +def ping(): + print("pong") + +do = { + "help": print_help, + "mkdir": make_dir, + "ping": ping +} + +try: + dir_name = sys.argv[2] +except IndexError: + dir_name = None + +try: + key = sys.argv[1] +except IndexError: + key = None + + +if key: + if do.get(key): + do[key]() + else: + print("Задан неверный ключ") + print("Укажите ключ help для получения справки") \ No newline at end of file diff --git a/lesson05/home_work/hw05_normal.py b/lesson05/home_work/hw05_normal.py index ead6bbc19..f2c7deeab 100644 --- a/lesson05/home_work/hw05_normal.py +++ b/lesson05/home_work/hw05_normal.py @@ -1,3 +1,5 @@ +import os +import hw05_easy as myFunc # Задача-1: # Напишите небольшую консольную утилиту, # позволяющую работать с папками текущей директории. @@ -13,3 +15,39 @@ # Для решения данной задачи используйте алгоритмы из задания easy, # оформленные в виде соответствующих функций, # и импортированные в данный файл из easy.py + +dirrectory = os.getcwd() +while True: + print('Текущая дирректория: ', dirrectory) + userAnswer = input('''Привет пользователь! + Выбери действие: + 1. Перейти в папку + 2. Просмотреть содержимое текущей папки + 3. Удалить папку + 4. Создать папку + 5. Вернуться в корневую папку + q - завершить программу''') + if userAnswer == '1': + dirList = myFunc.dirInThisDIR(dirrectory) + userAnswer = input(f'В дирректории доступны папки для перехода: {dirList}') + if userAnswer in dirList: + dirrectory = dirrectory + f'\{userAnswer}' + print(f'Переход в папку {userAnswer} успешно выполнен') + else: + print('Ошибка! Не верное имя папки, повторите ввод') + elif userAnswer == '2': + print('В текущей дирректории содержатся файлы и папки:', myFunc.filesInThisDIR(dirrectory)) + elif userAnswer == '3': + dirList = myFunc.dirInThisDIR(dirrectory) + userAnswer = input(f'В дирректории доступны папки для удаления: {dirList}') + myFunc.deleteDIR(dirrectory, userAnswer) + elif userAnswer == '4': + userAnswer = input('Введите название папки: ') + myFunc.createDIR(dirrectory, userAnswer) + elif userAnswer == '5': + dirrectory = os.getcwd() + elif userAnswer == 'q': + print('Программа завершена.') + break + else: + print('Неизвестная команда, повторите ввод') \ No newline at end of file From 74748579250b9bdbec6bce0995d055d7c5848229 Mon Sep 17 00:00:00 2001 From: Sin93 Date: Fri, 6 Sep 2019 15:29:44 +0300 Subject: [PATCH 6/8] =?UTF-8?q?=D0=B4=D0=B7=206,=20=D0=BF=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B5=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson06/home_work/hw06_easy.py | 2 ++ lesson06/home_work/hw06_hard.py | 2 ++ lesson06/home_work/hw06_normal.py | 2 ++ 3 files changed, 6 insertions(+) diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index fe5dc2b11..c1e334478 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -1,3 +1,5 @@ +# Не успел сделать, вчера и сегодня занимался ДЗ к 4 и 5 уроку, постараюсь до конца недели выполнить и сдать. + # Задача-1: Написать класс для фигуры-треугольника, заданного координатами трех точек. # Определить методы, позволяющие вычислить: площадь, высоту и периметр фигуры. diff --git a/lesson06/home_work/hw06_hard.py b/lesson06/home_work/hw06_hard.py index fae8d84d2..12b94a671 100644 --- a/lesson06/home_work/hw06_hard.py +++ b/lesson06/home_work/hw06_hard.py @@ -1,3 +1,5 @@ +# Не успел сделать, вчера и сегодня занимался ДЗ к 4 и 5 уроку, постараюсь до конца недели выполнить и сдать. + # Задание-1: Решите задачу (дублированную ниже): # Дана ведомость расчета заработной платы (файл "data/workers"). diff --git a/lesson06/home_work/hw06_normal.py b/lesson06/home_work/hw06_normal.py index 01c3982f4..21b0b677e 100644 --- a/lesson06/home_work/hw06_normal.py +++ b/lesson06/home_work/hw06_normal.py @@ -1,3 +1,5 @@ +# Не успел сделать, вчера и сегодня занимался ДЗ к 4 и 5 уроку, постараюсь до конца недели выполнить и сдать. + # Задание-1: # Реализуйте описаную ниже задачу, используя парадигмы ООП: # В школе есть Классы(5А, 7Б и т.д.), в которых учатся Ученики. From 941dfce420e11226fb8c47e57a014d2b8dbc32cb Mon Sep 17 00:00:00 2001 From: Sin93 Date: Sun, 22 Sep 2019 14:56:02 +0300 Subject: [PATCH 7/8] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BA=207=20=D1=83=D1=80=D0=BE=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson07/home_work/loto.py | 139 +++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index 5ea6ad844..d67b1eed6 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -57,3 +57,142 @@ модуль random: http://docs.python.org/3/library/random.html """ +import random + +class Plaer: + + def __init__(self, name): + self.name = name + self.card = [ + ['--', '--', '--', '--', '--', '--', '--', '--', '--'], + ['--', '--', '--', '--', '--', '--', '--', '--', '--'], + ['--', '--', '--', '--', '--', '--', '--', '--', '--'] + ] + self.gen_card() + + def gen_card(self): + numbersForCard = [] + for itm in range(1, 91): + numbersForCard.append(itm) + random.shuffle(numbersForCard) + + i = 0 + while i < 3: + position = [itm for itm in range(0, 9)] + random.shuffle(position) + pos = [position.pop(0) for _ in range(5)] + pos.sort() + numbersLine = [numbersForCard.pop(0) for _ in range(5)] + numbersLine.sort() + for j in pos: + self.card[i][j] = str(numbersLine.pop(0)) + i += 1 + newCard = '' + for i in range(3): + for j in range(9): + newCard = newCard + str(self.card[i][j]) + ' ' + newCard = newCard + '\n' + self.plaerCard = f'Карточка игрока: {self.name}\n{newCard}' + return self.plaerCard + +class Game: + def __init__(self, number): + self.number = number + self.gen_bag() + self.PlayGame() + + def gen_bag(self): + self.bag = [] + for itm in range(1, 91): + self.bag.append(str(itm)) + random.shuffle(self.bag) + return self.bag + + def PlayGame(self): + print(plaer.plaerCard) + print(plaer2.plaerCard) + + for num in self.bag: + # спрашиваем игрока и проверяем его карточку + plaerAnswer = input(f'Выпало число: {num}, зачеркнуть?(д/н)\n') + numberInCard = None + + # Проверяем ответ Да + if plaerAnswer == 'д': + for i in range(0, 3): + numberInCard = num in plaer.card[i] + if numberInCard == True: + plaer.card[i][plaer.card[i].index(num)] = f'\{num}/' + print(self.GenStrCard(plaer)) + print(self.GenStrCard(plaer2)) + break + if numberInCard == False: + print('В вашей карте нет выпавшего числа. Вы проиграли!') + break + + # Проверяем ответ Нет + numberInCard = None + if plaerAnswer == 'н': + for i in range(0, 3): + numberInCard = num in plaer.card[i] + if numberInCard == True: + print('В вашей карте есть выпавшее число. Вы проиграли!') + break + if numberInCard == True: + break + else: + print(self.GenStrCard(plaer)) + print(self.GenStrCard(plaer2)) + + # Компьютер сам проверяет свою карточку и отмечает выпавшее число + for i in range(0, 3): + numberInCard2 = num in plaer2.card[i] + if numberInCard2 == True: + plaer2.card[i][plaer2.card[i].index(num)] = f'\{num}/' + print(self.GenStrCard(plaer)) + print(self.GenStrCard(plaer2)) + break + else: + continue + + # Надо завершить игру если все числа в одной из карточек отмечены + check = 0 + check2 = 0 + for itm in range(1, 91): + for i in range(0, 3): + if str(itm) in plaer.card[i]: + check = 1 + if str(itm) in plaer2.card[i]: + check2 = 1 + if check == 0: + print(f'Игрок {plaer.name} победил!') + break + elif check2 == 0: + print(f'Игрок {plaer2.name} победил!') + break + + + def GenStrCard(self, plaerName): + self.newCard = '' + for i in range(3): + for j in range(9): + self.newCard = self.newCard + str(plaerName.card[i][j]) + ' ' + self.newCard = self.newCard + '\n' + return f'Карточка игрока: {plaerName.name}\n{self.newCard}' + + +if __name__ == '__main__': + n = 1 + name = input('Введите имя игрока ') + plaer = Plaer(name) + plaer2 = Plaer('Компьютер') + Game(n) + while True: + playMore = input('Хотите сыграть ещё раз?(д/н)') + if playMore == 'д': + plaer = Plaer(name) + plaer2 = Plaer('Компьютер') + Game(n+1) + else: + print('\nДо свидания!') + break \ No newline at end of file From 8d51de91ab11fa4cc2818e5479e7b79982bb0301 Mon Sep 17 00:00:00 2001 From: Sin93 Date: Sun, 22 Sep 2019 14:58:55 +0300 Subject: [PATCH 8/8] =?UTF-8?q?=D0=A2=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20easy?= =?UTF-8?q?=20=D0=BA=206=20=D1=83=D1=80=D0=BE=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson06/home_work/hw06_easy.py | 96 ++++++++- lesson06/home_work/hw06_hard.py | 2 +- ...20\260\321\202\320\265\320\273\321\217.py" | 184 ++++++++++++++++++ lesson06/home_work/hw06_normal.py | 87 ++++++++- 4 files changed, 363 insertions(+), 6 deletions(-) create mode 100644 "lesson06/home_work/hw06_normal - \320\240\320\265\321\210\320\265\320\275\320\270\320\265 \320\277\321\200\320\265\320\277\320\276\320\264\320\260\320\262\320\260\321\202\320\265\320\273\321\217.py" diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index c1e334478..f3124e6e5 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -1,11 +1,101 @@ -# Не успел сделать, вчера и сегодня занимался ДЗ к 4 и 5 уроку, постараюсь до конца недели выполнить и сдать. +import math # Задача-1: Написать класс для фигуры-треугольника, заданного координатами трех точек. # Определить методы, позволяющие вычислить: площадь, высоту и периметр фигуры. +class Triangle: + def __init__(self, ax, ay, bx, by, cx, cy, ab=None, bc=None, ac=None): + self.ax = ax + self.ay = ay + self.bx = bx + self.by = by + self.cx = cx + self.cy = cy + self.ab = round(math.sqrt((self.bx - self.ax) ** 2 + (self.by - self.ay) ** 2), 2) + self.bc = round(math.sqrt((self.cx - self.bx) ** 2 + (self.cy - self.by) ** 2), 2) + self.ac = round(math.sqrt((self.cx - self.ax) ** 2 + (self.cy - self.ay) ** 2), 2) + + def perim(self): + self.perimetr = round(float(self.ab + self.bc + self.ac), 2) + self.pp = self.perimetr / 2 + return self.perimetr + + def area(self): + self.s = round(math.sqrt(self.pp * (self.pp - self.ab) * (self.pp - self.bc) * (self.pp - self.ac)), 2) + return self.s + + def height(self): + if self.ay > self.by and self.ay > self.cy: + self.h = round(2 * self.s / self.bc, 2) + elif self.by > self.ay and self.by > self.cy: + self.h = round(2 * self.s / self.ac, 2) + else: + self.h = round(2 * self.s / self.ab, 2) + + return self.h + + +# if __name__ == '__main__': +# first = Triangle(1, 1, 6, 2, 4, 5) +# print('Сторона ab:', first.ab, '\nСтрона bc', first.bc, '\nСторона aс:', first.ac) +# print('Периметр введенного треугольника: ', first.perim()) +# print('Площадь треугольника', first.area()) +# print('Высота треугольника, опущенная из самой высокой точки (по оси y):', first.height()) + -# Задача-2: Написать Класс "Равнобочная трапеция", заданной координатами 4-х точек. -# Предусмотреть в классе методы: # проверка, является ли фигура равнобочной трапецией; # вычисления: длины сторон, периметр, площадь. +# Внимание! Методы не будут правильно отрабатывать если вводить точки не в том порядке, который я задумал. +# Можно было бы заморочиться и накрутить проверки, но я боюсь, что ещё пару часов на это уйдёт, а ещё много всего надо накодить. +# Порядок который я задумал (x;y): +# 1. Нижняя левая +# 2. Нижняя правая +# 3. Верхняя правая +# 4. Верхняя левая + +class Trapeze: + def __init__(self, ax, ay, bx, by, cx, cy, dx, dy): + self.ax = ax + self.ay = ay + self.bx = bx + self.by = by + self.cx = cx + self.cy = cy + self.dx = dx + self.dy = dy + + def lenghtSide(self): + self.ab = round(math.sqrt((self.bx - self.ax) ** 2 + (self.by - self.ay) ** 2), 2) + self.bc = round(math.sqrt((self.cx - self.bx) ** 2 + (self.cy - self.by) ** 2), 2) + self.cd = round(math.sqrt((self.cx - self.dx) ** 2 + (self.cy - self.dy) ** 2), 2) + self.ad = round(math.sqrt((self.dx - self.ax) ** 2 + (self.dy - self.ay) ** 2), 2) + + def check(self): + if (self.bc == self.ad) and (self.ay - self.by == 0) and (self.cy - self.dy == 0) and (abs(self.ax - self.dx) == abs(self.bx - self.cx)) and (self.ab != self.cd): + return True + else: + return False + + def perim(self): + self.perimetr = round(float(self.ab + self.bc + self.cd + self.ad), 2) + return self.perimetr + + def area(self): + if self.ab > self.cd: + self.s = (self.dy - self.ay) * (self.dx - self.ax) + self.cd * (self.dy - self.ay) + else: + self.s = (self.dy - self.ay) * (self.ax - self.dx) + self.ab * (self.dy - self.ay) + return self.s + + +# if __name__ == '__main__': +# second = Trapeze(0, 0, 5, 0, 4, 4, 1, 4) +# second.lenghtSide() +# if second.check() == False: +# print("\nВведенные точки не соответствуют равнобокой трапеции") +# else: +# print('\nВведены точки, которые соответствуют равнобокой трапеции') +# print('Сторона ab:', second.ab, '\nСторона bc:', second.bc, '\nСторона cd:', second.cd, '\nСторона ad:', second.ad) +# print('Периметр трапеции:', second.perim()) +# print('Площадь трапеции:', second.area()) \ No newline at end of file diff --git a/lesson06/home_work/hw06_hard.py b/lesson06/home_work/hw06_hard.py index 12b94a671..feff284ae 100644 --- a/lesson06/home_work/hw06_hard.py +++ b/lesson06/home_work/hw06_hard.py @@ -11,4 +11,4 @@ # С использованием классов. # Реализуйте классы сотрудников так, чтобы на вход функции-конструктора -# каждый работник получал строку из файла +# каждый работник получал строку из файла \ No newline at end of file diff --git "a/lesson06/home_work/hw06_normal - \320\240\320\265\321\210\320\265\320\275\320\270\320\265 \320\277\321\200\320\265\320\277\320\276\320\264\320\260\320\262\320\260\321\202\320\265\320\273\321\217.py" "b/lesson06/home_work/hw06_normal - \320\240\320\265\321\210\320\265\320\275\320\270\320\265 \320\277\321\200\320\265\320\277\320\276\320\264\320\260\320\262\320\260\321\202\320\265\320\273\321\217.py" new file mode 100644 index 000000000..5067d4982 --- /dev/null +++ "b/lesson06/home_work/hw06_normal - \320\240\320\265\321\210\320\265\320\275\320\270\320\265 \320\277\321\200\320\265\320\277\320\276\320\264\320\260\320\262\320\260\321\202\320\265\320\273\321\217.py" @@ -0,0 +1,184 @@ +# Задание-1: +# Реализуйте описаную ниже задачу, используя парадигмы ООП: +# В школе есть Классы(5А, 7Б и т.д.), в которых учатся Ученики. +# У каждого ученика есть два Родителя(мама и папа). +# Также в школе преподают Учителя. Один учитель может преподавать +# в неограниченном кол-ве классов свой определенный предмет. +# Т.е. Учитель Иванов может преподавать математику у 5А и 6Б, +# но больше математику не может преподавать никто другой. + +# Выбранная и заполненная данными структура должна решать следующие задачи: +# 1. Получить полный список всех классов школы +# 2. Получить список всех учеников в указанном классе +# (каждый ученик отображается в формате "Фамилия И.О.") +# 3. Получить список всех предметов указанного ученика +# (Ученик --> Класс --> Учителя --> Предметы) +# 4. Узнать ФИО родителей указанного ученика +# 5. Получить список всех Учителей, преподающих в указанном классе + +import random + +class Human: + + def __init__(self, name, surname=None, father=None, mother=None): + """ + Базовый класс описывающий человека, обязательно передать Имя + :param name: str + :param surname: str + :param father: Human + :param mother: Human + """ + self.name = name + if father: + self.surname = father.surname + self.patr_name = father.name + else: + self.surname = surname or 'Найден' + self.patr_name = 'Иван' + self.father = father + self.mother = mother + + def __str__(self): + return f'{self.surname} {self.name[0]}.{self.patr_name[0]}' + +class Subject: + + def __init__(self, name): + self.name = name + + +class Teacher(Human): + sh_class = [] + + def __init__(self, **kwargs): + self.subject = kwargs['subject'] + kwargs.pop('subject') + Human.__init__(self, **kwargs) + + +class Student(Human): + sh_class = None + + def __init__(self, **kwargs): + Human.__init__(self, **kwargs) + + def __str__(self): + return f'{self.surname} {self.name[0].upper()}. {self.father.name[0].upper()}.' + + @property + def get_subjects(self): + return [techer.subject for techer in self.sh_class.teachers] + + def get_parrents(self): + return list(map(str, (self.father, self.mother))) + + +class SchoolClass: + school = None + __teachers = [] + __students = [] + + def __init__(self, name): + self.name = name + + @property + def teachers(self): + return self.__teachers + + def add_teacher(self, teacher: Teacher): + self.__teachers.append(teacher) + teacher.sh_class.append(self) + + @property + def students(self): + return list(map(str, self.__students)) + + def add_student(self, student: Student): + self.__students.append(student) + student.sh_class = self + + +class School: + __students = [] + __teachers = [] + __sh_class = [] + __sh_number = int() + + def __init__(self, sh_number: int): + """ + Класс школы, при создании указать номер школы + :param sh_number: int + """ + self.__sh_number = sh_number + self.gen_class() + + @property + def students(self): + return self.__students + + def add_student(self, student: Student): + random.choice(self.__sh_class).add_student(student) + self.__students.append(student) + + @property + def teachers(self): + return self.__teachers + + def add_teacher(self, teacher: Teacher): + # todo Надо проверить является ли учитель классом Teacher + for clss in self.__sh_class: + if teacher.subject not in [itm.subject for itm in clss.teachers]: + clss.add_teacher(teacher) + break + self.__teachers.append(teacher) + + def add_sh_class(self, sh_class: SchoolClass): + # todo Проверить соответсвие типов + sh_class.school = self + self.__sh_class.append(sh_class) + + def gen_class(self): + s_classes = ['5A', '6B', '7G', '8D'] + self.__sh_class = [SchoolClass(name) for name in s_classes] + + @property + def sh_cls(self): + return self.__sh_class + + +if __name__ == '__main__': + + names = ['Иван', 'Филипп', 'Анатолий', 'Анна', 'Мария', 'Тамара'] + surnames = ['Сидоров', 'Антуанет', 'Питонов', 'Иванов', 'Джобс'] + + subjects_lst = [Subject(itm) for itm in ['математика', 'геометрия', 'Ин-яз', 'Физ-ра', 'Информатика']] + + humans = [Human(name=random.choice(names), surname=random.choice(surnames)) for itm in range(20)] + + students = [] + for _ in range(20): + fat = random.choice(humans) + mather = random.choice(humans) + + student = Student(name=random.choice(names), father=fat, mother=mather) + students.append(student) + + teachers = [] + + for _ in range(50): + fat = random.choice(humans) + mather = random.choice(humans) + teacher = Teacher(name=random.choice(names), father=fat, mother=mather, subject=random.choice(subjects_lst)) + teachers.append(teacher) + school = School(1) + + # _ = [school.add_teacher(teacher) for teacher in teachers] + + list(map(school.add_teacher, teachers)) + list(map(school.add_student, students)) + print(1) + print(school.sh_cls) + print(2) + print(school.sh_cls[0].students) + print(3) + print(school.students[0].get_subjects) \ No newline at end of file diff --git a/lesson06/home_work/hw06_normal.py b/lesson06/home_work/hw06_normal.py index 21b0b677e..1b0c9346b 100644 --- a/lesson06/home_work/hw06_normal.py +++ b/lesson06/home_work/hw06_normal.py @@ -1,5 +1,3 @@ -# Не успел сделать, вчера и сегодня занимался ДЗ к 4 и 5 уроку, постараюсь до конца недели выполнить и сдать. - # Задание-1: # Реализуйте описаную ниже задачу, используя парадигмы ООП: # В школе есть Классы(5А, 7Б и т.д.), в которых учатся Ученики. @@ -17,3 +15,88 @@ # (Ученик --> Класс --> Учителя --> Предметы) # 4. Узнать ФИО родителей указанного ученика # 5. Получить список всех Учителей, преподающих в указанном классе + +import random + +class Human: + + def __init__(self, name, surname=None, father=None, mother=None): + """ + Базовый класс описывающий человека, обязательно передать Имя + :param name: str + :param surname: str + :param father: Human + :param mother: Human + """ + self.name = name + if father: + self.surname = father.surname + self.patr_name = father.name + else: + self.surname = surname or 'Неизвестна' + self.patr_name = 'Иван' + self.father = father + self.mother = mother + + def __str__(self): + return f'{self.surname} {self.name[0]}.{self.patr_name[0]}' + +class Subject: + + def __init__(self, name): + self.name = name + + +class Teacher(Human): + sh_class = [] + + def __init__(self, **kwargs): + self.subject = kwargs['subject'] + kwargs.pop('subject') + Human.__init__(self, **kwargs) + + +class Student(Human): + sh_class = None + + def __init__(self, **kwargs): + Human.__init__(self, **kwargs) + + def __str__(self): + return f'{self.surname} {self.name[0].upper()}. {self.father.name[0].upper()}.' + + @property + def get_subjects(self): + return [techer.subject for techer in self.sh_class.teachers] + + def get_parrents(self): + return list(map(str, (self.father, self.mother))) + +class SchoolClass: + + +class School: + +if __name__ == '__main__': + names = ['Иван', 'Филипп', 'Анатолий', 'Анна', 'Мария', 'Тамара'] + surnames = ['Сидоров', 'Антуанет', 'Питонов', 'Иванов', 'Джобс'] + subjects_lst = ['математика', 'геометрия', 'Ин-яз', 'Физ-ра', 'Информатика'] + humans = [Human(name=random.choice(names), surname=random.choice(surnames))] + + students = [] + + for _ in range(5): + fat = random.choice(humans) + mather = random.choice(humans) + student = Student(name=random.choice(names), father=fat, mother=mather) + students.append(student) + + teachers = [] + + for _ in range(50): + fat = random.choice(humans) + mather = random.choice(humans) + teacher = Teacher(name=random.choice(names), father=fat, mother=mather, subject=random.choice(subjects_lst)) + teachers.append(teacher) + +