diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index ed4447e50..2e9ac202f 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -1,3 +1,4 @@ +№__author__ Сидоренко Михаил Владимирович # Задача-1: # Дан список фруктов. # Напишите программу, выводящую фрукты в виде нумерованного списка, @@ -12,14 +13,36 @@ # 4. арбуз # Подсказка: воспользоваться методом .format() - +fruits = ["яблоко", "банан", "киви", "арбуз"] +i = 0 +for fruit in fruits: + i = i + 1 + loc_fruit = str(i) + '. ' + '{:>10}'.format(fruit) + print(loc_fruit) # Задача-2: # Даны два произвольные списка. # Удалите из первого списка элементы, присутствующие во втором списке. - - +list1 = ["Вася", "Петя", "Маша", "Наташа"] +list2 = ["Гриша", "John", "Mike", "Петя", "Наташа"] +for anyname in list2: + if list1.count(anyname) > 0: + list1.remove(anyname) +for anyname in list1: + print(anyname) # Задача-3: # Дан произвольный список из целых чисел. # Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: # если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. +numbers = [1, 2, 5, 6, 7, 8, 20, 50] +newlist = [] +for numb in numbers: + if numb % 2 == 0: + newdig = numb / 4 + newlist.append(newdig) + else: + newdig = numb * 2 + newlist.append(newdig) + +for newnumb in newlist: + print(newnumb) \ No newline at end of file diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index c96843184..440707e6d 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -1,3 +1,4 @@ +№__author__ Сидоренко Михаил Владимирович # Задание-1: уравнение прямой вида y = kx + b задано в виде строки. # Определить координату y точки с заданной координатой x. diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index 3acfaabb6..87b33223d 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -1,3 +1,5 @@ +import random + # Задача-1: # Дан список, заполненный произвольными целыми числами, получите новый список, # элементами которого будут квадратные корни элементов исходного списка, @@ -5,21 +7,108 @@ # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] +list1 = [2, -5, 8, 9, -25, 25, 4] +list2 = [] +for elem in list1: + if elem > 0: + new_elem = elem ** 0.5 + int_elem = int(new_elem) + if ( int_elem - new_elem ) == 0: + list2.append(int_elem) +for elem in list2: + print(elem) # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. # Склонением пренебречь (2000 года, 2010 года) +strdate = input('Введите дату в формате DD.MM.YYYY: ') +list_date = strdate.split('.') +print(list_date) +if list_date[1] == '01': + month = 'января' +elif list_date[1] == '02': + month = 'февраля' +elif list_date[1] == '03': + month = 'марта' +elif list_date[1] == '04': + month = 'апреля' +elif list_date[1] == '05': + month = 'мая' +elif list_date[1] == '06': + month = 'июня' +elif list_date[1] == '07': + month = 'июля' +elif list_date[1] == '08': + month = 'августа' +elif list_date[1] == '09': + month = 'сентября' +elif list_date[1] == '10': + month = 'октября' +elif list_date[1] == '11': + month = 'ноября' +elif list_date[1] == '12': + month = 'декабря' - +listnum = ['первое', 'второе', 'третье','четвертое', 'пятое', 'щестое','седьмое', 'восьмое', 'девятое'] +if int(list_date[0]) == 10: + datestr = 'десятое' +elif int(list_date[0]) == 11: + datestr = 'одинадцатое' +elif int(list_date[0]) == 12: + datestr = 'двенадцатое' +elif int(list_date[0]) == 13: + datestr = 'тринадцатое' +elif int(list_date[0]) == 14: + datestr = 'четырнадцатое' +elif int(list_date[0]) == 15: + datestr = 'пятнадцатое' +elif int(list_date[0]) == 16: + datestr = 'шестнадцатое' +elif int(list_date[0]) == 17: + datestr = 'семнадцатое' +elif int(list_date[0]) == 18: + datestr = 'восемнадцатое' +elif int(list_date[0]) == 19: + datestr = 'девятнадцатое' +elif int(list_date[0]) == 20: + datestr = 'двадцатое' +elif int(list_date[0]) == 30: + datestr = 'тридцатое' +else: + minusindex = int(list_date[0]) - 1 + if int(list_date[0]) < 10: + datestr = listnum[minusindex] + elif (int(list_date[0]) < 30) and ( int(list_date[0]) > 20) : + datestr = 'двадцать' + listnum[minusindex] + elif int(list_date[0]) > 30: + datestr = 'тридцать' + listnum[minusindex] +print('{} {} {} года'.format(datestr,month,list_date[2])) # Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами # в диапазоне от -100 до 100. В списке должно быть n - элементов. # Подсказка: # для получения случайного числа используйте функцию randint() модуля random - +numelements = int(random.randint(1, 20)) +randlist = [] +for __ in range(numelements): + randlist.append(random.randint(-100, 100)) +for elem in randlist: + print(elem) # Задача-4: Дан список, заполненный произвольными целыми числами. -# Получите новый список, элементами которого будут: +# Получите новый список, элементами которого будут: # а) неповторяющиеся элементы исходного списка: # например, 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] +list_last = [1, 2, 4, 5, 6, 2, 5, 2] +lst2_1 = [] +lst2_2 = [] +for el4 in list_last: + if list_last.count(el4) < 2: + lst2_2.append(el4) + lst2_1.append(el4) + else: + if lst2_1.count(el4) == 0: + lst2_1.append(el4) +print(lst2_1) +print(lst2_2) \ No newline at end of file diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index fe5dc2b11..dabadc6cb 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -1,9 +1,43 @@ -# Задача-1: Написать класс для фигуры-треугольника, заданного координатами трех точек. -# Определить методы, позволяющие вычислить: площадь, высоту и периметр фигуры. - - -# Задача-2: Написать Класс "Равнобочная трапеция", заданной координатами 4-х точек. -# Предусмотреть в классе методы: -# проверка, является ли фигура равнобочной трапецией; -# вычисления: длины сторон, периметр, площадь. - +# Задача - 1 +# Опишите несколько классов TownCar, SportCar, WorkCar, PoliceCar +# У каждого класса должны быть следующие аттрибуты: +# speed, color, name, is_police - Булево значение. +# А так же несколько методов: go, stop, turn(direction) - которые должны сообщать, +# о том что машина поехала, остановилась, повернула(куда) + +# Задача - 2 +# Посмотрите на задачу-1 подумайте как выделить общие признаки классов +# в родительский и остальные просто наследовать от него. + +class car: + def __init__(self, speed, color, name, is_polise): + self.speed = int(speed) + self.color = color + self.name = name + self.is_polise = bool(is_polise) + def go(self): + print('машина модель {} поехала'.format(self.name)) + def stop(self): + print('машина модель {} остановилась'.format(self.name)) + def turn(self, way): + print('машина модель {} повернула {}'.format(self.name, way)) + + +class TownCar(car): + pass +class SportCar(car): + pass +class WorkCar(car): + pass +class PoliceCar(car): + pass + + +a1 = TownCar(80, 'green', 'lada', False) +a2 = SportCar(80, 'black', 'bmw', False) +a3 = WorkCar(80, 'brown', 'gazelle', False) +a4 = PoliceCar(80, 'white', 'priora', True) + +a1.turn('влево') +a2.stop() +a3.go() \ No newline at end of file diff --git a/lesson06/home_work/hw06_normal.py b/lesson06/home_work/hw06_normal.py index 01c3982f4..976500c17 100644 --- a/lesson06/home_work/hw06_normal.py +++ b/lesson06/home_work/hw06_normal.py @@ -1,17 +1,51 @@ -# Задание-1: -# Реализуйте описаную ниже задачу, используя парадигмы ООП: -# В школе есть Классы(5А, 7Б и т.д.), в которых учатся Ученики. -# У каждого ученика есть два Родителя(мама и папа). -# Также в школе преподают Учителя. Один учитель может преподавать -# в неограниченном кол-ве классов свой определенный предмет. -# Т.е. Учитель Иванов может преподавать математику у 5А и 6Б, -# но больше математику не может преподавать никто другой. - -# Выбранная и заполненная данными структура должна решать следующие задачи: -# 1. Получить полный список всех классов школы -# 2. Получить список всех учеников в указанном классе -# (каждый ученик отображается в формате "Фамилия И.О.") -# 3. Получить список всех предметов указанного ученика -# (Ученик --> Класс --> Учителя --> Предметы) -# 4. Узнать ФИО родителей указанного ученика -# 5. Получить список всех Учителей, преподающих в указанном классе +# Задача - 1 +# Ранее мы с вами уже писали игру, используя словари в качестве +# структур данных для нашего игрока и врага, давайте сделаем новую, но уже с ООП +# Опишите базовый класс Person, подумайте какие общие данные есть и у врага и у игрока +# Не забудьте, что у них есть помимо общих аттрибутов и общие методы. +# Теперь наследуясь от Person создайте 2 класса Player, Enemy. +# У каждой сущности должы быть аттрибуты health, damage, armor +# У каждой сущности должно быть 2 метода, один для подсчета урона, с учетом брони противника, +# второй для атаки противника. +# Функция подсчета урона должна быть инкапсулирована +# Вам надо описать игровой цикл так же через класс. +# Создайте экземпляры классов, проведите бой. Кто будет атаковать первым оставляю на ваше усмотрение. +import random +class person: + def __init__(self, name): + self.name = name + self.ammo = 500 + self.health = 100 + self.damage = 20 + self.armor =100 + def attack(self, ob1): + udar = random.randint(10, self.damage) + ob1.__uron__(udar) + def __uron__(self, dam): + if self.armor != 0: + self.armor -= dam + if self.armor < 0: + self.health += self.armor + self.armor = 0 + else: + self.health -= dam + + + def status(self): + print('осталось брони {} жизней {}'.format( self.armor, self.health)) + +class player(person): + pass +class enemy(person): + pass + +P1 = player('miha') +P2 = enemy('john') + +while P1.health > 0 and P2.health > 0: + P1.attack(P2) + P1.status() + P2.status() + P2.attack(P1) + P1.status() + P2.status() \ No newline at end of file