diff --git a/lesson01/home_work/hw01_easy.py b/lesson01/home_work/hw01_easy.py index 4592ef2af..13c6ec978 100644 --- a/lesson01/home_work/hw01_easy.py +++ b/lesson01/home_work/hw01_easy.py @@ -1,11 +1,58 @@ -# Задача-1: Дано произвольное целое число, вывести поочередно цифры исходного числа +__author__ = 'Кашин Леонид Михайлович' + +# Задача-1: Дано произвольное целое число (число заранее неизвестно). +# Вывести поочередно цифры исходного числа (порядок вывода цифр неважен). +# Подсказки: +# * постарайтесь решить задачу с применением арифметики и цикла while; +# * при желании решите задачу с применением цикла for. # код пишем тут... +# ''' +i = 0 +digit = input('Enter the last few (at least three) digit of your phone number - ') +# print(len(digit)) +while i < len(digit): + print(digit[i]) + i += 1 +# ''' + # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. -# Не нужно решать задачу так: print("a = ", b, "b = ", a) - это неправильное решение! +# Подсказка: +# * постарайтесь сделать решение через дополнительную переменную +# или через арифметические действия +# Не нужно решать задачу так: +# print("a = ", b, "b = ", a) - это неправильное решение! +# ''' +a = input('Input A = ') +b = input('Input B = ') + +print('A = ', a) +print('B = ', b) + +print('Follow my hands!') + +x = a +a = b +b = x -# Задача-3: Запросите у пользователя его возраст. Если ему есть 18 лет, выведите: "Доступ разрешен", +print('A = ', a) +print('B = ', b) +# ''' + +# Задача-3: Запросите у пользователя его возраст. +# Если ему есть 18 лет, выведите: "Доступ разрешен", # иначе "Извините, пользование данным ресурсом только с 18 лет" + +print('Attantion!!! Please enter your answer only by digit!') +user_age = int(input('How old are you? - ')) + +if user_age >= 18: + print('Access granted!') +else: + p = 18 - user_age + print('Son, please come back in ' + str(p) + 'years') + + diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index d4d9fa7aa..de13e0dc8 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,16 @@ # Результат: True # Код: a > 999999 # Результат: True -# Вопрос: Чему была равна переменная a, если точно известно, что её значение не изменялось? + +# Вопрос: Чему была равна переменная a, +# если точно известно, что её значение не изменялось? + +# Подсказка: это значение точно есть ;) + +import math + +a = math.inf +print(a == a**2) +print(a == a*2) +print(a > 999999) + diff --git a/lesson01/home_work/hw01_normal.py b/lesson01/home_work/hw01_normal.py index 8c6435811..0ee148405 100644 --- a/lesson01/home_work/hw01_normal.py +++ b/lesson01/home_work/hw01_normal.py @@ -1,16 +1,82 @@ -__author__ = '' + +__author__ = 'Кашин Леонид Михайлович' # Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. -# Например, дается x = 58375. Нужно вывести максимальную цифру в данном числе, т.е. 8. -# Подразумевается, что мы не знаем это число заранее. Число приходит в виде целого беззнакового. +# Например, дается x = 58375. +# Нужно вывести максимальную цифру в данном числе, т.е. 8. +# Подразумевается, что мы не знаем это число заранее. +# Число приходит в виде целого беззнакового. +# Подсказки: +# * постарайтесь решить задачу с применением арифметики и цикла while; +# * при желании и понимании решите задачу с применением цикла for. + +# ''' +i = 0 +x = 0 +digit = input('Enter the last few (at least three) digit of your phone number - ') +# print(len(digit)) +while i < len(digit): + if int(digit[i]) > x: + x = int(digit[i]) + # print(digit[i]) + i += 1 +print(x) +# ''' # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. # Решите задачу, используя только две переменные. +# Подсказки: +# * постарайтесь сделать решение через действия над числами; +# * при желании и понимании воспользуйтесь синтаксисом кортежей Python. +# ''' +a = input('Input A = ') +b = input('Input B = ') +print('A = ', a) +print('B = ', b) +print('Follow my hands!') +# version 1 +x = a +a = b +b = x +print('A = ', a) +print('B = ', b) +# version 2 +a, b = b, a +print('A = ', a) +print('B = ', b) +# version 3 +a = int(a) +b = int(b) +a = a + b +b = a - b +a = a - b +print('A = ', a) +print('B = ', b) +# ''' - -# Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида ax2 + bx + c = 0. -# Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math -# import math +# Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида +# ax² + bx + c = 0. +# Коэффициенты уравнения вводятся пользователем. +# Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math: +import math # math.sqrt(4) - вычисляет корень числа 4 + +# ''' +a = float(input('Input A = ')) +b = float(input('Input B = ')) +c = float(input('Enter C = ')) + +discrim = b ** 2 - 4 * a * c +# print(discrim) +if discrim > 0: + x1 = (-b + math.sqrt(discrim)) / (2 * a) + x2 = (-b - math.sqrt(discrim)) / (2 * a) + print("x1 = %.2f \nx2 = %.2f" % (x1, x2)) #этот синтаксис я подсмотрел, а где про это можно почитать? +elif discrim == 0: + x = -b / (2 * a) + print("x = %.2f" % x) +else: + print("There is no roots") +# ''' diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index 370c370b2..c77757d2d 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -1,5 +1,8 @@ # Задача-1: -# Дан список фруктов. Напишите программу, выводящую фрукты в виде нумерованного списка, выровненного по правой стороне +# Дан список фруктов. +# Напишите программу, выводящую фрукты в виде нумерованного списка, +# выровненного по правой стороне. + # Пример: # Дано: ["яблоко", "банан", "киви", "арбуз"] # Вывод: @@ -8,11 +11,45 @@ # 3. киви # 4. арбуз -# Подсказка: использует метод .format() +# Подсказка: воспользоваться методом .format() + +# ''' +supe = ["яблоко", "банан", "киви", "арбуз"] +for i, sup in enumerate(supe): + print(i+1,'{:>7}'.format(sup), sep=".") +print(" ", end='\n\n') +# ''' # Задача-2: -# Даны два произвольные списка. Удалите из первого списка элементы, присутствующие во втором списке. +# Даны два произвольные списка. +# Удалите из первого списка элементы, присутствующие во втором списке. + +# ''' +l1 = ["яблоко", "банан", "киви", "арбуз", 1, 2, 3, 4, [1, 2, 3], [4, 5, 6,]] +l2 = ["дыня", "банан", "груша", 5, 6, 7, 4, [7, 8, 9], [4, 5, 6,]] + +for i, l in enumerate(l1): + for n in l2: + if l == n: + l1.pop(i) + break +print(l1, end='\n\n\n') +# ''' # Задача-3: -# Дан произвольный список из целых чисел. Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: +# Дан произвольный список из целых чисел. +# Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: # если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. + +g = [1, 2, 3, 4, 5, 6, 7, 8, 9] +a = [] +for i in g: + if i % 2 > 0: + a.append(i * 2) + else: + a.append(i / 4) +for n, letter in zip(g, a): + print('{:>5} {:>10}'.format(n, letter)) + + + diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index d2421bc0a..f11065883 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -1,30 +1,57 @@ -# Задание-1: уравнение прямой вида y = kx + b задано ввиде строки. -# Определить координату y точки с заданной координатой x +# Задание-1: уравнение прямой вида y = kx + b задано в виде строки. +# Определить координату y точки с заданной координатой x. +''' equation = 'y = -12x + 11111140.2121' x = 2.5 # вычислите и выведите y +ravno = equation.find("=")+1 +iks = equation.find("x") +plu = equation.find("+")+1 +k = float(equation[ravno:iks]) +b = float(equation[plu:]) +y = k * x + b +print("К = ", k, "В = ", b, ", соответственно Y = ", y) +# ''' -# Задание-2: Дата задана в виде строки формата 'dd.mm.yyyy'. Проверить, корректно ли введена дата. +# Задание-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' - -# Примеры некорректных дат -date = '01.22.1001' -date = '1.12.1001' -date = '-2.10.3001' - -# Задание-3: "Перевернутая башня" (Задача олимпиадного уровня) +# date = '01.11.1985' +# +# # Примеры некорректных дат +# date = '01.22.1001' +# date = '1.12.1001' +# date = '-2.10.3001' +''' +while True: + user_data = input("Введите дату в формате dd.mm.yyyy, (например: 02.11.2013): ") + m31 = ['01', '03', '05', '07', '08', '10', '12'] + if len(user_data) != 10 or user_data[2] != '.' or user_data[5] != '.': + print("ошибка ввода") + elif int(user_data[0:2]) not in range(1, 32) or int(user_data[3:5]) not in range(1, 13) or int(user_data[6:10]) not in range(1, 2020): + print("такой даты не бывает") + elif int(user_data[0:2]) == 31 and int(user_data[3:5]) not in m31: + print("Wrong mounth") + else : + break +print(user_data, "Корректно!") +# ''' +# Задание-3: "Перевёрнутая башня" (Задача олимпиадного уровня) # -# Вавилонцы решили построить удивительную башню — расширяющуюся к верху и содержащую бесконечное число этажей и комнат. -# Она устроена следующим образом — на первом этаже одна комната, затем идет два этажа, -# на каждом из которых по две комнаты, затем идёт три этажа, на каждом из которых по три комнаты и так далее: +# Вавилонцы решили построить удивительную башню — +# расширяющуюся к верху и содержащую бесконечное число этажей и комнат. +# Она устроена следующим образом — на первом этаже одна комната, +# затем идет два этажа, на каждом из которых по две комнаты, +# затем идёт три этажа, на каждом из которых по три комнаты и так далее: # ... # 12 13 14 # 9 10 11 @@ -33,7 +60,8 @@ # 2 3 # 1 # -# Эту башню решили оборудовать лифтом --- и вот задача: нужно научиться по номеру комнаты определять, +# Эту башню решили оборудовать лифтом --- и вот задача: +# нужно научиться по номеру комнаты определять, # на каком этаже она находится и какая она по счету слева на этом этаже. # # Входные данные: В первой строчке задан номер комнаты N, 1 ≤ N ≤ 2 000 000 000. @@ -45,4 +73,39 @@ # Выход: 6 2 # # Вход: 11 -# Выход: 5 3 \ No newline at end of file +# Выход: 5 3 + +room = int(input('Please enter the room number: ')) +box = 0 +pos = 1 +etage = 1 + + +while (pos + (box * box)) <= room: #Идём по квадратам, ищем нужный + pos += (box * box) #pos хранит номер первой ячейки в текущем квадрате + etage += box #Счётчик столбцов прирастает на число этих столбцов в квадрате + box += 1 #Квадраты считаются по одному + print(box, (pos + (box * box)), (box * box)) + +onetage = 1 #Храним приращение номера столбца внутри текущего квадрата + +while (pos + (onetage * box)) <= room : + pos += onetage * box #pos хранит номер первой ячейки в текущем столбце + onetage += 1 #Увеличиваем приращение + print(onetage, (pos + (onetage * box)), (onetage * box)) + +etage += onetage - 1 #Регистрируем найденный столбец + +place = 1 #Храним приращение номера ячейки в текущем столбце +while (pos + place) <= room : + place += 1 + print(pos, (pos + place)) +pos += place - 1 + +#Вывод данных +print('\tEtage:\t%s\n\tPlace:\t%s' % (etage, place) ) +print('Position in the sequence: %s' % (pos)) + +# Решение нашел на GB https://geekbrains.ru/posts/babylon_task ) +# в целом понял, но не все понял с математической точки зрения - например почему на последенем этапе, когда мы ищем место, +# приращение начинается с 2 единиц, а не с одной... \ No newline at end of file diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index e446ac144..b180cdc9f 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -1,17 +1,79 @@ # Задача-1: -# Дан список, заполненный произвольными целыми числами, получите новый список, элементами которого будут -# квадратные корни элементов исходного списка, но только если результаты извлечения корня не имеют десятичной части и +# Дан список, заполненный произвольными целыми числами, получите новый список, +# элементами которого будут квадратные корни элементов исходного списка, +# но только если результаты извлечения корня не имеют десятичной части и # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] +# ''' +import math +a = [2, -5, 8, 9, -25, 25, 4] +b = [] +for i in a: + if i > 0 and (math.sqrt(i)).is_integer(): + b.append(int(math.sqrt(i))) +print(b) +# ''' # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. # Склонением пренебречь (2000 года, 2010 года) -# Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами в диапазоне от -100 до 100 -# В списке должно быть n - элементов -# Подсказка: для получения случайного числа используйте функцию randint() модуля random +''' +mese = {'12':'декабря', '11':"ноября", '10':"октября", '09':"сентября", '08':"августа", '07':"июля", + '06':"июня", '05':"мая", '04':"апреля", '03':"марта", '02':"февраля", '01':"января"} -# Задача-4: Дан список, заполненный произвольными целыми числами -# Получите новый список, элементами которого будут только уникальные элементы исходного -# Например, lst = [1,2,4,5,6,2,5,2], нужно получить lst2 = [1,4,6] +oggi1 = {'9':'девятое', "8":"восьмое", "7":"седьмое", "6":"шестое", "5":"пятое", "4":"четвертое", "3":"третье", + "2":"второе", "1":"первое", "0":"двадцатое"} + +oggi2 = {'9':'девятнадцатое', "8":"восемнадцатое", "7":"семнадцатое", "6":"шестнадцатое", "5":"пятнадцатое", + "4":"четырнадцатое", "3":"тринадцатое", "2":"двенадцатое", "1":"одиннадцатое", "0":"десятое"} +while True: + user_data = input("Введите дату в формате dd.mm.yyyy, (например: 02.11.2013): ") + if len(user_data) != 10 or user_data[2] != '.' or user_data[5] != '.': + print("ошибка ввода") + elif int(user_data[0]) not in range(0, 4) or int(user_data[1]) not in range(0, 10) or int(user_data[3]) not in range(0, 2) or int(user_data[4]) not in range(0, 10) or int(user_data[6:10]) not in range(1, 2020): + print("такой даты не бывает") + else : + # break + if user_data[0] == '0': + a = oggi1[user_data[1:2]] + elif user_data[0] == '1': + a = oggi2[user_data[1:2]] + elif user_data[0] == '2' and user_data[1] != '0': + a = 'двадцать' + oggi1[user_data[1:2]] + else : + a = oggi1[user_data[1:2]] + print(a, mese[user_data[3:5]], user_data[6:10], 'года') +# ''' +# Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами +# в диапазоне от -100 до 100. В списке должно быть n - элементов. +# Подсказка: +# для получения случайного числа используйте функцию randint() модуля random +''' +import random +a = [] +us_vol = int(input("Введите необходимое количество значений списка: ")) +while us_vol > 0: + a.append(random.randint(-100, 100)) + us_vol -= 1 +print(a) +# ''' +# Задача-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] +# ''' +aran = [1, 2, 4, 5, 6, 2, 5, 2, 8, 1] +print(aran) +bran = list(set(aran)) +print('Ответ А', bran) +cran = list(aran) +for j, lran in enumerate(aran): + for m in bran: + if lran == m: + aran.pop(j) +bran = list(set(cran) - set(aran)) +print("Ответ Б", bran) +# ''' \ No newline at end of file diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index 6027c08ef..63d13f646 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -1,14 +1,17 @@ # Задание-1: # Напишите функцию, округляющую полученное произвольное десятичное число -# до кол-ва знаков (кол-во знаков передается вторым аргументом) +# до кол-ва знаков (кол-во знаков передается вторым аргументом). # Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0). -# Для решения задачи не используйте встроенные функции и функции из модуля math - +# Для решения задачи не используйте встроенные функции и функции из модуля math. def my_round(number, ndigits): pass -my_round(2.1234567, 5) + +print(my_round(2.1234567, 5)) +print(my_round(2.1999967, 5)) +print(my_round(2.9999967, 5)) + # Задание-2: # Дан шестизначный номер билета. Определить, является ли билет счастливым. @@ -16,7 +19,10 @@ def my_round(number, ndigits): # Билет считается счастливым, если сумма его первых и последних цифр равны. # !!!P.S.: функция не должна НИЧЕГО print'ить - def lucky_ticket(ticket_number): pass + +print(lucky_ticket(123006)) +print(lucky_ticket(12321)) +print(lucky_ticket(436751)) diff --git a/lesson03/home_work/hw03_hard.py b/lesson03/home_work/hw03_hard.py index 9bb864f4d..a8c7f668a 100644 --- a/lesson03/home_work/hw03_hard.py +++ b/lesson03/home_work/hw03_hard.py @@ -1,13 +1,15 @@ # Задание-1: # Написать программу, выполняющую операции (сложение и вычитание) с простыми дробями. -# Дроби вводятся и выводятся в формате: n x/y ,где n - целая часть, x - числитель, у - знаменатель. +# Дроби вводятся и выводятся в формате: +# n x/y ,где n - целая часть, x - числитель, у - знаменатель. # Дроби могут быть отрицательные и не иметь целой части, или иметь только целую часть. # Примеры: -# Ввод: 5/6 + 4/7 (все выражение вводится целиком в виде строки) -# Вывод: 1 17/42 (результат обязательно упростить и выделить целую часть) +# Ввод: 5/6 + 4/7 (всё выражение вводится целиком в виде строки) +# Вывод: 1 17/42 (результат обязательно упростить и выделить целую часть) # Ввод: -2/3 - -2 # Вывод: 1 1/3 + # Задание-2: # Дана ведомость расчета заработной платы (файл "data/workers"). # Рассчитайте зарплату всех работников, зная что они получат полный оклад, @@ -16,6 +18,7 @@ # они получают удвоенную ЗП, пропорциональную норме. # Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" + # Задание-3: # Дан файл ("data/fruits") со списком фруктов. # Записать в новые файлы все фрукты, начинающиеся с определенной буквы. diff --git a/lesson04/home_work/hw04_normal.py b/lesson04/home_work/hw04_normal.py index f29293105..739dd33f8 100644 --- a/lesson04/home_work/hw04_normal.py +++ b/lesson04/home_work/hw04_normal.py @@ -20,9 +20,10 @@ 'XiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQoiQ'\ 'zTYwZAiRwycdlHfyHNGmkNqSwXUrxGc' + # Задание-2: # Вывести символы в верхнем регистре, слева от которых находятся -# два символа в нижнем регистре, а справа два символа в верхнем регистре. +# два символа в нижнем регистре, а справа - два символа в верхнем регистре. # Т.е. из строки # "GAMkgAYEOmHBSQsSUHKvSfbmxULaysmNOGIPHpEMujalpPLNzRWXfwHQqwksrFeipEUlTLec" # нужно получить список строк: ['AY', 'NOGI', 'P'] @@ -31,9 +32,17 @@ 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' # Задание-3: diff --git a/lesson05/home_work/hw05_easy.py b/lesson05/home_work/hw05_easy.py index 59252493d..c6317de2b 100644 --- a/lesson05/home_work/hw05_easy.py +++ b/lesson05/home_work/hw05_easy.py @@ -1,5 +1,6 @@ # Задача-1: -# Напишите скрипт, создающий директории dir_1 - dir_9 в папке, из которой запущен данный скрипт. +# Напишите скрипт, создающий директории dir_1 - dir_9 в папке, +# из которой запущен данный скрипт. # И второй скрипт, удаляющий эти папки. # Задача-2: diff --git a/lesson05/home_work/hw05_hard.py b/lesson05/home_work/hw05_hard.py index 5161f162b..7507e47b2 100644 --- a/lesson05/home_work/hw05_hard.py +++ b/lesson05/home_work/hw05_hard.py @@ -5,10 +5,11 @@ # rm - удаляет указанный файл (запросить подтверждение операции) # cd - меняет текущую директорию на указанную # ls - отображение полного пути текущей директории -# путь считать абсолютным (full_path) - в Linux начинается с /, в Windows с имени диска +# путь считать абсолютным (full_path) - +# в Linux начинается с /, в Windows с имени диска, # все остальные пути считать относительными. -# Важно! Все операции должны выполняться в той директории, в который вы находитесь. Исходной директорией считать ту, -# в которой был запущен скрипт. +# Важно! Все операции должны выполняться в той директории, в который вы находитесь. +# Исходной директорией считать ту, в которой был запущен скрипт. # P.S. По возможности, сделайте кросс-платформенную реализацию. diff --git a/lesson05/home_work/hw05_normal.py b/lesson05/home_work/hw05_normal.py index 6c0d59d25..ead6bbc19 100644 --- a/lesson05/home_work/hw05_normal.py +++ b/lesson05/home_work/hw05_normal.py @@ -1,12 +1,15 @@ # Задача-1: -# Напишите небольшую консольную утилиту, позволяющую работать с папками текущей директории. +# Напишите небольшую консольную утилиту, +# позволяющую работать с папками текущей директории. # Утилита должна иметь меню выбора действия, в котором будут пункты: # 1. Перейти в папку # 2. Просмотреть содержимое текущей папки # 3. Удалить папку # 4. Создать папку # При выборе пунктов 1, 3, 4 программа запрашивает название папки -# и выводит результат действия: "Успешно создано/удалено/перешел", "Невозможно создать/удалить/перейти" +# и выводит результат действия: "Успешно создано/удалено/перешел", +# "Невозможно создать/удалить/перейти" # Для решения данной задачи используйте алгоритмы из задания easy, -# оформленные в виде соответствующих функций, и импортированные в данный файл из easy.py +# оформленные в виде соответствующих функций, +# и импортированные в данный файл из easy.py diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index 547617f80..fe5dc2b11 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -3,6 +3,7 @@ # Задача-2: Написать Класс "Равнобочная трапеция", заданной координатами 4-х точек. -# Предусмотреть в классе методы: проверка, является ли фигура равнобочной трапецией; -# вычисления: длины сторон, периметр, площадь. +# Предусмотреть в классе методы: +# проверка, является ли фигура равнобочной трапецией; +# вычисления: длины сторон, периметр, площадь. diff --git a/lesson06/home_work/hw06_hard.py b/lesson06/home_work/hw06_hard.py index 069742ce0..fae8d84d2 100644 --- a/lesson06/home_work/hw06_hard.py +++ b/lesson06/home_work/hw06_hard.py @@ -1,10 +1,12 @@ # Задание-1: Решите задачу (дублированную ниже): -# Дана ведомость расчета заработной платы (файл "data/workers"). Рассчитайте зарплату всех работников, -# зная что они получат полный оклад, если отработают норму часов. Если же они отработали меньше нормы, -# то их ЗП уменьшается пропорционально, а за заждый час переработки они получают удвоенную ЗП, -# пропорциональную норме. +# Дана ведомость расчета заработной платы (файл "data/workers"). +# Рассчитайте зарплату всех работников, зная что они получат полный оклад, +# если отработают норму часов. Если же они отработали меньше нормы, +# то их ЗП уменьшается пропорционально, а за заждый час переработки они получают +# удвоенную ЗП, пропорциональную норме. # Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" # С использованием классов. -# Реализуйте классы сотрудников так, чтобы на вход функции-конструктора каждый работник получал строку из файла +# Реализуйте классы сотрудников так, чтобы на вход функции-конструктора +# каждый работник получал строку из файла diff --git a/lesson06/home_work/hw06_normal.py b/lesson06/home_work/hw06_normal.py index e5a1581e1..01c3982f4 100644 --- a/lesson06/home_work/hw06_normal.py +++ b/lesson06/home_work/hw06_normal.py @@ -1,13 +1,17 @@ # Задание-1: # Реализуйте описаную ниже задачу, используя парадигмы ООП: -# В школе есть Классы(5А, 7Б и т.д.), в которых учатся Ученики. У каждого ученика есть два Родителя(мама и папа). -# Также в школе преподают Учителя, один учитель может преподавать в неограниченном кол-ве классов -# свой определенный предмет. Т.е. Учитель Иванов может преподавать математику у 5А и 6Б, но больше математику не -# может преподавать никто другой. +# В школе есть Классы(5А, 7Б и т.д.), в которых учатся Ученики. +# У каждого ученика есть два Родителя(мама и папа). +# Также в школе преподают Учителя. Один учитель может преподавать +# в неограниченном кол-ве классов свой определенный предмет. +# Т.е. Учитель Иванов может преподавать математику у 5А и 6Б, +# но больше математику не может преподавать никто другой. # Выбранная и заполненная данными структура должна решать следующие задачи: # 1. Получить полный список всех классов школы -# 2. Получить список всех учеников в указанном классе(каждый ученик отображается в формате "Фамилия И.О.") -# 3. Получить список всех предметов указанного ученика (Ученик --> Класс --> Учителя --> Предметы) +# 2. Получить список всех учеников в указанном классе +# (каждый ученик отображается в формате "Фамилия И.О.") +# 3. Получить список всех предметов указанного ученика +# (Ученик --> Класс --> Учителя --> Предметы) # 4. Узнать ФИО родителей указанного ученика # 5. Получить список всех Учителей, преподающих в указанном классе diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index e30db8c3e..5ea6ad844 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 -"""Лото +""" +== Лото == Правила игры в лото. @@ -43,8 +44,8 @@ 23 33 38 48 71 -------------------------- -- Карточка компьютера --- - 7 87 - 14 11 - 16 49 55 88 77 + 7 11 - 14 87 + 16 49 55 77 88 15 20 - 76 - -------------------------- Зачеркнуть цифру? (y/n) diff --git a/lesson08/home_work/openweather.py b/lesson08/home_work/openweather.py index 5b321286f..a9debfa1c 100644 --- a/lesson08/home_work/openweather.py +++ b/lesson08/home_work/openweather.py @@ -1,6 +1,12 @@ -""" OpenWeatherMap -OpenWeatherMap — онлайн-сервис, который предоставляет бесплатный API для доступа к данным о текущей погоде, прогнозам, для web-сервисов и мобильных приложений. Архивные данные доступны только на коммерческой основе. В качестве источника данных используются официальные метеорологические службы, данные из метеостанций аэропортов, и данные с частных метеостанций. +""" +== OpenWeatherMap == + +OpenWeatherMap — онлайн-сервис, который предоставляет бесплатный API + для доступа к данным о текущей погоде, прогнозам, для web-сервисов + и мобильных приложений. Архивные данные доступны только на коммерческой основе. + В качестве источника данных используются официальные метеорологические службы + данные из метеостанций аэропортов, и данные с частных метеостанций. Необходимо решить следующие задачи: @@ -9,7 +15,8 @@ Предлагается 2 варианта (по желанию): - получить APPID вручную - - автоматизировать процесс получения APPID, используя дополнительную библиотеку GRAB (pip install grab) + - автоматизировать процесс получения APPID, + используя дополнительную библиотеку GRAB (pip install grab) Необходимо зарегистрироваться на сайте openweathermap.org: https://home.openweathermap.org/users/sign_up @@ -17,23 +24,25 @@ Войти на сайт по ссылке: https://home.openweathermap.org/users/sign_in - Свой ключ вытащить со страницы отсюда: + Свой ключ "вытащить" со страницы отсюда: https://home.openweathermap.org/api_keys Ключ имеет смысл сохранить в локальный файл, например, "app.id" == Получение списка городов == - Список городов может быть получен по ссылке: http://bulk.openweathermap.org/sample/city.list.json.gz + Список городов может быть получен по ссылке: + http://bulk.openweathermap.org/sample/city.list.json.gz Далее снова есть несколько вариантов (по желанию): - скачать и распаковать список вручную - автоматизировать скачивание (ulrlib) и распаковку списка - (воспользоваться модулем gzip или вызвать распаковку через создание процесса архиватора через модуль subprocess) + (воспользоваться модулем gzip + или распаковать внешним архиватором, воспользовавшись модулем subprocess) Список достаточно большой. Представляет собой JSON-строки: - {"_id":707860,"name":"Hurzuf","country":"UA","coord":{"lon":34.283333,"lat":44.549999}} - {"_id":519188,"name":"Novinki","country":"RU","coord":{"lon":37.666668,"lat":55.683334}} +{"_id":707860,"name":"Hurzuf","country":"UA","coord":{"lon":34.283333,"lat":44.549999}} +{"_id":519188,"name":"Novinki","country":"RU","coord":{"lon":37.666668,"lat":55.683334}} == Получение погоды == @@ -50,13 +59,19 @@ Данные о погоде выдаются в JSON-формате - {"coord":{"lon":38.44,"lat":55.87},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"base":"cmc stations","main":{"temp":280.03,"pressure":1006,"humidity":83,"temp_min":273.15,"temp_max":284.55},"wind":{"speed":3.08,"deg":265,"gust":7.2},"rain":{"3h":0.015},"clouds":{"all":76},"dt":1465156452,"sys":{"type":3,"id":57233,"message":0.0024,"country":"RU","sunrise":1465087473,"sunset":1465149961},"id":520068,"name":"Noginsk","cod":200} + {"coord":{"lon":38.44,"lat":55.87}, + "weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}], + "base":"cmc stations","main":{"temp":280.03,"pressure":1006,"humidity":83, + "temp_min":273.15,"temp_max":284.55},"wind":{"speed":3.08,"deg":265,"gust":7.2}, + "rain":{"3h":0.015},"clouds":{"all":76},"dt":1465156452, + "sys":{"type":3,"id":57233,"message":0.0024,"country":"RU","sunrise":1465087473, + "sunset":1465149961},"id":520068,"name":"Noginsk","cod":200} == Сохранение данных в локальную БД == Программа должна позволять: -1. Создавать файл базы данных SQLite с следующей структурой данных (если файла - базы данных не существует): +1. Создавать файл базы данных SQLite со следующей структурой данных + (если файла базы данных не существует): Погода id_города INTEGER PRIMARY KEY @@ -66,7 +81,8 @@ id_погоды INTEGER # weather.id из JSON-данных 2. Выводить список стран из файла и предлагать пользователю выбрать страну -(ввиду того, что список городов и стран весьма велик имеет смысл запрашивать у пользователя имя города или страны +(ввиду того, что список городов и стран весьма велик + имеет смысл запрашивать у пользователя имя города или страны и искать данные в списке доступных городов/стран (регуляркой)) 3. Скачивать JSON (XML) файлы погоды в городах выбранной страны @@ -76,14 +92,13 @@ При повторном запуске скрипта: -- используется уже скачанный файл с городами -- используется созданная база данных, новые данные добавляются и обновляются - +- используется уже скачанный файл с городами; +- используется созданная база данных, новые данные добавляются и обновляются. При работе с XML-файлами: -Доступ к данным в XML файлах происходит через пространство имен: +Доступ к данным в XML-файлах происходит через пространство имен: