diff --git a/lesson01/home_work/P.O.hw01_easy.py b/lesson01/home_work/P.O.hw01_easy.py new file mode 100644 index 000000000..8331064f6 --- /dev/null +++ b/lesson01/home_work/P.O.hw01_easy.py @@ -0,0 +1,54 @@ + +__author__ = 'Petr Okunev' + +# Задача-1: Дано произвольное целое число (число заранее неизвестно). +# Вывести поочередно цифры исходного числа (порядок вывода цифр неважен). +# Подсказки: +# * постарайтесь решить задачу с применением арифметики и цикла while; +# * при желании решите задачу с применением цикла for. + +# код пишем тут... +i = 1 +j = 1 +num = '' +while not num.isnumeric(): + num = input('enter integer number: ') + +num = int(num) + +if num != 0: + while num // i >= 1: + print('digit',j,':',((num) // i) % 10) + i *= 10 + j += 1 +else: + print('digit',j,':',num) + + +# Задача-2: Исходные значения двух переменных запросить у пользователя. +# Поменять значения переменных местами. Вывести новые значения на экран. +# Подсказка: +# * постарайтесь сделать решение через дополнительную переменную +# или через арифметические действия +# Не нужно решать задачу так: +# print("a = ", b, "b = ", a) - это неправильное решение! +a = input('enter a: ') +b = input('enter b: ') +c = a +a = b +b = c +print('now a:',a,' and b:',b) + +# Задача-3: Запросите у пользователя его возраст. +# Если ему есть 18 лет, выведите: "Доступ разрешен", +# иначе "Извините, пользование данным ресурсом только с 18 лет" +age = '' +while not age.isnumeric(): + age = input('Введите ваш возраст: ') + +age = int(age) + +if age >= 18: + print("Доступ разрешен") +else: + print("Извините, пользование данным ресурсом только с 18 лет") diff --git a/lesson01/home_work/P.O.hw01_hard.py b/lesson01/home_work/P.O.hw01_hard.py new file mode 100644 index 000000000..3a0bb6cec --- /dev/null +++ b/lesson01/home_work/P.O.hw01_hard.py @@ -0,0 +1,17 @@ + +__author__ = 'Petr Okunev' + +# Задание-1: +# Ваня набрал несколько операций в интерпретаторе и получал результаты: +# Код: a == a**2 +# Результат: True +# Код: a == a*2 +# Результат: True +# Код: a > 999999 +# Результат: True + +# Вопрос: Чему была равна переменная a, +# если точно известно, что её значение не изменялось? + +# Подсказка: это значение точно есть ;) +float('inf') diff --git a/lesson01/home_work/P.O.hw01_normal.py b/lesson01/home_work/P.O.hw01_normal.py new file mode 100644 index 000000000..e8515d052 --- /dev/null +++ b/lesson01/home_work/P.O.hw01_normal.py @@ -0,0 +1,68 @@ + +__author__ = 'Petr Okunev' + +# Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. +# Например, дается x = 58375. +# Нужно вывести максимальную цифру в данном числе, т.е. 8. +# Подразумевается, что мы не знаем это число заранее. +# Число приходит в виде целого беззнакового. +# Подсказки: +# * постарайтесь решить задачу с применением арифметики и цикла while; +# * при желании и понимании решите задачу с применением цикла for. +i = 1 +j = 1 +max = 0 +num = '' +while not num.isnumeric(): + num = input('enter integer number: ') + +num = int(num) + +if num != 0: + while num // i >= 1: + c = ((num) // i) % 10 + + if c > max: + max = c + + i *= 10 + j += 1 + print('max digit here:',max) +else: + print('max digit here:',num) + +# Задача-2: Исходные значения двух переменных запросить у пользователя. +# Поменять значения переменных местами. Вывести новые значения на экран. +# Решите задачу, используя только две переменные. +# Подсказки: +# * постарайтесь сделать решение через действия над числами; +# * при желании и понимании воспользуйтесь синтаксисом кортежей Python. +a = int(input('enter a: ')) +b = int(input('enter b: ')) +a = b - a +b = b - a +a = a + b +print('now a:',a,' and b:',b) + +# Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида +# ax² + bx + c = 0. +# Коэффициенты уравнения вводятся пользователем. +# Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math: +import math +# math.sqrt(4) - вычисляет корень числа 4 +print("Введите коэффициенты для квадратного уравнения (ax**2 + bx + c = 0):") +a = float(input("a = ")) +b = float(input("b = ")) +c = float(input("c = ")) + +D = b**2 - 4*a*c; +print("Дискриминант D = ", D) +if D > 0: + x1 = (-b + math.sqrt(D)) / (2 * a) + x2 = (-b - math.sqrt(D)) / (2 * a) + print("x1 = ", x1, ", x2 = ", x2) +elif D == 0: + x = -b / (2 * a) + print("x = ", x) +else: + print("Корней тут нет") diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index ed4447e50..d7f5ec208 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -12,14 +12,34 @@ # 4. арбуз # Подсказка: воспользоваться методом .format() - +fruits = ["груша", "яблоко", "слива", "банан", "киви", "дыня", "арбуз"] +i=1 +for fruit in fruits: + print('{0:d}.{1:>10}'.format(i, fruit)) + i+=1 # Задача-2: # Даны два произвольные списка. # Удалите из первого списка элементы, присутствующие во втором списке. - +lst1 = ['q','w','e','r','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'] +print('list before removing:', lst1) +lst2 = ['p','k','n','g','r','d','z'] +print('removing these items:', lst2) +for li in lst1: + if li in lst2: + lst1.remove(li) +print('list after removing:', lst1) # Задача-3: # Дан произвольный список из целых чисел. # Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: # если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. +numint1 = [48,939,23565,23,9948,26,80,13,800,23551,736] +numint2 = [] +for lnum in numint1: + if lnum % 2 == 0: + numint2.append(lnum / 4) + else: + numint2.append(lnum * 2) +print('first list:', numint1) +print('second list:', numint2) diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index c96843184..d7a7844b6 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -4,7 +4,16 @@ equation = 'y = -12x + 11111140.2121' x = 2.5 # вычислите и выведите y - +seq = equation.strip() +posx = seq.find('x') +startk = seq.rfind(' ',0,posx)+1 +k = float(seq[startk:posx]) +startb = seq.rfind(' ',posx)+1 +b = float(seq[startb:]) +y = k * x + b +print(equation) +print('x = ',x) +print('y = ',y) # Задание-2: Дата задана в виде строки формата 'dd.mm.yyyy'. # Проверить, корректно ли введена дата. @@ -17,13 +26,33 @@ # (т.е. 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' +date = input('Введите дату в виде строки формата "dd.mm.yyyy": ') +try: + dl = date.split('.') + if len(dl[0]) == 2 and len(dl[1]) == 2 and len(dl[2]) == 4: + if dl[0].isdigit() and dl[1].isdigit() and dl[2].isdigit(): + dd = int(dl[0]) + mm = int(dl[1]) + yyyy = int(dl[2]) + if 1 < yyyy <= 9999 and 1 < mm <= 12: + if (mm in (1, 3, 5, 7, 8, 10, 12) and 1 < dd <= 31) or (mm in (2, 4, 6, 9, 11) and 1 < dd <= 30): + print('Дата выглядит корректно!') + else: + print('Несоответствие чисел и месяцев!') + else: + print('Год меньше 1 или больше 9999!') + else: + print('Введенная дата содержит не только цифры!') + else: + print('Введенная дата не в виде строки формата "dd.mm.yyyy"!') +except: + print('Ошибка при вводе даты!') # Задание-3: "Перевёрнутая башня" (Задача олимпиадного уровня) # @@ -53,4 +82,4 @@ # Выход: 6 2 # # Вход: 11 -# Выход: 5 3 \ No newline at end of file +# Выход: 5 3 diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index 3acfaabb6..5135f9504 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -4,18 +4,39 @@ # но только если результаты извлечения корня не имеют десятичной части и # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] - +import math as mt +lst1 = [3, -7, 8, 16, 9, -25, 25, 4, 1, 23, 49, -4] +print('дано:', lst1) +lst2 = [] +for li in lst1: + if li >= 0 and mt.sqrt(li) - int(mt.sqrt(li)) == 0: + lst2.append(int(mt.sqrt(li))) +print('результат:', lst2) # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. # Склонением пренебречь (2000 года, 2010 года) - +days = {'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': 'тридцать первое'} +months = {'01': 'января', '02': 'февраля', '03': 'марта', '04':'апреля', '05': 'мая', '06': 'июня', '07': 'июля', '08': 'августа', '09': 'сентября', '10': 'октября', '11': 'ноября', '12': 'декабря'} +dt = input('Введите дату в формате dd.mm.yyyy, например: 02.11.2013: ') +sdt = dt.split('.') +dd = days.get(sdt[0]) +mm = months.get(sdt[1]) +yyyy = sdt[2] +print('Введено: {0} {1} {2} года'.format(dd, mm, yyyy)) # Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами # в диапазоне от -100 до 100. В списке должно быть n - элементов. # Подсказка: # для получения случайного числа используйте функцию randint() модуля random - +n = int(input('enter number of elements: ')) +import random as rnd +rlst = [] +i = 0 +while i < n: + rlst.append(rnd.randint(-100, 100)) + i += 1 +print('random list: ', rlst) # Задача-4: Дан список, заполненный произвольными целыми числами. # Получите новый список, элементами которого будут: @@ -23,3 +44,14 @@ # например, 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] +lst = [1, 2, 4, 5, 6, 2, 5, 2, 1, 8, 9, 3, 4] +print('список, заполненный произвольными целыми числами: ', lst) +lst2 = [] +lst3 = [] +for li in lst: + if li not in lst2: + lst2.append(li) + if lst.count(li) <= 1: + lst3.append(li) +print('неповторяющиеся элементы исходного списка:', lst2) +print('элементы исходного списка, которые не имеют повторений:', lst3) diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index 63d13f646..fdb25922b 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -4,8 +4,27 @@ # Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0). # Для решения задачи не используйте встроенные функции и функции из модуля math. -def my_round(number, ndigits): - pass +def my_round(number, nd): + lnum = str(number).split('.') + if len(lnum[1]) > nd: + dr = int(lnum[1][0:nd]) + ld = int(lnum[1][nd]) + if ld >= 5: + dr += 1 + snewdr = str(dr) + else: + snewdr = str(dr) + + if len(snewdr) > nd: + sdi = str(int(lnum[0]) + 1) + snewdr = snewdr[1:] + else: + sdi = str(int(lnum[0])) + + my_round = '{}.{}'.format(sdi, snewdr) + else: + my_round = str(number) + return my_round print(my_round(2.1234567, 5)) @@ -20,7 +39,22 @@ def my_round(number, ndigits): # !!!P.S.: функция не должна НИЧЕГО print'ить def lucky_ticket(ticket_number): - pass + ltn = str(ticket_number) + if len(ltn) == 6: + ls = 0 + rs = 0 + for li in ltn[0:3]: + ls = ls + int(li) + for li in ltn[3:6]: + rs = rs + int(li) + if ls == rs: + lucky_ticket = 'Lucky ticket! {} == {}'.format(ls, rs) + else: + lucky_ticket = 'Unlucky ticket! {} != {}'.format(ls, rs) + else: + lucky_ticket = 'Strange ticket! Not 6 digits!' + return lucky_ticket + print(lucky_ticket(123006)) diff --git a/lesson03/home_work/hw03_hard.py b/lesson03/home_work/hw03_hard.py index a8c7f668a..956cdc9ce 100644 --- a/lesson03/home_work/hw03_hard.py +++ b/lesson03/home_work/hw03_hard.py @@ -9,6 +9,93 @@ # Ввод: -2/3 - -2 # Вывод: 1 1/3 +fract_str = input('enter fraction operation "n x/y +- k m/s": ') +fr_lst = fract_str.split(' ') + +if fr_lst.count('+') == 1: + ops_indx = fr_lst.index('+') + ops = 'add' + +elif fr_lst.count('-') == 1: + ops_indx = fr_lst.index('-') + ops = 'subtract' + +leftfr_int = '0' +leftfr_up = '0' +leftfr_lo = '1' +rightfr_int = '0' +rightfr_up = '0' +rightfr_lo = '1' + +i = 0 + +while i < ops_indx: + if fr_lst[i].count('/') == 1: + leftfr_up = (fr_lst[i].split('/'))[0] + leftfr_lo = (fr_lst[i].split('/'))[1] + elif fr_lst[i].count('/') == 0: + leftfr_int = fr_lst[i] + i += 1 + +i = ops_indx + 1 + +while i < len(fr_lst): + if fr_lst[i].count('/') == 1: + rightfr_up = (fr_lst[i].split('/'))[0] + rightfr_lo = (fr_lst[i].split('/'))[1] + elif fr_lst[i].count('/') == 0: + rightfr_int = fr_lst[i] + i += 1 + + +intp = 0 +frup = 0 +frlo = 1 + +dleftfr_int = int(leftfr_int) +dleftfr_up = int(leftfr_up) +dleftfr_lo = int(leftfr_lo) +drightfr_int = int(rightfr_int) +drightfr_up = int(rightfr_up) +drightfr_lo = int(rightfr_lo) +if dleftfr_int <0: + dleftfr_up = -dleftfr_up +if drightfr_int <0: + drightfr_up = -drightfr_up + + +if ops == 'add': + intp = dleftfr_int + drightfr_int + frlo = dleftfr_lo * drightfr_lo + frup = dleftfr_up * drightfr_lo + drightfr_up * dleftfr_lo + intp2 = frup // frlo + frup2 = frup % frlo + intp = intp + intp2 + print(intp, frup2, frlo) + if frup2 != 0 or frlo != 1: + outfr = '{} {}/{}'.format(intp, frup2, frlo) + elif frup2 != 0 and frlo == 1: + intp = intp + frup + outfr = '{}'.format(intp) + elif frup2 == 0: + outfr = '{}'.format(intp) + +elif ops == 'subtract': + intp = dleftfr_int - drightfr_int + frlo = dleftfr_lo * drightfr_lo + frup = dleftfr_up * drightfr_lo - drightfr_up * dleftfr_lo + intp2 = frup // frlo + frup2 = frup % frlo + intp = intp + intp2 + if frup2 != 0 or frlo != 1: + outfr = '{} {}/{}'.format(intp, frup2, frlo) + elif frup2 != 0 and frlo == 1: + intp = intp + frup + outfr = '{}'.format(intp) + elif frup2 == 0: + outfr = '{}'.format(intp) + +print('Output: ',outfr) # Задание-2: # Дана ведомость расчета заработной платы (файл "data/workers"). diff --git a/lesson03/home_work/hw03_normal.py b/lesson03/home_work/hw03_normal.py index 38ac1fcc1..d2b90c157 100644 --- a/lesson03/home_work/hw03_normal.py +++ b/lesson03/home_work/hw03_normal.py @@ -3,7 +3,24 @@ # Первыми элементами ряда считать цифры 1 1 def fibonacci(n, m): - pass + a = 0 + b = 1 + if n < 2: + print('fib1: {}'.format(b), end=' ') + for i in range(2, m + 1): + c = a + b + a, b = b, c + if i >= n: + print('fib({}): {}'.format(i, c), end=' ') +try: + n = int(input('Enter n: ')) + m = int(input('Enter m: ')) + if n <= m: + fibonacci(n, m) + else: + print('n > m: not solved') +except: + print('data error') # Задача-2: # Напишите функцию, сортирующую принимаемый список по возрастанию. @@ -12,9 +29,15 @@ def fibonacci(n, m): def sort_to_max(origin_list): - pass + for i in range(len(origin_list)): + for j in range(len(origin_list) - 1, i, -1): + if origin_list[j] < origin_list[j-1]: + origin_list[j], origin_list[j-1] = origin_list[j-1], origin_list[j] -sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) + return origin_list + + +print(sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0])) # Задача-3: # Напишите собственную реализацию стандартной функции filter. @@ -24,4 +47,21 @@ def sort_to_max(origin_list): # Задача-4: # Даны четыре точки А1(х1, у1), А2(x2 ,у2), А3(x3 , у3), А4(х4, у4). # Определить, будут ли они вершинами параллелограмма. +def is_parallelogramm(x1,y1,x2,y2,x3,y3,x4,y4): + if (x2-x1 == x3-x4) and (y1-y4 == y2-y3): + print("It's parallelogramm!") + else: + print("It's not a parallelogramm!") +try: + x1 = int(input('enter A1(x1):')) + y1 = int(input('enter A1(y1):')) + x2 = int(input('enter A2(x2):')) + y2 = int(input('enter A2(y2):')) + x3 = int(input('enter A3(x3):')) + y3 = int(input('enter A3(y3):')) + x4 = int(input('enter A4(x4):')) + y4 = int(input('enter A4(y4):')) +except ValueError: + print('input error!') +is_parallelogramm(x1,y1,x2,y2,x3,y3,x4,y4) diff --git a/lesson04/home_work/hw04_easy.py b/lesson04/home_work/hw04_easy.py index 85035ea8b..2cdc38427 100644 --- a/lesson04/home_work/hw04_easy.py +++ b/lesson04/home_work/hw04_easy.py @@ -5,10 +5,29 @@ # Получить новый список, элементы которого будут # квадратами элементов исходного списка # [1, 2, 4, 0] --> [1, 4, 16, 0] +import random +# Заполняем список произвольными целыми числами +lst_gr = [] +le = int(input('Enter list lenght le: ')) +lr = int(input('Enter list low range +-lr: ')) +hr = int(input('Enter list high range +-hr: ')) +lst_gr = [random.randint(lr, hr) for _ in range(le)] +print('lst_gr = ', lst_gr) +lst_p2 = [x**2 for x in lst_gr] +print('lst_p2 = ', lst_p2) # Задание-2: # Даны два списка фруктов. # Получить список фруктов, присутствующих в обоих исходных списках. +fruits1 = ['абрикос', 'апельсин', 'арбуз', 'банан', 'груша', 'дыня', 'лимон', 'манго', 'маракуйя', 'персик', 'слива', 'фейхоа', 'черешня'] +fruits2 = ['абрикос', 'авокадо', 'виноград', 'груша', 'дыня', 'лайм', 'манго', 'нектарин', 'слива', 'черешня'] + +fruits3 = list(set(fruits1) & set(fruits2)) +fruits3.sort() + +print('fruits1 = ', fruits1) +print('fruits2 = ', fruits2) +print('fruits3 = ', fruits3) # Задание-3: # Дан список, заполненный произвольными числами. @@ -16,3 +35,14 @@ # + Элемент кратен 3 # + Элемент положительный # + Элемент не кратен 4 +import random +# Заполняем список произвольными целыми числами +lst_gr = [] +le = int(input('Enter list lenght le: ')) +lr = int(input('Enter list low range +-lr: ')) +hr = int(input('Enter list high range +-hr: ')) + +lst_gr = [random.randint(lr, hr) for _ in range(le)] +print('lst_gr = ', lst_gr) +lst_valid = [x for x in lst_gr if x>0 and x%3==0 and x%4!=0] +print('lst_valid = ', lst_valid) diff --git a/lesson04/home_work/hw04_hard.py b/lesson04/home_work/hw04_hard.py index 3b12dc315..a241257e4 100644 --- a/lesson04/home_work/hw04_hard.py +++ b/lesson04/home_work/hw04_hard.py @@ -1,10 +1,11 @@ +# Petr Okunev # Задание-1: # Матрицы в питоне реализуются в виде вложенных списков: # Пример. Дано: matrix = [[1, 0, 8], [3, 4, 1], [0, 4, 2]] - + # Выполнить поворот (транспонирование) матрицы # Пример. Результат: # matrix_rotate = [[1, 3, 0], @@ -12,6 +13,9 @@ # [8, 1, 2]] # Суть сложности hard: Решите задачу в одну строку +tr_matrix = list(zip(*matrix)) +print (matrix) +print (tr_matrix) # Задание-2: # Найдите наибольшее произведение пяти последовательных цифр в 1000-значном числе. diff --git a/lesson04/home_work/hw04_normal.py b/lesson04/home_work/hw04_normal.py index 739dd33f8..bcb30820b 100644 --- a/lesson04/home_work/hw04_normal.py +++ b/lesson04/home_work/hw04_normal.py @@ -3,7 +3,7 @@ # 1 или более символов в верхнем регистре. # Т.е. из строки "mtMmEZUOmcq" нужно получить ['mt', 'm', 'mcq'] # Решить задачу двумя способами: с помощью re и без. - +import re line = 'mtMmEZUOmcqWiryMQhhTxqKdSTKCYEJlEZCsGAMkgAYEOmHBSQsSUHKvSfbmxULaysmNO'\ 'GIPHpEMujalpPLNzRWXfwHQqwksrFeipEUlTLeclMwAoktKlfUBJHPsnawvjPhfgewVzK'\ 'TUfSYtBydXaVIpxWjNKgXANvIoumesCSSvjEGRJosUfuhRRDUuTQwLlJJJDdkVjfSAHqn'\ @@ -19,7 +19,8 @@ 'qHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQNJFa'\ 'XiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQoiQ'\ 'zTYwZAiRwycdlHfyHNGmkNqSwXUrxGc' - +result = re.findall(r'[abcdefghijklmnopqrstuvwxyz]+', line) +print(result) # Задание-2: # Вывести символы в верхнем регистре, слева от которых находятся @@ -28,7 +29,7 @@ # "GAMkgAYEOmHBSQsSUHKvSfbmxULaysmNOGIPHpEMujalpPLNzRWXfwHQqwksrFeipEUlTLec" # нужно получить список строк: ['AY', 'NOGI', 'P'] # Решить задачу двумя способами: с помощью re и без. - +import re line_2 = 'mtMmEZUOmcqWiryMQhhTxqKdSTKCYEJlEZCsGAMkgAYEOmHBSQsSUHKvSfbmxULaysm'\ 'NOGIPHpEMujalpPLNzRWXfwHQqwksrFeipEUlTLeclMwAoktKlfUBJHPsnawvjPhfgewV'\ 'fzKTUfSYtBydXaVIpxWjNKgXANvIoumesCSSvjEGRJosUfuhRRDUuTQwLlJJJDdkVjfSA'\ @@ -44,6 +45,8 @@ 'uXBqHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQN'\ 'JFaXiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQ'\ 'oiQzTYwZAiRwycdlHfyHNGmkNqSwXUrxGC' +result = re.findall(r'[abcdefghijklmnopqrstuvwxyz]{2}([ABCDEFGHIJKLMNOPQRSTUVWXYZ]+)[ABCDEFGHIJKLMNOPQRSTUVWXYZ]{2}', line_2) +print(result) # Задание-3: # Напишите скрипт, заполняющий указанный файл (самостоятельно задайте имя файла) @@ -51,3 +54,36 @@ # 2500-значное произвольное число. # Найдите и выведите самую длинную последовательность одинаковых цифр # в вышезаполненном файле. +import random as rnd +import re + +longnum = '' +with open('longnum.txt', 'w') as f: + for x in range(2499): + longnum = '{0}{1}'.format(longnum, str(rnd.randint(0,9))) + print(longnum, file=f) +f.close() + +with open('longnum.txt', 'r') as f: + for line in f: + longnum = line.strip() +f.close() + +res = [] +res.append(re.findall(r'([0]+)', longnum)) +res.append(re.findall(r'([1]+)', longnum)) +res.append(re.findall(r'([2]+)', longnum)) +res.append(re.findall(r'([3]+)', longnum)) +res.append(re.findall(r'([4]+)', longnum)) +res.append(re.findall(r'([5]+)', longnum)) +res.append(re.findall(r'([6]+)', longnum)) +res.append(re.findall(r'([7]+)', longnum)) +res.append(re.findall(r'([8]+)', longnum)) +res.append(re.findall(r'([9]+)', longnum)) + +max = 0 +for i in range(len(res)): + for j in range(len(res[i])): + if max < int(len(res[i][j])): + max = int(len(res[i][j])) +print('max sequence of same digits = ',max) diff --git a/lesson05/home_work/hw05_easy.py b/lesson05/home_work/hw05_easy.py index c6317de2b..96aa53a45 100644 --- a/lesson05/home_work/hw05_easy.py +++ b/lesson05/home_work/hw05_easy.py @@ -2,9 +2,45 @@ # Напишите скрипт, создающий директории dir_1 - dir_9 в папке, # из которой запущен данный скрипт. # И второй скрипт, удаляющий эти папки. +# Petr O. +#script1 +import os +for i in range(9): + dir_i = 'dir_'+str(i+1) + dir_path = os.path.join(os.getcwd(), dir_i) + try: + os.mkdir(dir_path) + except FileExistsError: + print('Такая директория уже существует') + +#script2 +import os +for i in range(9): + dir_i = 'dir_'+str(i+1) + dir_path = os.path.join(os.getcwd(), dir_i) + try: + print('директория удаляется: ', dir_i) + os.rmdir(dir_path) #- удаляет пустую директорию. + except Exception: + print('Такая директория не удаляется') # Задача-2: # Напишите скрипт, отображающий папки текущей директории. +import os +dir_path = os.path.join(os.getcwd()) +dirlist = [filename for filename in os.listdir(dir_path) if os.path.isdir(os.path.join(dir_path,filename))] +print(dirlist) # Задача-3: # Напишите скрипт, создающий копию файла, из которого запущен данный скрипт. +import os +import shutil +dir_path = os.getcwd() +srcfile = os.path.realpath(__file__) +dir_name = 'my_fcopy' +destdir = dir_path + '\\' + dir_name +try: + os.makedirs(dir_name) +except Exception: + print('directory exists!') +shutil.copy(srcfile, destdir) diff --git a/lesson05/home_work/hw05_hard.py b/lesson05/home_work/hw05_hard.py index 7507e47b2..b4d9b6a46 100644 --- a/lesson05/home_work/hw05_hard.py +++ b/lesson05/home_work/hw05_hard.py @@ -13,3 +13,103 @@ # Исходной директорией считать ту, в которой был запущен скрипт. # P.S. По возможности, сделайте кросс-платформенную реализацию. +# Petr O. +# Данный скрипт можно запускать с параметрами: +# python with_args.py param1 param2 param3 +import os +import sys +import shutil + +def print_help(): + print("help - получение справки") + print("mkdir - создание директории") + print("ping - тестовый ключ") + print("cp - создает копию указанного файла") + print("rm - удаляет указанный файл") + print("cd - меняет текущую директорию на указанную") + print("ls - отображение полного пути текущей директории") + + +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") + +def cp_file(): +# cp - создает копию указанного файла + src = os.path.join(os.getcwd(), dir_name) + print(src) + try: + dst_dir = os.path.join(os.getcwd(), 'temp') + print(dst_dir) + shutil.copy2(src, dst_dir) + except Exception: + print('Ошибка при копировании!') + +def rm_file(): +# rm - удаляет указанный файл (запросить подтверждение операции) + print("Вы хотите удалить файл {}?".format(dir_name)) + yes_no = input("Наберите 'y'-да, 'n'-нет: ") + if yes_no == 'y': + try: + os.remove(dir_name) + except Exception: + print('Ошибка при удалении!') + +def ch_dir(): +# cd - меняет текущую директорию на указанную + if os.path.isabs(dir_name): + try: + os.chdir(dir_name) + print(dir_name) + except Exception: + print('Ошибка при переходе!') + else: + try: + os.chdir(os.path.join(os.getcwd(), dir_name)) + except Exception: + print('Ошибка при переходе!') + +def ls_dir(): +# ls - отображение полного пути текущей директории + print(os.path.abspath(os.getcwd())) + +do = { + "help": print_help, + "mkdir": make_dir, + "ping": ping, + "cp": cp_file, + "rm": rm_file, + "cd": ch_dir, + "ls": ls_dir + +} + +try: + dir_name = sys.argv[2] + print(dir_name) +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 для получения справки") diff --git a/lesson05/home_work/hw05_normal.py b/lesson05/home_work/hw05_normal.py index ead6bbc19..74c3582a5 100644 --- a/lesson05/home_work/hw05_normal.py +++ b/lesson05/home_work/hw05_normal.py @@ -13,3 +13,61 @@ # Для решения данной задачи используйте алгоритмы из задания easy, # оформленные в виде соответствующих функций, # и импортированные в данный файл из easy.py +# Petr O. +import os +choice = '0' +go_home = os.getcwd() +while choice in ['0','1','2','3','4']: + print('1. Перейти в папку') + print('2. Просмотреть содержимое текущей папки') + print('3. Удалить папку') + print('4. Создать папку') + choice = input('Введите номер пункта для выбора: ') + if choice == '1': + try: + go_dir = input('Введите имя папки в текущей директории ("." - в начало): ') + if go_dir == '.': + os.chdir(go_home) + else: + os.chdir(os.path.join(os.getcwd(), go_dir)) + except Exception: + print('Ошибка при переходе!') + elif choice == '2': + print('Содержимое текущей папки: ') + print(os.listdir(os.getcwd())) + elif choice == '3': + rm_dir = input('Введите имя папки в текущей директории: ') + try: + print('Директория удаляется: ', rm_dir) + os.rmdir(os.path.join(os.getcwd(), rm_dir)) #- удаляет пустую директорию. + except Exception: + print('Такая директория не удаляется!') + + elif choice == '4': + try: + mk_dir = input('Введите имя папки в текущей директории: ') + os.mkdir(os.path.join(os.getcwd(), mk_dir)) + except FileExistsError: + print('Эту директорию невозможно создать!') + else: + print('Действие не выбрано!') + break +exit(0) + +# os.chdir(path) #- смена текущей директории. +# os.getcwd() #- текущая рабочая директория. +# os.listdir(path=".") #- список файлов и директорий в папке. +# os.mkdir(path, mode=0o777, *, dir_fd=None) #- создаёт директорию. OSError, если директория существует. +# os.makedirs(path, mode=0o777, exist_ok=False) #- создаёт директорию, создавая при этом промежуточные директории. +# os.remove(path, *, dir_fd=None) #- удаляет путь к файлу. +# os.rmdir(path, *, dir_fd=None) #- удаляет пустую директорию. +# os.removedirs(path) #- удаляет директорию, затем пытается удалить родительские директории, и удаляет их рекурсивно, пока они пусты. +# try: +# os.mkdir(dir_path) +# except FileExistsError: +# print('Такая директория уже существует' +# try: +# print('директория удаляется: ', dir_i) +# os.rmdir(dir_path) #- удаляет пустую директорию. +# except Exception: +# print('Такая директория не удаляется') diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index fe5dc2b11..ae38818b3 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -1,5 +1,71 @@ # Задача-1: Написать класс для фигуры-треугольника, заданного координатами трех точек. # Определить методы, позволяющие вычислить: площадь, высоту и периметр фигуры. +# xc,yc +# C +# /|\ +# b/ | \a +# / h \ +# / | \ +# A____c____B +# xa,ya xb,yb +# +# h(c) = 2*S/c +# +import math + +class Triangle: + def __init__(self, xa, ya, xb, yb, xc, yc): + self.xa = xa + self.xb = xb + self.xc = xc + self.ya = ya + self.yb = yb + self.yc = yc + self.a = tr_side(self.xb, self.yb, self.xc, self.yc) + self.b = tr_side(self.xa, self.ya, self.xc, self.yc) + self.c = tr_side(self.xa, self.ya, self.xb, self.yb) + def __str__(self): + return str('---------------\n'+ + ' xc,yc \n'+ + ' C \n'+ + ' /|\ \n'+ + ' b/ | \\a \n'+ + ' / h \ \n'+ + ' / | \ \n'+ + ' A____c____B \n'+ + ' xa,ya xb,yb \n'+ + '--------------- \n') + + + def square(self): + S = tr_square(self.a, self.b, self.c) + print('S = :') + return S + def height(self): + print('height a, height b, height c: ', tr_height(self.a, self.b, self.c)) + + def perimeter(self): + perim = 2 * pperim(self.a, self.b, self.c) + print('Perimeter = :') + return perim + +def tr_side(x1 = 0, y1 = 0, x2 = 0, y2 = 0): + side = math.sqrt((x2-x1)**2 + (y2-y1)**2) + return side + +def pperim(a = 0, b = 0, c = 0): + return float((a + b + c) / 2) + +def tr_square(a = 0, b = 0, c = 0): + pp = pperim(a, b, c) + return math.sqrt(pp * (pp - a) * (pp - b) * (pp - c)) + +def tr_height(a = 0, b = 0, c = 0): + S = tr_square(a, b, c) + ha = float(2 * S / a) + hb = float(2 * S / b) + hc = float(2 * S / c) + return (ha, hb, hc) # Задача-2: Написать Класс "Равнобочная трапеция", заданной координатами 4-х точек. diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index da01d4c00..a69c7f278 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -57,3 +57,112 @@ модуль random: http://docs.python.org/3/library/random.html """ +class barrel: + #get barrels + def f(self): + lst = [x for x in range(1, self.amount + 1)] + random.shuffle(lst) + for i, y in enumerate(lst): + print('{:*^30}'.format('*')) + print('Вытащен бочонок: {} (осталось бочонков: {})'.format(y, self.amount - (i+1))) + #print(y) + yield y + + def __init__(self, amount): + self.amount = amount + self.gen = self.f() + + + +class Lotto: + #prepare cards + def __set_card(self): + num = set() + while len(num) < self.all_row * 5: + num.add(random.randint(1, 91)) + cards = list(num) + random.shuffle(cards) + + while len(cards) % self.all_row != 0: + cards.append('None') + self.all_row = int(len(cards) / self.all_row) + cards = [cards[i: i + self.all_row] for i in range(0,len(cards),self.all_row)] + + for i in range(len(cards)): + cards[i].sort() + self.card_user = cards[:3] + self.card_comp = cards[3:] + + + def __init__(self, amount_card): + row = 3 + self.all_row = row * amount_card + self.__set_card() + + + def get_card(self, card_player): + print('{:-^25}'.format(self.name)) + print('{0[0]:>2} {0[1]:<10} {0[2]:<5} {0[3]} {0[4]} '.format(card_player[0])) + print('{0[0]:>4} {0[1]:<6} {0[2]:<4} {0[3]:<4} {0[4]} '.format(card_player[1])) + print('{0[0]} {0[1]:<5} {0[2]:<5} {0[3]:<5} {0[4]} '.format(card_player[2])) + print('{:-^25}'.format( '-')) + + #Find number and winner + def search(self, card_player, num_barrel): + for i, n in enumerate(card_player): + if num_barrel in n: + card_player[i][n.index(num_barrel)] = '-' + self.score += 1 + if self.score == 15: + print('{} Победила!'.format(self.name)) + sys.exit(1) + return True + return False + + + + +class Player(Lotto): + + def __init__(self, name): + self.name = name + self.score = 0 + + + +def main(): + + game = Lotto(2) + brl = barrel(90) + player1 = Player('Ваша карточка') + player2 = Player('Карточка компьютера') + + while True: + num_barrel = next(brl.gen) + player1.get_card(game.card_user) + player2.get_card(game.card_comp) + + inp_user = input('Вычеркнуть цифру? (y/n)') + if inp_user == 'y': + if player1.search(game.card_user, num_barrel): + continue + else: + print('Конец игры') + sys.exit(1) + if inp_user == 'n': + if player1.search(game.card_user, num_barrel): + print('Конец игры') + sys.exit(1) + elif player2.search(game.card_comp, num_barrel): + continue + if inp_user != 'n' and inp_user != 'y': + print('Введите y or n') + #time.sleep(1) + continue + + + + + +if __name__ == '__main__': + main()