diff --git a/lesson01/home_work/hw01_easy.py b/lesson01/home_work/hw01_easy.py index 4592ef2af..26ac0d6a4 100644 --- a/lesson01/home_work/hw01_easy.py +++ b/lesson01/home_work/hw01_easy.py @@ -1,11 +1,43 @@ -# Задача-1: Дано произвольное целое число, вывести поочередно цифры исходного числа +__author__ = 'Алишаев Имам Курбанмагомедович' + +# Задача-1: Дано произвольное целое число (число заранее неизвестно). +# Вывести поочередно цифры исходного числа (порядок вывода цифр неважен). +# Подсказки: +# * постарайтесь решить задачу с применением арифметики и цикла while; +# * при желании решите задачу с применением цикла for. # код пишем тут... +arbitrary_number = 58375 +for char in str(arbitrary_number): + print(char) # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. -# Не нужно решать задачу так: print("a = ", b, "b = ", a) - это неправильное решение! +# Подсказка: +# * постарайтесь сделать решение через дополнительную переменную +# или через арифметические действия +# Не нужно решать задачу так: +# print("a = ", b, "b = ", a) - это неправильное решение! + +var1 = str(input('Введите первую переменную: ')) +var2 = str(input('Введите вторую переменную: ')) + +var1, var2 = var2, var1 + +print(var1) +print(var2) -# Задача-3: Запросите у пользователя его возраст. Если ему есть 18 лет, выведите: "Доступ разрешен", +# Задача-3: Запросите у пользователя его возраст. +# Если ему есть 18 лет, выведите: "Доступ разрешен", # иначе "Извините, пользование данным ресурсом только с 18 лет" +try: + age = int(input('Введите свой возраст: ')) + if age < 0: + print('Вы ввели число меньше 0!') + elif age >= 18: + print('Доступ разрешён!') + else: + print('Извините, пользование данным ресурсом разрешено только с 18 лет!') +except: + print('Вы ввели не число!') \ No newline at end of file diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index d4d9fa7aa..d8a6814f0 100644 --- a/lesson01/home_work/hw01_hard.py +++ b/lesson01/home_work/hw01_hard.py @@ -1,3 +1,6 @@ + +__author__ = 'Алишаев Имам Курбанмагомедович' + # Задание-1: # Ваня набрал несколько операций в интерпретаторе и получал результаты: # Код: a == a**2 @@ -6,4 +9,9 @@ # Результат: True # Код: a > 999999 # Результат: True -# Вопрос: Чему была равна переменная a, если точно известно, что её значение не изменялось? + +# Вопрос: Чему была равна переменная a, +# если точно известно, что её значение не изменялось? + +# Подсказка: это значение точно есть ;) +a = float('inf') \ No newline at end of file diff --git a/lesson01/home_work/hw01_normal.py b/lesson01/home_work/hw01_normal.py index 8c6435811..f76a35360 100644 --- a/lesson01/home_work/hw01_normal.py +++ b/lesson01/home_work/hw01_normal.py @@ -1,16 +1,56 @@ -__author__ = '' + +__author__ = 'Алишаев Имам Курбанмагомедович' # Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. -# Например, дается x = 58375. Нужно вывести максимальную цифру в данном числе, т.е. 8. -# Подразумевается, что мы не знаем это число заранее. Число приходит в виде целого беззнакового. +# Например, дается x = 58375. +# Нужно вывести максимальную цифру в данном числе, т.е. 8. +# Подразумевается, что мы не знаем это число заранее. +# Число приходит в виде целого беззнакового. +# Подсказки: +# * постарайтесь решить задачу с применением арифметики и цикла while; +# * при желании и понимании решите задачу с применением цикла for. + +arbitrary_number = 58375 +cher_max = 0 +for char in str(arbitrary_number): + if int(char) > int(cher_max): + cher_max = char +print(cher_max) # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. # Решите задачу, используя только две переменные. +# Подсказки: +# * постарайтесь сделать решение через действия над числами; +# * при желании и понимании воспользуйтесь синтаксисом кортежей Python. + +var1 = str(input('Введите первую переменную: ')) +var2 = str(input('Введите вторую переменную: ')) + +var1, var2 = var2, var1 +print(var1) +print(var2) -# Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида ax2 + bx + c = 0. -# Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math +# Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида +# ax² + bx + c = 0. +# Коэффициенты уравнения вводятся пользователем. +# Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math: # import math # math.sqrt(4) - вычисляет корень числа 4 +print('ax² + bx + c = 0') +a = int(input('Введите a:')) +b = int(input('Введите b:')) +c = int(input('Введите c:')) +D = (b ** 2) - (4 * a * c) +if D > 0: + x1 = ((-b) - (D ** 0.5)) / (2 * a) + x2 = ((-b) + (D ** 0.5)) / (2 * a) + print('X1 =', x1) + print('X2 =', x2) +elif D == 0: + x1 = (-b) / (2 * a) + print('Уравнение имеет один корень X = ', x1) +elif D < 0: + print('Уравнение не имеет корней') \ No newline at end of file diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index 370c370b2..c91ba60c8 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -1,5 +1,10 @@ +__author__ = 'Алишаев Имам Курбанмагомедович' + # Задача-1: -# Дан список фруктов. Напишите программу, выводящую фрукты в виде нумерованного списка, выровненного по правой стороне +# Дан список фруктов. +# Напишите программу, выводящую фрукты в виде нумерованного списка, +# выровненного по правой стороне. + # Пример: # Дано: ["яблоко", "банан", "киви", "арбуз"] # Вывод: @@ -8,11 +13,37 @@ # 3. киви # 4. арбуз -# Подсказка: использует метод .format() +# Подсказка: воспользоваться методом .format() + +fruits = ["яблоко", "банан", "киви", "арбуз"] +i = 1 +while i <= fruits.__len__(): + print('{}.{:>7}'.format(i, fruits[i-1])) + i += 1 + + + # Задача-2: -# Даны два произвольные списка. Удалите из первого списка элементы, присутствующие во втором списке. +# Даны два произвольные списка. +# Удалите из первого списка элементы, присутствующие во втором списке. +list1 = [1, 2, 3, 4, 4, 'test', 'test1', 'test2', 'test2'] +list2 = [3, 3, 4, 5, 6, 'test2', 'test3', 'test2'] +for itm_list2 in set(list2): + while list1.count(itm_list2): + list1.remove(itm_list2) +print(list1) + # Задача-3: -# Дан произвольный список из целых чисел. Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: +# Дан произвольный список из целых чисел. +# Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: # если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. +list_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +list_number_new = [] +for number in list_number: + if number % 2 == 0: + list_number_new.append(number / 4) + else: + list_number_new.append(number - 2) +print(list_number_new) \ No newline at end of file diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index d2421bc0a..09277d893 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -1,16 +1,25 @@ -# Задание-1: уравнение прямой вида y = kx + b задано ввиде строки. -# Определить координату y точки с заданной координатой x +__author__ = 'Алишаев Имам Курбанмагомедович' + +# Задание-1: уравнение прямой вида y = kx + b задано в виде строки. +# Определить координату y точки с заданной координатой x. equation = 'y = -12x + 11111140.2121' x = 2.5 # вычислите и выведите y -# Задание-2: Дата задана в виде строки формата 'dd.mm.yyyy'. Проверить, корректно ли введена дата. +parts = equation.split() +y = float(parts[2][0:3]) * x + float(parts[4]) +print(y) + +# Задание-2: Дата задана в виде строки формата 'dd.mm.yyyy'. +# Проверить, корректно ли введена дата. # Условия корректности: -# 1. День должен приводиться к целому числу в диапазоне от 1 до 30(31) (в зависимости от месяца, февраль не учитываем) +# 1. День должен приводиться к целому числу в диапазоне от 1 до 30(31) +# (в зависимости от месяца, февраль не учитываем) # 2. Месяц должен приводиться к целому числу в диапазоне от 1 до 12 # 3. Год должен приводиться к целому положительному числу в диапазоне от 1 до 9999 -# 4. Длина исходной строки для частей должна быть в соответствии с форматом (т.е. 2 - для дня, 2- месяц, 4 -год) +# 4. Длина исходной строки для частей должна быть в соответствии с форматом +# (т.е. 2 символа для дня, 2 - для месяца, 4 - для года) # Пример корректной даты date = '01.11.1985' @@ -19,12 +28,46 @@ date = '01.22.1001' date = '1.12.1001' date = '-2.10.3001' +date = '01.11.1985.3' + +_day_f = False +_month_f = False +_year_f = False +_month_31 = [1, 3, 5, 7, 8, 10, 12] + +_date = date.split('.') +_day = int(_date[0]) +_month = int(_date[1]) +_year = int(_date[2]) + +# Проверка месяца +if _month >= 1 and _month <= 12 and len(_date[1]) == 2: + _month_f = True + + # Проверка дня + if _day >= 1 and len(_date[0]) == 2: + if _month_31.count(_month) and _day <= 31: + _day_f = True + elif _day <= 30: + _day_f = True + +# Проверка года +if _year >= 1 and _year <= 9999 and len(_date[2]) == 4: + _year_f = True + +if len(_date) == 3 and _day_f * _month_f * _year_f: + print(date, '\tДата имеет правильный формат!') +else: + print(date, '\tДата имеет НЕ правильный формат!') + -# Задание-3: "Перевернутая башня" (Задача олимпиадного уровня) +# Задание-3: "Перевёрнутая башня" (Задача олимпиадного уровня) # -# Вавилонцы решили построить удивительную башню — расширяющуюся к верху и содержащую бесконечное число этажей и комнат. -# Она устроена следующим образом — на первом этаже одна комната, затем идет два этажа, -# на каждом из которых по две комнаты, затем идёт три этажа, на каждом из которых по три комнаты и так далее: +# Вавилонцы решили построить удивительную башню — +# расширяющуюся к верху и содержащую бесконечное число этажей и комнат. +# Она устроена следующим образом — на первом этаже одна комната, +# затем идет два этажа, на каждом из которых по две комнаты, +# затем идёт три этажа, на каждом из которых по три комнаты и так далее: # ... # 12 13 14 # 9 10 11 @@ -33,7 +76,8 @@ # 2 3 # 1 # -# Эту башню решили оборудовать лифтом --- и вот задача: нужно научиться по номеру комнаты определять, +# Эту башню решили оборудовать лифтом --- и вот задача: +# нужно научиться по номеру комнаты определять, # на каком этаже она находится и какая она по счету слева на этом этаже. # # Входные данные: В первой строчке задан номер комнаты N, 1 ≤ N ≤ 2 000 000 000. diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index e446ac144..7c527ba8d 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -1,17 +1,79 @@ +__author__ = 'Алишаев Имам Курбанмагомедович' + # Задача-1: -# Дан список, заполненный произвольными целыми числами, получите новый список, элементами которого будут -# квадратные корни элементов исходного списка, но только если результаты извлечения корня не имеют десятичной части и +# Дан список, заполненный произвольными целыми числами, получите новый список, +# элементами которого будут квадратные корни элементов исходного списка, +# но только если результаты извлечения корня не имеют десятичной части и # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] +import math +list_number = [2, -5, 8, 9, -25, 25, 4] +list_number_new = [] +for number in list_number: + if number >= 0: + _number = math.sqrt(number) + if _number.is_integer(): + list_number_new.append(int(_number)) +print(list_number_new) # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. # Склонением пренебречь (2000 года, 2010 года) -# Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами в диапазоне от -100 до 100 -# В списке должно быть n - элементов -# Подсказка: для получения случайного числа используйте функцию randint() модуля random +list_day = ['первое', 'второе', 'третье', 'четвёртое', 'пятое', 'шестое', 'седьмое', 'восьмое', 'девятое', 'десятое', + 'одиннадцатое', 'двенадцатое', 'тринадцатое', 'четырнадцатое', 'пятнадцатое', 'шестнадцатое', 'семнадцатое', 'восемнадцатое', + 'девятнадцатое', 'двадцатое'] +list_day2 = ['двадцать', 'тридцатое', 'тридцать'] +list_month = ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'] + +data_var = '02.11.2013' + +_day = int(data_var[0:2]) +_month = int(data_var[3:5]) +_year = int(data_var[6:]) +_day_str = '' +_month_str = '' + +# Дата +if _day <= 20: + _day_str = list_day[_day - 1] +elif _day <= 29: + _day_str = list_day2[0] + ' ' + list_day[_day - 21] +elif _day == 30: + _day_str = list_day2[1] +else: + _day_str = list_day2[2] + ' ' + list_day[0] + +# Месяц +_month_str = list_month[_month - 1] + +print(_day_str, _month_str, _year, 'года') + +# Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами +# в диапазоне от -100 до 100. В списке должно быть n - элементов. +# Подсказка: +# для получения случайного числа используйте функцию randint() модуля random +import random +list_random_numder = [] +i = 0 +while i <= 20: + list_random_numder.append(random.randint(-100, 100)) + i += 1 +print(list_random_numder) + +# Задача-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_random_numder_a = list(set(list_random_numder)) +print(list_random_numder_a) -# Задача-4: Дан список, заполненный произвольными целыми числами -# Получите новый список, элементами которого будут только уникальные элементы исходного -# Например, lst = [1,2,4,5,6,2,5,2], нужно получить lst2 = [1,4,6] +# б) решение +list_random_numder_b = [] +for itm_list in list_random_numder: + if list_random_numder.count(itm_list) == 1: + list_random_numder_b.append(itm_list) +print(list_random_numder_b) \ No newline at end of file diff --git a/lesson03/home_work/data/hours_of b/lesson03/home_work/data/hours_of index 7e3c12c36..227d52838 100644 --- a/lesson03/home_work/data/hours_of +++ b/lesson03/home_work/data/hours_of @@ -1,4 +1,4 @@ -Имя Фамилия Отработано часов +Имя Фамилия Отработано_часов Петр Алексеев 120 Матвей Бурин 160 Василий Сидоров 122 diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index 6027c08ef..142e5d989 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -1,3 +1,5 @@ +__author__ = 'Алишаев Имам Курбанмагомедович' + # Задание-1: # Напишите функцию, округляющую полученное произвольное десятичное число # до кол-ва знаков (кол-во знаков передается вторым аргументом) @@ -6,9 +8,17 @@ def my_round(number, ndigits): - pass + _result = 0 + _integer, _fractional = str(number).split('.') + if len(_fractional) >= ndigits and int(_fractional[ndigits]) > 5: + _result = float(_integer + '.' + _fractional[:ndigits]) + _result += (1 / (10 ** ndigits)) + else: + _result = float(_integer + '.' + _fractional[:ndigits]) + return _result + -my_round(2.1234567, 5) +print(my_round(2.1234567, 5)) # Задание-2: # Дан шестизначный номер билета. Определить, является ли билет счастливым. @@ -18,5 +28,19 @@ def my_round(number, ndigits): def lucky_ticket(ticket_number): - pass + _ticket_number = str(ticket_number) + _a = 0 + _b = 0 + if len(_ticket_number) != 6: + return False + for char_a in _ticket_number[:3]: + _a += int(char_a) + for char_b in _ticket_number[3:]: + _b += int(char_b) + if _a == _b: + return True + else: + return False + +print(lucky_ticket(976679)) \ No newline at end of file diff --git a/lesson03/home_work/hw03_hard.py b/lesson03/home_work/hw03_hard.py index 9bb864f4d..ce42eebde 100644 --- a/lesson03/home_work/hw03_hard.py +++ b/lesson03/home_work/hw03_hard.py @@ -16,6 +16,60 @@ # они получают удвоенную ЗП, пропорциональную норме. # Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" +def fileToDict(file): + # *********************************************************** + _dict = [] + _file = open('./data/' + file, 'r', encoding='UTF-8') + _file_key = [] + for _line in _file: + + # Заголовки массива file + if len(_file_key) == 0: + _file_key = _line.split() + continue + + # Значения массива file + i = 0 + _vars = _line.split() + _vars_str = {} + while i < len(_vars) and len(_vars) == len(_file_key): + _vars_str[_file_key[i]] = _vars[i] + i += 1 + _dict.append(_vars_str) + + _file.close() + return _dict + # *********************************************************** + +workers = fileToDict('workers') +hours_of = fileToDict('hours_of') + +for _hours_of in hours_of: + _name_h = _hours_of['Имя'] + _surname_h = _hours_of['Фамилия'] + _hours_worked = int(_hours_of['Отработано_часов']) + + for _workers in workers: + _name_w = _workers['Имя'] + _surname_w = _workers['Фамилия'] + _watch_rate = int(_workers['Норма_часов']) + _salary = int(_workers['Зарплата']) + if _workers.get('час_работы') == None: + _hour_of_work = _workers['час_работы'] = round(_salary / _watch_rate, 2) + + if _name_w == _name_h and _surname_w == _surname_h: + if _hours_worked < _watch_rate: + _hours_of['К_выплате'] = _hours_worked * _hour_of_work + elif _hours_worked == _watch_rate: + _hours_of['К_выплате'] = _salary + else: + _pererabotka = _hours_worked - _watch_rate + _hours_of['К_выплате'] = _salary + ((2 * _pererabotka) * _hour_of_work) + +for itm in hours_of: + print(itm) + + # Задание-3: # Дан файл ("data/fruits") со списком фруктов. # Записать в новые файлы все фрукты, начинающиеся с определенной буквы. diff --git a/lesson03/home_work/hw03_normal.py b/lesson03/home_work/hw03_normal.py index 38ac1fcc1..116a05680 100644 --- a/lesson03/home_work/hw03_normal.py +++ b/lesson03/home_work/hw03_normal.py @@ -3,7 +3,33 @@ # Первыми элементами ряда считать цифры 1 1 def fibonacci(n, m): - pass + golden_ratio = (1 + (5 ** (1 / 2))) / 2 + fn = [] + n = int(n) + m = int(m) + + # Не совсем понял что имелось в виду "Первыми элементами ряда считать цифры 1 1" + # ************************************************************************** + # Возможно это: +# if n > 1 and n < 3: +# fn.append(1) +# elif n > 2: +# fn.append(1) +# fn.append(1) + + # Или это: + if n > 1: + n = 1 + # ************************************************************************** + + while n <= m: + if n > 0: + fn.append(int(( (golden_ratio ** n) - (- golden_ratio) ** (- n) ) / ( (2 * golden_ratio) - 1 ))) + n += 1 + + print(fn) + +fibonacci(5, 20) # Задача-2: # Напишите функцию, сортирующую принимаемый список по возрастанию. @@ -12,13 +38,33 @@ def fibonacci(n, m): def sort_to_max(origin_list): - pass + b = True + while b: + b = False + i = 0 + while i < len(origin_list) - 1: + if origin_list[i] > origin_list[i + 1]: + origin_list[i], origin_list[i + 1] = origin_list[i + 1], origin_list[i] + b = True + i += 1 + return origin_list + -sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) +print(sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0])) # Задача-3: # Напишите собственную реализацию стандартной функции filter. # Разумеется, внутри нельзя использовать саму функцию filter. +def my_filter(func,iterable): + result = [] + i = 0 + while i < len(iterable): + if func(iterable[i]): + result.append(iterable[i]) + i += 1 + return result + +print(my_filter(lambda x: type(x) == int, [45, 22, -6, 'asfd', 0, 'dfs', ''])) # Задача-4: diff --git a/lesson04/home_work/hw04_easy.py b/lesson04/home_work/hw04_easy.py index 85035ea8b..31bec0341 100644 --- a/lesson04/home_work/hw04_easy.py +++ b/lesson04/home_work/hw04_easy.py @@ -5,10 +5,16 @@ # Получить новый список, элементы которого будут # квадратами элементов исходного списка # [1, 2, 4, 0] --> [1, 4, 16, 0] +a1 = [-3, 1, 2, 4, 0] +b1 = [i**2 for i in a1] # Задание-2: # Даны два списка фруктов. # Получить список фруктов, присутствующих в обоих исходных списках. +a2 = ["яблоко", "банан", "киви", "арбуз", "груша"] +b2 = ["дыня", "яблоко", "банан", "персик", "киви", "арбуз"] + +c2 = [i for i in a2 if b2.count(i)] # Задание-3: # Дан список, заполненный произвольными числами. @@ -16,3 +22,5 @@ # + Элемент кратен 3 # + Элемент положительный # + Элемент не кратен 4 + +a3 = [i for i in range(-50, 50) if (i % 3) == 0 and (i % 4) != 0 and i > 0] \ No newline at end of file diff --git a/lesson04/home_work/hw04_hard.py b/lesson04/home_work/hw04_hard.py index 3b12dc315..f6bd64f7b 100644 --- a/lesson04/home_work/hw04_hard.py +++ b/lesson04/home_work/hw04_hard.py @@ -40,6 +40,39 @@ 71636269561882670428252483600823257530420752963450""" +def my_sum(n): + result = 1 + while n: + result *= n % 10 + n //= 10 + return result + +number = number.replace('\n', '') + +index = 0 +number_max = 0 +number_index = 0 +for char in number: + index = number.index(char, index) + line = number[index:index+5] + + if len(line) != 5: + continue + + _sum = my_sum(int(line)) + + if _sum == 59049: + number_max = 59049 + number_index = index + break + + if _sum > number_max: + number_max = _sum + number_index = index + +print(number_index, number_max) + + # Задание-3 (Ферзи): # Известно, что на доске 8×8 можно расставить 8 ферзей так, чтобы они не били # друг друга. Вам дана расстановка 8 ферзей на доске. diff --git a/lesson04/home_work/hw04_normal.py b/lesson04/home_work/hw04_normal.py index f29293105..c828ac2bf 100644 --- a/lesson04/home_work/hw04_normal.py +++ b/lesson04/home_work/hw04_normal.py @@ -20,6 +20,30 @@ 'XiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQoiQ'\ 'zTYwZAiRwycdlHfyHNGmkNqSwXUrxGc' + +# Без re +result1 = [] +_line1 = '' +for char1 in line: + if not char1.isupper(): + _line1 += char1 + continue + if _line1: + result1.append(_line1) + _line1 = '' + +if _line1: + result1.append(_line1) + +print(result1) + +# С re +import re +result_re1 = re.findall(r'[a-z]+', line) + +print(result_re1) + + # Задание-2: # Вывести символы в верхнем регистре, слева от которых находятся # два символа в нижнем регистре, а справа два символа в верхнем регистре. @@ -31,14 +55,102 @@ line_2 = 'mtMmEZUOmcqWiryMQhhTxqKdSTKCYEJlEZCsGAMkgAYEOmHBSQsSUHKvSfbmxULaysm'\ 'NOGIPHpEMujalpPLNzRWXfwHQqwksrFeipEUlTLeclMwAoktKlfUBJHPsnawvjPhfgewV'\ 'fzKTUfSYtBydXaVIpxWjNKgXANvIoumesCSSvjEGRJosUfuhRRDUuTQwLlJJJDdkVjfSA'\ - 'HqnLxooisBDWuxIhyjJaXDYwdoVPnsllMngNlmkpYOlqXEFIxPqqqgAWdJsOvqppOfyIV'\'jXapzGOrfinzzsNMtBIOclwbfRzytmDgEFUzxvZGkdOaQYLVBfsGSAfJMchgBWAsGnBnW'\'etekUTVuPluKRMQsdelzBgLzuwiimqkFKpyQRzOUyHkXRkdyIEBvTjdByCfkVIAQaAbfC'\'vzQWrMMsYpLtdqRltXPqcSMXJIvlBzKoQnSwPFkapxGqnZCVFfKRLUIGBLOwhchWCdJbR'\ + 'HqnLxooisBDWuxIhyjJaXDYwdoVPnsllMngNlmkpYOlqXEFIxPqqqgAWdJsOvqppOfyIV'\ + 'jXapzGOrfinzzsNMtBIOclwbfRzytmDgEFUzxvZGkdOaQYLVBfsGSAfJMchgBWAsGnBnW'\ + 'etekUTVuPluKRMQsdelzBgLzuwiimqkFKpyQRzOUyHkXRkdyIEBvTjdByCfkVIAQaAbfC'\ + 'vzQWrMMsYpLtdqRltXPqcSMXJIvlBzKoQnSwPFkapxGqnZCVFfKRLUIGBLOwhchWCdJbR'\ 'uXbJrwTRNyAxDctszKjSnndaFkcBZmJZWjUeYMdevHhBJMBSShDqbjAuDGTTrSXZywYkm'\ - 'jCCEUZShGofaFpuespaZWLFNIsOqsIRLexWqTXsOaScgnsUKsJxiihwsCdBViEQBHQaOn'\'LfBtQQShTYHFqrvpVFiiEFMcIFTrTkIBpGUflwTvAzMUtmSQQZGHlmQKJndiAXbIzVkGS'\'euTSkyjIGsiWLALHUCsnQtiOtrbQOQunurZgHFiZjWtZCEXZCnZjLeMiFlxnPkqfJFbCf'\'KCuUJmGYJZPpRBFNLkqigxFkrRAppYRXeSCBxbGvqHmlsSZMWSVQyzenWoGxyGPvbnhWH'\'uXBqHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQN'\'JFaXiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQ'\ + 'jCCEUZShGofaFpuespaZWLFNIsOqsIRLexWqTXsOaScgnsUKsJxiihwsCdBViEQBHQaOn'\ + 'LfBtQQShTYHFqrvpVFiiEFMcIFTrTkIBpGUflwTvAzMUtmSQQZGHlmQKJndiAXbIzVkGS'\ + 'euTSkyjIGsiWLALHUCsnQtiOtrbQOQunurZgHFiZjWtZCEXZCnZjLeMiFlxnPkqfJFbCf'\ + 'KCuUJmGYJZPpRBFNLkqigxFkrRAppYRXeSCBxbGvqHmlsSZMWSVQyzenWoGxyGPvbnhWH'\ + 'uXBqHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQN'\ + 'JFaXiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQ'\ 'oiQzTYwZAiRwycdlHfyHNGmkNqSwXUrxGC' + +# Без re (знаю алгоритм сильно заточен под одну задачу, но зато написан быстро и работает) +result2 = [] +_line2 = '' +flag_s = False +i = 0 +while i < (len(line_2) - 4): + if flag_s \ + and line_2[i].isupper() \ + and line_2[i+1].isupper() \ + and line_2[i+2].isupper(): + _line2 += line_2[i] + i += 1 + continue + + if not flag_s \ + and not line_2[i].isupper() \ + and not line_2[i+1].isupper() \ + and line_2[i+2].isupper() \ + and line_2[i+3].isupper() \ + and line_2[i+4].isupper(): + _line2 += line_2[i+2] + flag_s = True + i += 3 + continue + + if _line2: + result2.append(_line2) + _line2 = '' + flag_s = False + i += 1 + + +if _line2: + result2.append(_line2) + +print(result2) + + +# С re +import re +result_re2 = re.findall(r'[a-z]{2}([A-Z]+)[A-Z]{2}', line_2) + +print(result_re2) + # Задание-3: # Напишите скрипт, заполняющий указанный файл (самостоятельно задайте имя файла) # произвольными целыми цифрами, в результате в файле должно быть # 2500-значное произвольное число. # Найдите и выведите самую длинную последовательность одинаковых цифр # в вышезаполненном файле. +import random + +file3 = open('./number', 'w', encoding='UTF-8') +for i in range(2500): + file3.write(str(random.randint(0, 9))) +file3.close() + + +def my_sum(n): + result = 0 + while n: + result += n % 10 + n //= 10 + return result + +file3 = open('./number', 'r', encoding='UTF-8') +number3 = int(file3.read()) +number_max3 = 0 +result3 = 0 +while number3: + _result3 = number3 % 100000 + + if _result3 == 99999: + result3 = _result3 + break + + _sum3 = my_sum(_result3) + if number_max3 < _sum3: + number_max3 = _sum3 + result3 = _result3 + + number3 //= 10 +file3.close() + +print(result3) \ No newline at end of file diff --git a/lesson04/home_work/number b/lesson04/home_work/number new file mode 100644 index 000000000..8e64cf2e9 --- /dev/null +++ b/lesson04/home_work/number @@ -0,0 +1 @@ +9316520140200389015273342531025911187557809257359693163923072153144808691296710281905998493727374192409120383688389573173684374394882950986577774255190794516928047851844714280798050384568194020946049683090257962673258223734915592916798387897898593180539192133850974279175830989706944188796415341367750824455533597729353783531276447921552469037468896704438236171829978523438240220097343903271742759833272822363832157643494880019953222651380619490645258733436036737471272461037414455524710182750465210874777354617969382031266413446271262522511292941078756324667203174793309684120830146642789006182674464851396411412561940547092426828368104529638439870746730901705625922030631946973575432841384734996327580397749689256452708191486818560477766885293203764388403258074250399146518870726927566004816995002086833153786843488997965223249107715855287296813425491283365274812320819398451562815930049266823624520161280330589259477800651022190600315227940724975414473025533473836413700131428186119154644421108601400251471116991043075010531673391521868206052020005225823832172608545198537987788816391749449454403584460049976557171120030337606024142313933802356769642506162853008223335841624204197618722595764223082106794126396444036617707606784836804501448959228093969591270024540497336395397012183810621449884148611732944413304668764860487179178897563010853235856752421283768715458780721234016634943582278372972255703513292980521268706956618686791373422042517173017216261612147782221461155851562008159672203736984450360971876153672297899655910207496694773976325338883721136008730797892632807782918722640882317052778106946025105640180408968154455086586595408224573311904500471299249948520271027989688112605217882526558854705547603511522643793224753656911522185186201597252573519499942450858581693078147656982632392009119020006612149882287035761425451701360340688612102521632266740165437816800159606903269788848947676018585176339987606969099215009094724566296913462298212694271985367839841948538516805317174443007408449495162402283534209803271493435314998156448673045520181666003636581803467858241772170409302766562625909063097358925073248712119203510880773777566340456802946785884250942925525654994934377499937805862932954417227489752464877122562099874434652173287538690455836064231094326286285858178281246651451354823126087478860134759403966622030811828273124943519604128280574311360699635526919262157025644331613040595477434901724212967024434224394280005652274796099585549046313019613255823240073249827955331197 \ No newline at end of file diff --git a/lesson05/home_work/hw05_easy.py b/lesson05/home_work/hw05_easy.py index 59252493d..9a43b36ef 100644 --- a/lesson05/home_work/hw05_easy.py +++ b/lesson05/home_work/hw05_easy.py @@ -2,8 +2,79 @@ # Напишите скрипт, создающий директории dir_1 - dir_9 в папке, из которой запущен данный скрипт. # И второй скрипт, удаляющий эти папки. +# Создание директории +def create_dir(_dir): + from os import makedirs + try: + makedirs(_dir) + except OSError as ex: + print(f'Невозможно создать {_dir} !!!') + else: + print(f'Успешно создано {_dir}!') + finally: + input('Press Enter to continue...\n') + +# Удаление директории +def remove_dir(_dir): + from os import rmdir + try: + rmdir(_dir) + except OSError: + print(f'Невозможно удалить "{_dir}" !!!') + else: + print(f'Успешно удалено "{_dir}"!') + finally: + input('Press Enter to continue...\n') + +# Проверка: +# ************************************************* +from sys import path +from os.path import join + +for i in range(1, 10): + dir_i = join(path[0], 'dir_' + str(i)) +# create_dir(dir_i) +# remove_dir(dir_i) +# ************************************************* + # Задача-2: # Напишите скрипт, отображающий папки текущей директории. +# Вывод всех директорий в указанной директории +def ls_dir(_path): + from os import listdir + from os.path import isdir + try: + for _dir in listdir(_path): + # Подозреваю что выводить нужно всё содержимое директории а не только директории +# if isdir(_dir): + print(_dir) + except OSError as ex: + print(ex) + +# Проверка: +# ************************************************* +from os import getcwd + +#ls_dir(getcwd()) +# ************************************************* + # Задача-3: # Напишите скрипт, создающий копию файла, из которого запущен данный скрипт. + +# Копирование файла +def cp_file(_file, _file_new): + from shutil import copyfile + try: + copyfile(_file, _file_new) + except OSError as ex: + print(ex) + +# Проверка: +# ************************************************* +from sys import argv +from os.path import dirname +from os.path import basename + +#cp_file(argv[0], join(dirname(argv[0]), basename(argv[0]) + '_new')) +# ************************************************* \ No newline at end of file diff --git a/lesson05/home_work/hw05_hard.py b/lesson05/home_work/hw05_hard.py index 5161f162b..593d333d0 100644 --- a/lesson05/home_work/hw05_hard.py +++ b/lesson05/home_work/hw05_hard.py @@ -12,3 +12,93 @@ # в которой был запущен скрипт. # 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("cp - создает копию указанного файла") + print("rm - удаляет указанный файл (запросить подтверждение операции)") + print("cd - меняет текущую директорию на указанную") + print("ls - отображение полного пути текущей директории") + print("ping - тестовый ключ") + + +def make_dir(dir_name): + 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): + # не успел! + pass + +def rm(remove): + try: + os.remove(remove) + except OSError: + print(f'Невозможно удалить "{remove}" !!!') + else: + print(f'Успешно удалено "{remove}"!') + +def cd(_dir): + try: + os.chdir(_dir) + except OSError: + print(f'Невозможно перейти в директорию "{_dir}" !!!\n') + else: + print(f'Успешно перешел в директорию "{_dir}"!\n') + finally: + input('Press Enter to continue...\n') + +def ls(): + print(os.getcwd()) + +do = { + "help": print_help, + "ping": ping, + "ls": ls +} + +do_2 = { + "mkdir": make_dir, + "cp": cp, + "rm": rm, + "cd": cd +} + +i = 1 +argv = sys.argv +while i < len(argv): + if do_2.get(argv[i]): + try: + do_2[argv[i]](argv[i + 1]) + i += 2 + except IndexError: + print(f'Необходимо указать аргумент для ключа {argv[i]} !!!\n') + print_help() + break + elif do.get(argv[i]): + do[argv[i]]() + i += 1 + else: + print("Задан неверный ключ") + print("Укажите ключ help для получения справки") + break \ No newline at end of file diff --git a/lesson05/home_work/hw05_normal.py b/lesson05/home_work/hw05_normal.py index 6c0d59d25..0ef0c788b 100644 --- a/lesson05/home_work/hw05_normal.py +++ b/lesson05/home_work/hw05_normal.py @@ -10,3 +10,58 @@ # Для решения данной задачи используйте алгоритмы из задания easy, # оформленные в виде соответствующих функций, и импортированные в данный файл из easy.py + +from os import getcwd +from os import chdir + +from lesson05.home_work.hw05_easy import ls_dir +from lesson05.home_work.hw05_easy import create_dir +from lesson05.home_work.hw05_easy import remove_dir + +def Menu_1(): + _dir = input('Введите имя директории: ') + try: + chdir(_dir) + except OSError: + print(f'Невозможно перейти в директорию "{_dir}" !!!\n') + else: + print(f'Успешно перешел в директорию "{_dir}"!\n') + finally: + input('Press Enter to continue...\n') + +def Menu_2(): + _dir = getcwd() + print(f'\nСодержимое директории "{_dir}":') + ls_dir(_dir) + input('Press Enter to continue...\n') + +def Menu_3(): + _dir = input('Введите имя директории: ') + remove_dir(_dir) + +def Menu_4(): + _dir = input('Введите имя директории: ') + create_dir(_dir) + +while True: + Menu = {1: 'Перейти в папку', + 2: 'Просмотреть содержимое текущей папки', + 3: 'Удалить папку', + 4: 'Создать папку'} + + for i, itm in Menu.items(): + print(f'{i}.\t{itm}') + + menu_n = input('\nВыберите действие: ') + menu_n = int(menu_n) if menu_n.isdigit() else 0 + + if menu_n == 1: + Menu_1() + elif menu_n == 2: + Menu_2() + elif menu_n == 3: + Menu_3() + elif menu_n == 4: + Menu_4() + else: + print('Выбрана не сушествуюшая комманда!') \ No newline at end of file diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index 547617f80..38481576d 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -1,8 +1,90 @@ # Задача-1: Написать класс для фигуры-треугольника, заданного координатами трех точек. # Определить методы, позволяющие вычислить: площадь, высоту и периметр фигуры. +class Triangle: + def __init__(self, A, B, C): + def side(X, Y): + return ((Y[0] - X[0])**2 + (Y[1] - X[1])**2)**0.5 + + self.A = A + self.B = B + self.C = C + + self.a = side(A, B) + self.b = side(B, C) + self.c = side(C, A) + + # Периметр + def perimeter(self): + return self.a + self.b + self.c + + # Площадь + def square(self): + __p = (self.perimeter()) * 0.5 + return (__p * (__p - self.a) * (__p - self.b) * (__p - self.c)) ** 0.5 + + # Высота + def height(self): + __ha = (2 * self.square()) / self.a + __hb = (2 * self.square()) / self.b + __hc = (2 * self.square()) / self.c + return __ha, __hb, __hc # Задача-2: Написать Класс "Равнобочная трапеция", заданной координатами 4-х точек. # Предусмотреть в классе методы: проверка, является ли фигура равнобочной трапецией; # вычисления: длины сторон, периметр, площадь. +class EqualTrapezoid: + def __init__(self, A, B, C, D): + def side(X, Y): + return ((Y[0] - X[0])**2 + (Y[1] - X[1])**2)**0.5 + + self.A = A + self.B = B + self.C = C + self.D = D + + self.a = side(A, B) + self.b = side(B, C) + self.c = side(C, D) + self.d = side(D, A) + + + # Периметр + def perimeter(self): + return self.a + self.b + self.c + self.d + + # Площадь + def square(self): + return ((self.b + self.d) / 2) * (((self.a ** 2) - (((((self.d - self.b) ** 2) + (self.a ** 2) - (self.c ** 2)) / (2 * (self.d - self.b))) ** 2)) ** 0.5) + + # Высота + def height(self): + return ((self.a ** 2) - (((((self.d - self.b) ** 2) + (self.a ** 2) - (self.c ** 2)) / (2 * (self.d - self.b))) ** 2)) ** 0.5 + + def check(self): + # Проверяем равенство сторон трапеции + if self.a != self.c: + return False + + # Проверяем равенство углов трапеции + # Не нащёл понятной формулы по вычислению углов + + return True + +# Проверка +if __name__ == '__main__': + test1 = Triangle([1, 1], [2, 2], [3, 1]) + + print(test1.A, test1.B, test1.C, test1.a, test1.b, test1.c) + print('Периметр\t= ', test1.perimeter()) + print('Площадь\t\t= ', test1.square()) + print('Высота\t\t= ', test1.height()) + + test2 = EqualTrapezoid([0, 0], [2, 2], [4, 2], [6, 0]) + + print(test2.A, test2.B, test2.C, test2.D, test2.a, test2.b, test2.c, test2.d) + print('Периметр\t= ', test2.perimeter()) + print('Площадь\t\t= ', test2.square()) + print('Высота\t\t= ', test2.height()) + print(test2.check()) \ No newline at end of file diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index e30db8c3e..29d35532a 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -15,7 +15,7 @@ -------------------------- 9 43 62 74 90 2 27 75 78 82 - 41 56 63 76 86 + 41 56 63 76 86 -------------------------- В игре 2 игрока: пользователь и компьютер. Каждому в начале выдается @@ -56,3 +56,72 @@ модуль random: http://docs.python.org/3/library/random.html """ + +from random import sample +from random import randint + +def ticket(): + t = sample(range(1, 91), 15) + l1 = t[:5]; l1.sort() + l2 = t[5:10]; l2.sort() + l3 = t[10:]; l3.sort() + + def _line(l): + while len(l) < 9: + l.insert(randint(0, len(l) - 1), ' ') + _line(l1); _line(l2); _line(l3) + + return [l1, l2, l3] + +def out(ticket, mes): + print('{:-^26}'.format(f' {mes} ')) + for line in ticket: + for n in line: + print('{0:>2}'.format(n), end=' ') + print() + print('{:-^26}\n'.format('-')) + +def cross_out(ticket, barrel): + _coincidence = False + for line in ticket: + if line.count(barrel): + _coincidence = True + line[line.index(barrel)] = '-' + return _coincidence + +def ticket_check(ticket): + c = 0 + for line in ticket: + c += line.count('-') + if c == 15: + return True + else: + return False + +kegs = sample(range(1, 91), 90) +player_ticket = ticket() +computer_ticket = ticket() + +for barrel in kegs: + out(player_ticket, ' Ваша карточка ') + out(computer_ticket, ' Карточка компьютера ') + + print(f'Выпал бочёнок: {barrel}') + + while True: + cross_out_n = input('Зачеркнуть цифру? (y/n): ') + if cross_out_n == 'y' or cross_out_n == 'n': + break + + + cross_out_f = cross_out(player_ticket, barrel) + cross_out(computer_ticket, barrel) + + if ticket_check(player_ticket): + print('Игра окончена, Вы выйграли!') + break + elif (ticket_check(computer_ticket) and not ticket_check(player_ticket))\ + or (cross_out_n == 'y' and not cross_out_f)\ + or (cross_out_n == 'n' and cross_out_f): + print('Игра окончена, Вы проиграли!') + break \ No newline at end of file diff --git a/lesson08/home_work/app.id b/lesson08/home_work/app.id index 1abf6bafa..ba40a8604 100644 --- a/lesson08/home_work/app.id +++ b/lesson08/home_work/app.id @@ -1 +1,2 @@ == тут будет ваш APPID для доступа к openweathermap.org == +key:d95e7755-0361-4e02-98d9-13bac6fcd2c7 \ No newline at end of file diff --git a/lesson08/home_work/openweather.py b/lesson08/home_work/openweather.py index 5b321286f..dcf00f4cc 100644 --- a/lesson08/home_work/openweather.py +++ b/lesson08/home_work/openweather.py @@ -1,6 +1,8 @@ """ OpenWeatherMap -OpenWeatherMap — онлайн-сервис, который предоставляет бесплатный API для доступа к данным о текущей погоде, прогнозам, для web-сервисов и мобильных приложений. Архивные данные доступны только на коммерческой основе. В качестве источника данных используются официальные метеорологические службы, данные из метеостанций аэропортов, и данные с частных метеостанций. +OpenWeatherMap — онлайн-сервис, который предоставляет бесплатный API для доступа к данным о текущей погоде, прогнозам, +для web-сервисов и мобильных приложений. Архивные данные доступны только на коммерческой основе. В качестве источника +данных используются официальные метеорологические службы, данные из метеостанций аэропортов, и данные с частных метеостанций. Необходимо решить следующие задачи: @@ -107,4 +109,40 @@ def gen_ns(tag): ... """ - +import requests + +def geocode(geocode): + session = requests.session() + session.params = { + 'apikey': '04bf1a11-02ec-4d24-8797-9f8efcdf1105', + 'geocode': geocode, + 'format': 'json' + } + _json = session.get('https://geocode-maps.yandex.ru/1.x/').json() + return _json['response']['GeoObjectCollection']['featureMember'][0]['GeoObject']['Point']['pos'] + +def weather(city): + lon, lat = geocode(city).split() + + session = requests.session() + session.params = { + 'lat': lat, + 'lon': lon, + 'lang': 'ru_RU', + 'extra': True + } + session.headers['X-Yandex-API-Key'] = 'd95e7755-0361-4e02-98d9-13bac6fcd2c7' + get = session.get('https://api.weather.yandex.ru/v1/forecast') + return get.json() + +for _geocode in 'Москва', 'Санкт-Питербург': + _weather = weather(_geocode) + for itm in _weather: + print(itm, _weather[itm]) + + +# for key, value in weather('Москва').items: +# print(key, value) +# +# for key, value in weather('Махачкала').items: +# print(key, value) \ No newline at end of file