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/lesson05/home_work/hw05_easy.py b/lesson05/home_work/hw05_easy.py index c6317de2b..efb45bc71 100644 --- a/lesson05/home_work/hw05_easy.py +++ b/lesson05/home_work/hw05_easy.py @@ -3,8 +3,51 @@ # из которой запущен данный скрипт. # И второй скрипт, удаляющий эти папки. +# Создаем новую директорию +print("Задача-1") + +print("Создаем директории dir_1..dir_9") +import os +current_path = os.getcwd() +try: + for i in range(1,10): + FullNameDir = os.path.join(current_path, "dir_"+str(i)) + os.mkdir(FullNameDir) + print("Директории dir_1..dir_2 созданы") +except FileExistsError: + print('Директория {} уже существует'.format("dir_"+str(i))) + +print("Удаляем директории dir_1..dir_9") +import os +current_path = os.getcwd() +try: + for i in range(1,10): + FullNameDir = os.path.join(current_path, "dir_"+str(i)) + if os.path.isdir(FullNameDir): + os.rmdir(FullNameDir) + print("Директории dir_1..dir_2 удалены") +except : + print('Ошибка при удалении директории {}'.format("dir_"+str(i))) + +#exit() + + # Задача-2: # Напишите скрипт, отображающий папки текущей директории. +print("Задача-2") + +import os +print([item for item in os.listdir(os.getcwd()) if os.path.isdir(item)]) + # Задача-3: # Напишите скрипт, создающий копию файла, из которого запущен данный скрипт. + +import sys +import shutil +ScriptPath = sys.argv[0] +CopyScriptPath = ScriptPath+"_copy" +print(ScriptPath) +print(ScriptPath+"_copy") + +shutil.copy(ScriptPath, CopyScriptPath) \ No newline at end of file diff --git a/lesson05/home_work/hw05_hard.py b/lesson05/home_work/hw05_hard.py index 7507e47b2..a732d0e70 100644 --- a/lesson05/home_work/hw05_hard.py +++ b/lesson05/home_work/hw05_hard.py @@ -13,3 +13,117 @@ # Исходной директорией считать ту, в которой был запущен скрипт. # P.S. По возможности, сделайте кросс-платформенную реализацию. + + +# Данный скрипт можно запускать с параметрами: +# python with_args.py param1 param2 param3 + +import os +import sys +import shutil + +#print('sys.argv = ', sys.argv) + + +def print_help(): + print("help - получение справки") + print("mkdir - создание директории") + print("ping - тестовый ключ") + print("cp - создает копию указанного файла") + print("rm - удаляет указанный файл") + print("cd - меняет текущую директорию на указанную") + print("ls - отображение полного пути текущей директории") + + +def make_dir(): + if not Second_param: + print("Необходимо указать имя директории вторым параметром") + return + dir_path = os.path.join(os.getcwd(), Second_param) + try: + os.mkdir(dir_path) + print('директория {} создана'.format(Second_param)) + except Exception as err: + print(err) + + + +def ping(): + print("pong") + +def cp(): + 'создает копию указанного файла' + if not Second_param: + print("Необходимо указать имя файла вторым параметром") + return + try: + shutil.copy(os.path.join(os.getcwd(), Second_param), os.path.join(os.getcwd(), Second_param)+".Copy") + print("Файл успешно скопирован: {}".format(Second_param)) + except Exception as err: + print(err) + + +def rm(): + 'удаляет указанный файл' + if not Second_param: + print("Необходимо указать имя файла вторым параметром") + return + while True: + Res = input("Вы действительно хотите удалить файл {} (y/n)\n".format(Second_param)) + if Res in ["y", "Y"]: + break + if Res in ["n", "N"]: + exit() + try: + os.remove(os.path.join(os.getcwd(), Second_param)) + print("Успешное удаление файла: {}".format(Second_param)) + except Exception as err: + print(err) + +def cd(): + 'меняет текущую директорию на указанную' + if not Second_param: + print("Необходимо указать имя директории вторым параметром") + return + try: + os.chdir(os.path.join(os.getcwd(), Second_param)) + print("Текущая папка: {}".format(os.path.basename(os.getcwd()))) + except Exception as err: + print(err) + + +def ls(): + 'отображение полного пути текущей директории' + try: + print("Текущая папка:") + print(os.path.basename(os.getcwd())) + except Exception as err: + print(err) + +do = { + "help": print_help, + "mkdir": make_dir, + "ping": ping, + "cp": cp, + "rm": rm, + "cd": cd, + "ls": ls +} + +try: + Second_param = sys.argv[2] +except IndexError: + Second_param = None + +try: + key = sys.argv[1] +except IndexError: + key = None + + +if key: + if do.get(key): + do[key]() +else: + print("Задан неверный ключ") + print("Укажите ключ help для получения справки") diff --git a/lesson05/home_work/hw05_normal.py b/lesson05/home_work/hw05_normal.py index ead6bbc19..fff215b51 100644 --- a/lesson05/home_work/hw05_normal.py +++ b/lesson05/home_work/hw05_normal.py @@ -13,3 +13,53 @@ # Для решения данной задачи используйте алгоритмы из задания easy, # оформленные в виде соответствующих функций, # и импортированные в данный файл из easy.py + +import os +def action1(): + 'Перейти в папку' + InpStr = input("Введите название папки\n") + os.chdir(os.path.join(os.getcwd(), InpStr)) + print("Текущая папка: {}".format(os.path.basename(os.getcwd()))) + +def action2(): + 'Просмотреть содержимое текущей папки' + print("Cодержимое текущей папки:") + [print(item) for item in os.listdir(os.getcwd())] + +def action3(): + 'Удалить папку' + InpStr = input("Введите название папки\n") + try: + os.rmdir(os.path.join(os.getcwd(), InpStr)) + print("Успешное удаление папки: {}".format(InpStr)) + except FileExistsError: + print("Не найдена папка: {}".format(InpStr)) + + + +def action4(): + 'Создать папку' + InpStr = input("Введите название папки\n") + try: + os.mkdir(os.path.join(os.getcwd(), InpStr)) + print("Успешное создание папки: {}".format(InpStr)) + except: + print("Папка не создана: {}".format(InpStr)) + +Dict ={"1": action1, "2": action2, "3": action3, "4": action4} +InpStr = "" +while True: + os.system('cls') + InpStr = input("1. Перейти в папку\n2. Просмотреть содержимое текущей папки\n3. Удалить папку\n4. Создать папку\nq. Выход\n\nСделайте выбор:\n") + if InpStr == "q": + exit() + #print(dict) + if InpStr in Dict: + Dict[InpStr]() + else: + print("Неверный выбор\n") + input("\nНажмите Enter чтобы продолжить\n") + + + +