diff --git a/lesson01/home_work/hw01_easy.py b/lesson01/home_work/hw01_easy.py index f927b0b06..3a9feecd5 100644 --- a/lesson01/home_work/hw01_easy.py +++ b/lesson01/home_work/hw01_easy.py @@ -1,5 +1,6 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Афонин Сергей Сергеевич' + # Задача-1: Дано произвольное целое число (число заранее неизвестно). # Вывести поочередно цифры исходного числа (порядок вывода цифр неважен). @@ -7,8 +8,15 @@ # * постарайтесь решить задачу с применением арифметики и цикла while; # * при желании решите задачу с применением цикла for. -# код пишем тут... - +var_input = int(input('Введите число: ')) +i = 1 +if var_input == 0: + print(var_input) +elif var_input > 0: + while var_input>0: + i = var_input % 10 + print(i) + var_input = var_input // 10 # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. @@ -18,7 +26,19 @@ # Не нужно решать задачу так: # print("a = ", b, "b = ", a) - это неправильное решение! +var1 = input('Введите первое значение ') +var2 = input('Введите второе значение ') +var_temp = var1 +var1 = var2 +var2 = var_temp +print('Первое: ',var1,' Второе: ', var2) # Задача-3: Запросите у пользователя его возраст. # Если ему есть 18 лет, выведите: "Доступ разрешен", # иначе "Извините, пользование данным ресурсом только с 18 лет" + +var_age = input('Введите Ваш возраст: ') +if int(var_age)>=18: + print('Доступ разрешен') +else: + print('Извините, пользование данным ресурсом только с 18 лет') \ No newline at end of file diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index 7df268664..66761a803 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,9 @@ # если точно известно, что её значение не изменялось? # Подсказка: это значение точно есть ;) + +Приводим к квадратному уравнению 1*a**2 +(-2)*a + 0 = 0 +коэффициенты 1, -2, 0 +Подставляем в программу уровня нормал, получаем решение 0, 2 +Не соответствуют третьему условию, значит в числах не решается +Предполагаю что ответ бесконечность \ No newline at end of file diff --git a/lesson01/home_work/hw01_normal.py b/lesson01/home_work/hw01_normal.py index 991724e9a..204c054e0 100644 --- a/lesson01/home_work/hw01_normal.py +++ b/lesson01/home_work/hw01_normal.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Афонин Сергей Сергеевич' # Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. # Например, дается x = 58375. @@ -10,6 +10,18 @@ # * постарайтесь решить задачу с применением арифметики и цикла while; # * при желании и понимании решите задачу с применением цикла for. +var_input = int(input('Введите целое беззнаковое число: ')) +i = 0 +max = 0 +if var_input == 0: + max = var_input +elif var_input > 0: + while var_input > 0: + i = var_input % 10 + if i > max: + max = i + var_input = var_input // 10 +print(max) # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. @@ -18,6 +30,10 @@ # * постарайтесь сделать решение через действия над числами; # * при желании и понимании воспользуйтесь синтаксисом кортежей Python. +var_user1 = input('Первое значение: ') +var_user2 = input('Второе значение: ') +var_user1, var_user2 = var_user2, var_user1 +print ('Первое значение: ', var_user1, 'Второе значение: ', var_user2) # Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида # ax² + bx + c = 0. @@ -25,3 +41,20 @@ # Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math: # import math # math.sqrt(4) - вычисляет корень числа 4 +import math + +const_a = int(input('Введите а: ')) +const_b = int(input('Введите b: ')) +const_c = int(input('Введите c: ')) + + +var_d = const_b*const_b - 4*const_a*const_c +if var_d > 0: + x1 = (math.sqrt(var_d) - const_b) / (2*const_a) + x2 = (-const_b - math.sqrt(var_d)) / (2*const_a) + print (x1,' ',x2) +elif var_d ==0: + x1 = (-const_b) / 2*const_a + print(x1) +else: + print('Корней нет!') \ No newline at end of file diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index ed4447e50..caae014cf 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -1,3 +1,5 @@ +__author__ = 'Афонин Сергей Сергеевич' + # Задача-1: # Дан список фруктов. # Напишите программу, выводящую фрукты в виде нумерованного списка, @@ -12,14 +14,44 @@ # 4. арбуз # Подсказка: воспользоваться методом .format() - +max_num=0 +max_str=0 +fruits = ['банан','киви','грейпфрут1111111111111111111111','апельсин'] +for idx, item in enumerate(fruits): + if len(str(idx))> max_num: + max_num=len(str(idx)) + if len(item)> max_str: + max_str=len(item) +format_fruits = '' +for idx, item in enumerate(fruits): + format_fruits = format_fruits+ str(idx).ljust(max_num+1) + item.rjust(max_str+1) +'\n' +print('--- Задача 1 ---') +print(format_fruits) # Задача-2: # Даны два произвольные списка. # Удалите из первого списка элементы, присутствующие во втором списке. - +list1 = list('Произвольный список №1!') +list2 = list('Произволный список №2!') +ltemp = list1[:] +for i in list1: + if i in list2: + ltemp.remove(i) +list1 = ltemp +print('--- Задача 2 ---') +print(list1) # Задача-3: # Дан произвольный список из целых чисел. # Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: # если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. + +lnum1 = [1,2,3,4,5,6] +lnum2 = list() +for i in lnum1: + if i % 2 == 0: + lnum2.append(i / 4) + else: + lnum2.append(i * 2) +print('--- Задача 3 ---') +print(lnum2) \ No newline at end of file diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index c96843184..4eba462fa 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -1,3 +1,5 @@ +__author__ = 'Афонин Сергей Сергеевич' + # Задание-1: уравнение прямой вида y = kx + b задано в виде строки. # Определить координату y точки с заданной координатой x. @@ -5,6 +7,12 @@ x = 2.5 # вычислите и выведите y +list_equation = equation.split() +b = float(list_equation[4]) +k = float(list_equation[2][:-1]) +y = k*x+b +print('b: ',str(b),'k: ',str(k)) +print(str(y)) # Задание-2: Дата задана в виде строки формата 'dd.mm.yyyy'. # Проверить, корректно ли введена дата. @@ -17,12 +25,22 @@ # (т.е. 2 символа для дня, 2 - для месяца, 4 - для года) # Пример корректной даты -date = '01.11.1985' - +date = '-1.12.1985' +str = date.split('.') +print(str) +if len(str[0])!=2 or len(str[1])!=2 or len(str[2])!=4: + print('Неверный формат') +elif int(str[2]) <1 or int(str[2]) >9999: + print ('Неверный год') +elif str[1][0] !='0' and int(str[1]) < 1 or int(str[1]) >12: + print('Неверный месяц') +elif str[0][0] !='0' and int(str[0]) < 1 or int(str[0]) >31: + print('Неверный день') +else: print('Всё OK') # Примеры некорректных дат -date = '01.22.1001' -date = '1.12.1001' -date = '-2.10.3001' +# date = '01.22.1001' +# date = '1.12.1001' +# date = '-2.10.3001' # Задание-3: "Перевёрнутая башня" (Задача олимпиадного уровня) diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index 3acfaabb6..5691bb0ff 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -1,20 +1,45 @@ +__author__ = 'Афонин Сергей Сергеевич' + # Задача-1: # Дан список, заполненный произвольными целыми числами, получите новый список, # элементами которого будут квадратные корни элементов исходного списка, # но только если результаты извлечения корня не имеют десятичной части и # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] +import math + +lnum1 = [2, -5, 8, 9, -25, 25, 4, -1, -99999, 81] +lnum2 = list() +for i in lnum1: + if i > 0 and math.sqrt(i)*10 % 10 == 0: + lnum2.append(math.sqrt(i)) +print('--- Задача 1 ---') +print(lnum2) # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. # Склонением пренебречь (2000 года, 2010 года) - +date_dict = {'01': 'первое', '02': 'второе', '03': 'третье', '04': 'четвертое', '05': 'пятое', '06': 'шестое', '07': 'седьмое', '08': 'восьмое', '09': 'девятое', '10': 'десятое', '11': 'одиннадцатое', '12': 'двенадцатое', '13': 'тринадцатое', '14': 'четырнадцатое', '15': 'пятнадцатое', '16': 'шестнадцатое', '17': 'семнадцатое', '18': 'восемнадцатое', '19': 'девятнадцатое', '20': 'двадцатое', '21': 'двадцать первое', '22': 'двадцать второе', '23': 'двадцать третье', '24': 'двадцать четвертое', '25': 'двадцать пятое', '26': 'двадцать шестое', '27': 'двадцать седьмое', '28': 'двадцать восьмое', '29': 'двадцать девятое', '30': 'тридцатое', '31': 'тридцать первое'} +month_dict = {'01': 'января', '02': 'февраля', '03': 'марта', '04': 'апреля', '05': 'мая', '06': 'июня', '07': 'июля', '08': 'августа', '09': 'сентября', '10': 'октября', '11': 'ноября', '12': 'декабря'} +print('--- Задача 2 ---') +input_str = input('Введите дату в формате dd.mm.yyyy: ') +print('{} {} {} года'.format(date_dict[input_str[0:2]],month_dict[input_str[3:5]],input_str[6:10])) # Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами # в диапазоне от -100 до 100. В списке должно быть n - элементов. # Подсказка: # для получения случайного числа используйте функцию randint() модуля random +import random + +print('--- Задача 3 ---') +n = int(input('Введите n: ')) +i=0 +random_list=list() +while i4: + result = result +1 + return(result/(10**(ndigits))) - -print(my_round(2.1234567, 5)) +print(my_round(2.1234567, 0)) print(my_round(2.1999967, 5)) print(my_round(2.9999967, 5)) +print(my_round(0.9999917, 5)) +print(my_round(9999917111.000023321, 5)) # Задание-2: @@ -20,9 +25,42 @@ def my_round(number, ndigits): # !!!P.S.: функция не должна НИЧЕГО print'ить def lucky_ticket(ticket_number): - pass + def get_num_len(number): + ''' + :param number: входное число + :return: длина числа + ''' + res = 0 + while number > 0: + res += 1 + number = number // 10 + return res + + var_len = get_num_len(ticket_number) + if var_len%2==0: + first = ticket_number//10**(var_len/2) + second = ticket_number%10**(var_len/2) + else: + var_len_2 = round(var_len/2+0.4) + first = ticket_number//10**(var_len_2-1) + second = ticket_number%10**(var_len_2) + sum_first = 0 + sum_second = 0 + while first > 0: + i = first % 10 + sum_first = sum_first + i + first = first // 10 + while second > 0: + i = second % 10 + sum_second = sum_second + i + second = second // 10 + if sum_first == sum_second: + return True + else: return False print(lucky_ticket(123006)) print(lucky_ticket(12321)) print(lucky_ticket(436751)) +print(lucky_ticket(111222)) +print(lucky_ticket(1)) diff --git a/lesson03/home_work/hw03_hard.py b/lesson03/home_work/hw03_hard.py index a8c7f668a..b91f8090f 100644 --- a/lesson03/home_work/hw03_hard.py +++ b/lesson03/home_work/hw03_hard.py @@ -18,6 +18,39 @@ # они получают удвоенную ЗП, пропорциональную норме. # Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" +f_workers = open('data/workers','r',encoding='utf-8') +i=0 +workers_list=list() +for line in f_workers: + workers_list.append(line.split()) + i+=1 +f_workers.close() + +f_hours = open('data/hours_of','r',encoding='utf-8') +i=0 +hours_list=list() +for line in f_hours: + hours_list.append(line.split()) + i+=1 +f_hours.close() +workers_list.pop(0) +hours_list.pop(0) + +def get_salary(salary,hours,norma): + if hours==norma: + result=salary + elif hours>norma: + result=salary+(hours-norma)*2*(salary/hours) + elif hours [1, 4, 16, 0] +input_list = [1,100,10,0,1,65,44,33,60] +output_list = [item*item for item in input_list] +print(output_list) + + # Задание-2: # Даны два списка фруктов. # Получить список фруктов, присутствующих в обоих исходных списках. +fruits1 = ['ананас','банан','кокос','персик','яблоко','фейхоа'] +fruits2 = ['ананас','нектарин','кокос','персик','авокадо','фейхоа'] + +output_list = [item for item in fruits1 if item in fruits2] +print(output_list) + + # Задание-3: # Дан список, заполненный произвольными числами. # Получить список из элементов исходного, удовлетворяющих следующим условиям: # + Элемент кратен 3 # + Элемент положительный # + Элемент не кратен 4 + +input_list = [1,100,-10,0,-1,65,44,33,60] +output_list = [item for item in input_list if (item > 0 and item%3==0 and item%4!=0)] +print(output_list) diff --git a/lesson04/home_work/hw04_hard.py b/lesson04/home_work/hw04_hard.py index 3b12dc315..747f1b540 100644 --- a/lesson04/home_work/hw04_hard.py +++ b/lesson04/home_work/hw04_hard.py @@ -12,6 +12,9 @@ # [8, 1, 2]] # Суть сложности hard: Решите задачу в одну строку +matrix_rotate = list(zip(matrix[0], matrix[1], matrix[2])) +print (matrix_rotate) + # Задание-2: # Найдите наибольшее произведение пяти последовательных цифр в 1000-значном числе. @@ -38,6 +41,15 @@ 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450""" +max_i=0 +max_res=0 +string = str(number).replace('\n','') +for i, num in enumerate(string[:len(string)-4]): + res = int(string[i])*int(string[i+1])*int(string[i+2])*int(string[i+3])*int(string[i+4]) + if res>max_res: + max_res = res + max_i = i +print('Индекс:',str(max_i),'Произведение:',str(max_res)) # Задание-3 (Ферзи): @@ -47,3 +59,14 @@ # Программа получает на вход восемь пар чисел, # каждое число от 1 до 8 — координаты 8 ферзей. # Если ферзи не бьют друг друга, выведите слово NO, иначе выведите YES. +list_coordinates = [[1,8],[2,4],[3,1],[4,3],[5,6],[6,2],[7,7],[8,5]] +def is_fight(coordinates): + result='NO' + for index,item in enumerate(coordinates): + for index1,item1 in enumerate(coordinates): + if index!=index1: + if item[0]==item1[0] or item[1]==item1[1] or abs(item[0]-item1[0])==abs(item[1]-item1[1]): + result='YES' + return result + +print(is_fight(list_coordinates)) diff --git a/lesson04/home_work/hw04_normal.py b/lesson04/home_work/hw04_normal.py index 739dd33f8..75c1838a1 100644 --- a/lesson04/home_work/hw04_normal.py +++ b/lesson04/home_work/hw04_normal.py @@ -1,3 +1,5 @@ +import re,random + # Задание-1: # Вывести символы в нижнем регистре, которые находятся вокруг # 1 или более символов в верхнем регистре. @@ -19,6 +21,19 @@ 'qHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQNJFa'\ 'XiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQoiQ'\ 'zTYwZAiRwycdlHfyHNGmkNqSwXUrxGc' +found = re.findall(r'([a-z]+)', line) +print('Task1 using RE: ',found) + +temp_str = '' +temp_lst=list() +for chr in line: + if chr.upper()!=chr: + temp_str = temp_str+chr + else: + if temp_str!='': + temp_lst.append(temp_str) + temp_str='' +print('Task1 not using RE: ',temp_lst) # Задание-2: @@ -45,9 +60,34 @@ 'JFaXiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQ'\ 'oiQzTYwZAiRwycdlHfyHNGmkNqSwXUrxGC' +found = re.findall(r'[a-z]{2}([A-Z]+)[A-Z]{2}', line) +print('Task2 using RE: ',found) + +# temp_str = '' +# temp_lst=list() +# for index, item in enumerate(line_2): +# if temp_lst[i]!=temp_lst[i] and temp_lst[i+1]!=temp_lst[i+1] and temp_lst[i+2]==temp_lst[i+2] and temp_lst[i+2]==temp_lst[i+2] and temp_lst[i+3]==temp_lst[i+3] and temp_lst[i+4]==temp_lst[i+4]: +# temp_str = temp_str+chr +# else: +# if temp_str!='': +# temp_lst.append(temp_str) +# temp_str='' +# print('Task1 not using RE: ',temp_lst) + # Задание-3: # Напишите скрипт, заполняющий указанный файл (самостоятельно задайте имя файла) # произвольными целыми цифрами, в результате в файле должно быть # 2500-значное произвольное число. # Найдите и выведите самую длинную последовательность одинаковых цифр # в вышезаполненном файле. +f_file = open('data/numbers.txt', 'w') +for i in range(1, 2500): + f_file.write(str(random.randint(0,9))) +f_file.close() + +with open('data/numbers.txt', 'r') as f_file: + line = f_file.readlines() +print(line) +found = re.findall(r'[0-9]+/1', str(line)) +print('Task3 using RE: ',found) +print('Task3 НЕ ГОТОВО ') diff --git a/lesson05/home_work/hw05_easy.py b/lesson05/home_work/hw05_easy.py index c6317de2b..59fe1e4cd 100644 --- a/lesson05/home_work/hw05_easy.py +++ b/lesson05/home_work/hw05_easy.py @@ -2,9 +2,83 @@ # Напишите скрипт, создающий директории dir_1 - dir_9 в папке, # из которой запущен данный скрипт. # И второй скрипт, удаляющий эти папки. +import os + +def createdir(): + dir_path1 = os.path.join(os.getcwd(), 'dir_1') + dir_path9 = os.path.join(os.getcwd(), 'dir_9') + try: + os.mkdir(dir_path1) + os.mkdir(dir_path9) + result = os.listdir(path=os.getcwd()) + except FileExistsError: + result = 'Такая директория уже существует' + return result + +def rmdir(): + dir_path1 = os.path.join(os.getcwd(), 'dir_1') + dir_path9 = os.path.join(os.getcwd(), 'dir_9') + try: + os.rmdir(dir_path1) + os.rmdir(dir_path9) + result = os.listdir(path=os.getcwd()) + except FileNotFoundError: + result = 'Такая директория отсутствует' + return result + +print(createdir()) +print(rmdir()) # Задача-2: # Напишите скрипт, отображающий папки текущей директории. +def lsdir(): + result = '' + for item in os.listdir(path=os.getcwd()): + if os.path.isdir(os.path.join(os.getcwd(), item)): + result = result + item + '\n' + return result +print('-----список папок-------') +print(lsdir()) # Задача-3: # Напишите скрипт, создающий копию файла, из которого запущен данный скрипт. +import sys +print('----TASK3------') +from shutil import copyfile +copyfile(sys.argv[0], sys.argv[0]+'_copy') + +def lsfiles(): + result = '..\n' + for item in os.listdir(path=os.getcwd()): + if os.path.isdir(os.path.join(os.getcwd(), item)): + result = result + 'Directory '+item + '\n' + else: result = result + 'File '+item + '\n' + return result +print(lsfiles()) + +def rm_dir(dir_name): + dir_path = os.path.join(os.getcwd(), dir_name) + try: + os.rmdir(dir_path) + result = 'Успешно удалено' + except FileNotFoundError: + result = 'Невозможно удалить' + return result + +def create_dir(dir_name): + dir_path = os.path.join(os.getcwd(), dir_name) + try: + os.mkdir(dir_path) + result = 'Успешно создано' + except FileExistsError: + result = 'Невозможно создать' + return result + +def ch_dir(dir_name): + dir_path = os.path.join(os.getcwd(), dir_name) + try: + os.chdir(dir_path) + result = 'Успешно перешел' + except FileNotFoundError: + result = 'Невозможно перейти' + return result \ No newline at end of file diff --git a/lesson05/home_work/hw05_hard.py b/lesson05/home_work/hw05_hard.py index 7507e47b2..bb6b13762 100644 --- a/lesson05/home_work/hw05_hard.py +++ b/lesson05/home_work/hw05_hard.py @@ -13,3 +13,88 @@ # Исходной директорией считать ту, в которой был запущен скрипт. # P.S. По возможности, сделайте кросс-платформенную реализацию. + +# Данный скрипт можно запускать с параметрами: +# python with_args.py param1 param2 param3 +import os +import sys +print('sys.argv = ', sys.argv) + + +def print_help(): + print("help - получение справки") + print("mkdir - создание директории") + print("ping - тестовый ключ") + print("ls - отображение пути текущей директории") + print("cp - создает копию указанного файла") + print("rm - удаляет указанный файл (запросить подтверждение операции)") + print("cd - меняет текущую директорию на указанную") + +def rm(): + return None + +def cd(): + return None + +def ls(): + print(os.getcwd()) + +def cp(): + file_path = '' + from shutil import copyfile + if not file_name: + print("Необходимо указать имя файла вторым параметром") + return + file_path = os.path.join(os.getcwd(), file_name) + try: + copyfile(file_path, file_path + '_copy') + print('файл {} создан'.format(file_name)) + except FileExistsError: + print('файл {} уже существует'.format(file_name)) + +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, + "ls": ls, + "cp": cp, + "rm": rm, + "cd": cd +} + +try: + if sys.argv[1]=='mkdir': + dir_name = sys.argv[2] + elif sys.argv[1]=='cp': + file_name = sys.argv[2] +except IndexError: + dir_name = None + file_name = 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..e8c5c441b 100644 --- a/lesson05/home_work/hw05_normal.py +++ b/lesson05/home_work/hw05_normal.py @@ -13,3 +13,36 @@ # Для решения данной задачи используйте алгоритмы из задания easy, # оформленные в виде соответствующих функций, # и импортированные в данный файл из easy.py + +from hw05_easy import ch_dir,lsfiles,rm_dir,create_dir +def getdirname(): + return (input('Введите имя папки:')) + +def menu(): + return (input( + '1 ->Перейти в папку\n'\ + '2 ->Просмотреть содержимое текущей папки\n'\ + '3 ->Удалить папку\n'\ + '4 ->Создать папку\n' \ + '5 ->Выход\n' \ + )) + +def do_action(choice): + if choice=='1': + print(ch_dir(getdirname())) + do_action(menu()) + elif choice =='2': + print(lsfiles()) + do_action(menu()) + elif choice=='3': + print(rm_dir(getdirname())) + do_action(menu()) + elif choice=='4': + print(create_dir(getdirname())) + do_action(menu()) + elif choice == '5': + exit() + else: + exit() + +do_action(menu()) \ No newline at end of file diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index fe5dc2b11..c207c64b5 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -1,6 +1,16 @@ # Задача-1: Написать класс для фигуры-треугольника, заданного координатами трех точек. # Определить методы, позволяющие вычислить: площадь, высоту и периметр фигуры. +class Triangle: + def __init__(self, coordinates): + self.coordinates = coordinates + + def get_square(self): + return (self.coordinates[0][0]*(self.coordinates[1][1]-self.coordinates[2][1])+self.coordinates[1][0]*(self.coordinates[2][1]-self.coordinates[0][1])+self.coordinates[2][0]*(self.coordinates[0][1]-self.coordinates[1][1]))/2 + +var_triangle = Triangle([(1,2),(3,4),(5,6)]) +print('Координаты точек:'+ str(var_triangle.get_square)) + # Задача-2: Написать Класс "Равнобочная трапеция", заданной координатами 4-х точек. # Предусмотреть в классе методы: diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index 5ea6ad844..43c915689 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -57,3 +57,75 @@ модуль random: http://docs.python.org/3/library/random.html """ +import random +class Card: + def __init__(self, name): + ''' + :param name: Имя игрока + ''' + self.card = ([], [], []) + self.name = name + for i, item in enumerate(random.sample(range(1, 90), 16)): + if i > 0 and i <= 5: + self.card[0].append(item) + elif i > 5 and i <= 10: + self.card[1].append(item) + elif i > 10 and i <= 16: + self.card[2].append(item) + self.card = (sorted(self.card[0]), sorted(self.card[1]), sorted(self.card[2])) + + def __str__(self): + ''' + Перегружаем print карточки в красивом виде + :return: + ''' + return '\nКарточка игрока: '+str(self.name)+'\n-----------------------\n'+str(self.card[0])+'\n'+str(self.card[1])+'\n'+str(self.card[2])+'\n-----------------------' + + def num_exists(self,num,cross_out=True): + ''' + + :param num: Число для проверки + :param cross_out: Зачеркнуть ли если оно есть? + :return: Есть или нет число в карточке + ''' + result = False + i=0 + y=0 + while i < len(self.card): + while y < len(self.card[i]): + if str(num) == str(self.card[i][y]): + result = True + if cross_out==True: + self.card[i][y]='-' + y+=1 + y=0 + i+=1 + return result + + +#основной блок +card_human = Card('Сергей') +card_comp = Card('Computer') +n=90 #число бочонков +cross_out = None +for i, item in enumerate(random.sample(range(1, n+1), n)): + print ('Выпало число:',str(item),' Осталось:',n-i-1) + print(card_human) + print(card_comp) + + while cross_out not in ('Y','N'): + cross_out = input('Зачеркнуть цифру? (y/n):').upper() + + print (cross_out) + if cross_out=='Y': + if card_human.num_exists(item,True): + card_comp.num_exists(item,True) + else: + print ('Игра окончена, нет такого числа в карте') + exit() + elif cross_out=='N': + if card_human.num_exists(item, False): + print ('Игра окончена, в карте есть число',item) + exit() + else: + card_comp.num_exists(item, True) \ No newline at end of file