diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index ed4447e50..a08a511c2 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -1,3 +1,5 @@ +__author__ = 'Насонов Алексей Сергеевич' + # Задача-1: # Дан список фруктов. # Напишите программу, выводящую фрукты в виде нумерованного списка, @@ -13,13 +15,38 @@ # Подсказка: воспользоваться методом .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..f1faf7012 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,41 @@ # (т.е. 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' + +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)) + # Задание-3: "Перевёрнутая башня" (Задача олимпиадного уровня) @@ -53,4 +90,34 @@ # Выход: 6 2 # # Вход: 11 -# Выход: 5 3 \ No newline at end of file +# Выход: 5 3 + + +print("Задача-3:") +# Задаем номер квартиры +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("Номер последней квартиры(в правом верхнем углу):", int(MaxKvart)) +# Определяем верхний этаж этого квадрата (сумму n натуральных чисел) +MaxEtag = n * (n + 1) / 2 + +print("Этаж самой последней квартиры в этом квадрате", int(MaxEtag)) +# Определяем искомый этаж и смещение слева на право на этаже у искомой квартиры +DeltaEtag = (MaxKvart - Num) // n +RightOffset = (MaxKvart - Num) % n +print("Дельта этаж", int(DeltaEtag)) +print("Смещение квартиры справа", int(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 3acfaabb6..3d677dc38 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -1,3 +1,5 @@ +__author__ = 'Насонов Алексей Сергеевич' + # Задача-1: # Дан список, заполненный произвольными целыми числами, получите новый список, # элементами которого будут квадратные корни элементов исходного списка, @@ -5,17 +7,86 @@ # если такой корень вообще можно извлечь # Пример: Дано: [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:") +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: Напишите алгоритм, заполняющий список произвольными целыми числами # в диапазоне от -100 до 100. В списке должно быть n - элементов. # Подсказка: # для получения случайного числа используйте функцию randint() модуля random +print("Задача-3") +import random +NumList = [] +# Задаем количество элементов списка случайных значений +n = 10 +for item in range(n): + NumList.append(random.randint(-100, 100)) +print(NumList) # Задача-4: Дан список, заполненный произвольными целыми числами. # Получите новый список, элементами которого будут: @@ -23,3 +94,32 @@ # например, 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() +# Выполняем проверку первого элемента и удаляем его, +# если элемент встречается в исходном списке несколько раз, +# то заносим его только в новый список NumList_a +# если элемент встречается в исходном списке только один раз, +# то добавляем его в списки NumList_a, NumList_b +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) + diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index 5ea6ad844..e634402e8 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -57,3 +57,154 @@ модуль random: http://docs.python.org/3/library/random.html """ + +class Meshok(): + def __init__(self): + self.current_bochenok = None + self.vsego_bochenok = 90 + self._list_bochenok = [i for i in range(1,self.vsego_bochenok+1)] + def get_bochenok(self): + if self.get_ostalos() > 0: + import random + number = random.randint(1, len(self._list_bochenok)) + bochenok = self._list_bochenok[number-1] + self._list_bochenok.remove(bochenok) + self.current_bochenok = bochenok + return bochenok + else: + print("Мешок пуст") + def get_ostalos(self): + return len(self._list_bochenok) + +class Kartochka(): + def __init__(self,name,vsego_bochenok): + self.vsego_bochenok = vsego_bochenok + self.name = name + self._matrix_3x9 = [] + self.fill_matrix_3x9() + def fill_matrix_3x9(self): + import random + for i in range(3): + self._matrix_3x9.append([0 for x in range(9)]) + list_number = sorted(random.sample(range(self.vsego_bochenok+1),5)) + for inx,x in enumerate(sorted(random.sample(range(1,10),5))): + self._matrix_3x9[i][x-1] = list_number[inx] + def close_cell(self,listcell): + for cell in listcell: + self._matrix_3x9[cell[0]][cell[1]] = -1 + def get_List_closecell(self,current_bochenok): + Res = [] + for inx,row in enumerate(self._matrix_3x9): + try: + col = row.index(current_bochenok) + Res.append((inx,col)) + except Exception: + pass + return Res + def verify_end(self): + L = [] + for item in self._matrix_3x9: + L += [x for x in item if x > 0 ] + return len(L) == 0 + def draw(self): + prefix = '-' * int((24-len(self.name))/2) + sufix = "-" * (28 - len(self.name)-len(prefix) - 4) + print(prefix,self.name,sufix) + for i in range(3): + l = [str(x) for x in self._matrix_3x9[i]] + print((', '.join([x if len(x) != 1 else " "+x for x in l]).replace(',', '').replace(' 0', ' ').replace('-1', ' -'))) + print('-'*26) + #print(self._matrix_3x9[i]) + #print([len(x) for x in l]) + +class Kartochka_Computer(Kartochka): + def __init__(self,vsego_bochenok): + self.name = "Карточка компьютера" + super().__init__(self.name,vsego_bochenok) + +class Kartochka_Gamer(Kartochka): + def __init__(self,vsego_bochenok): + self.name = "Карточка игрока" + super().__init__(self.name,vsego_bochenok) + +class Game(): + def __init__(self): + self.Meshok_ = Meshok() + self.Kartochka_Computer_ = Kartochka_Computer(self.Meshok_.vsego_bochenok) + self.Kartochka_Gamer_ = Kartochka_Gamer(self.Meshok_.vsego_bochenok) + def output(self): + print('\n' * 80) + print("Новый бочонок: {0} (осталось {1})".format(self.Meshok_.current_bochenok, self.Meshok_.get_ostalos())) + self.Kartochka_Computer_.draw() + self.Kartochka_Gamer_.draw() + def input_gamer(self): + while True: + request = input("Зачеркнуть цифру? (y/n)\n>>") + if request in ["y","Y"]: + break + elif request in ["n","N"]: + return "Skip" + self.output() + while True: + try: + resp_str = input("Введите номера позиций на карточке в формате (i1,j1), (i2,j2), ... - где i1-номер строки, " + "j1 - номер столбца в карточке. Номера начинаются с 1 \n>>") + #Преобразуем введенную строку в список кортежей, где кортеж - координаты поля + s = resp_str[1:][:-1].split("),(") + resp = [tuple([int(y)-1 for y in x.split(",")]) for x in s] + return resp + except Exception as e: + print("Ошибка ввода, для продолжения нажмите Enter.\n",e) + input() + self.output() + + + def verify_end(self): + res_comp = self.Kartochka_Computer_.verify_end() + res_gamer = self.Kartochka_Gamer_.verify_end() + if res_comp and res_gamer: + print("У вас ничья. Игра окончена") + exit() + elif res_comp: + print("Вы проиграли, ваш аппонент закрыл карточку нраньше вас") + exit() + elif res_gamer: + print("Поздравляем, вы победили") + exit() + + def run(self): + while True: + self.verify_end() + self.Meshok_.get_bochenok() + list_closecell_computer = self.Kartochka_Computer_.get_List_closecell(self.Meshok_.current_bochenok) + self.Kartochka_Computer_.close_cell(list_closecell_computer) + self.output() + list_closecell_gamer = self.input_gamer() + true_list_closecell_gamer = self.Kartochka_Gamer_.get_List_closecell(self.Meshok_.current_bochenok) + if list_closecell_gamer == "Skip": + #если пользователь пропустил ход, то проверяем что правильных ответов действительно нет + if len(true_list_closecell_gamer) == 0: + continue + else: + self.output() + print("К сожлению вы произрали. Правильный ответ:\n",true_list_closecell_gamer) + exit() + else: + #если пользователь ввел ячейки, то проверяем, что его ответ правильный + if sorted(true_list_closecell_gamer) == sorted(list_closecell_gamer): + self.Kartochka_Gamer_.close_cell(list_closecell_gamer) + else: + self.output() + if len(true_list_closecell_gamer) == 0: + print("К сожлению вы произрали. Такого номера боченка не было на вашей карточке") + else: + print("К сожлению вы произрали. Правильный ответ:\n",[(item[0]+1,item[1]+1) for item in true_list_closecell_gamer]) + exit() + + #input("Введите Enter чтобы продолжить") + + +Game_ = Game() +Game_.run() + +