From f0fdd2122673612b215fce94bc0753097eb08ab2 Mon Sep 17 00:00:00 2001 From: pablo Date: Sat, 18 Feb 2017 23:12:39 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D0=A1=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D1=8B=20=D0=B4=D0=BB?= =?UTF-8?q?=D0=B8=D0=BD=D1=8B=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=20=D0=B2=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=D1=85=20=D0=94=D0=97.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson01/home_work/hw01_easy.py | 8 ++++-- lesson01/home_work/hw01_hard.py | 7 ++++- lesson01/home_work/hw01_normal.py | 12 +++++--- lesson02/home_work/hw02_easy.py | 15 +++++++--- lesson02/home_work/hw02_hard.py | 28 +++++++++++------- lesson02/home_work/hw02_normal.py | 24 ++++++++++------ lesson03/home_work/hw03_easy.py | 7 ++--- lesson03/home_work/hw03_hard.py | 9 ++++-- lesson05/home_work/hw05_easy.py | 3 +- lesson05/home_work/hw05_hard.py | 7 +++-- lesson05/home_work/hw05_normal.py | 9 ++++-- lesson06/home_work/hw06_easy.py | 5 ++-- lesson06/home_work/hw06_hard.py | 12 ++++---- lesson06/home_work/hw06_normal.py | 16 +++++++---- lesson07/home_work/loto.py | 3 +- lesson08/home_work/openweather.py | 47 ++++++++++++++++++++----------- 16 files changed, 139 insertions(+), 73 deletions(-) diff --git a/lesson01/home_work/hw01_easy.py b/lesson01/home_work/hw01_easy.py index 4592ef2af..ddc55bf68 100644 --- a/lesson01/home_work/hw01_easy.py +++ b/lesson01/home_work/hw01_easy.py @@ -1,11 +1,15 @@ +__author__ = 'Ваши Ф.И.О.' + # Задача-1: Дано произвольное целое число, вывести поочередно цифры исходного числа # код пишем тут... # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. -# Не нужно решать задачу так: print("a = ", b, "b = ", a) - это неправильное решение! +# Не нужно решать задачу так: +# print("a = ", b, "b = ", a) - это неправильное решение! -# Задача-3: Запросите у пользователя его возраст. Если ему есть 18 лет, выведите: "Доступ разрешен", +# Задача-3: Запросите у пользователя его возраст. +# Если ему есть 18 лет, выведите: "Доступ разрешен", # иначе "Извините, пользование данным ресурсом только с 18 лет" diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index d4d9fa7aa..4595b93d2 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,6 @@ # Результат: True # Код: a > 999999 # Результат: True -# Вопрос: Чему была равна переменная a, если точно известно, что её значение не изменялось? + +# Вопрос: Чему была равна переменная a, +# если точно известно, что её значение не изменялось? diff --git a/lesson01/home_work/hw01_normal.py b/lesson01/home_work/hw01_normal.py index 8c6435811..f8aa0c5e9 100644 --- a/lesson01/home_work/hw01_normal.py +++ b/lesson01/home_work/hw01_normal.py @@ -1,8 +1,11 @@ -__author__ = '' + +__author__ = 'Ваши Ф.И.О.' # Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. -# Например, дается x = 58375. Нужно вывести максимальную цифру в данном числе, т.е. 8. -# Подразумевается, что мы не знаем это число заранее. Число приходит в виде целого беззнакового. +# Например, дается x = 58375. +# Нужно вывести максимальную цифру в данном числе, т.е. 8. +# Подразумевается, что мы не знаем это число заранее. +# Число приходит в виде целого беззнакового. # Задача-2: Исходные значения двух переменных запросить у пользователя. @@ -10,7 +13,8 @@ # Решите задачу, используя только две переменные. -# Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида ax2 + bx + c = 0. +# Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида +# ax2 + bx + c = 0. # Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math # import math # math.sqrt(4) - вычисляет корень числа 4 diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index 370c370b2..ed4447e50 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -1,5 +1,8 @@ # Задача-1: -# Дан список фруктов. Напишите программу, выводящую фрукты в виде нумерованного списка, выровненного по правой стороне +# Дан список фруктов. +# Напишите программу, выводящую фрукты в виде нумерованного списка, +# выровненного по правой стороне. + # Пример: # Дано: ["яблоко", "банан", "киви", "арбуз"] # Вывод: @@ -8,11 +11,15 @@ # 3. киви # 4. арбуз -# Подсказка: использует метод .format() +# Подсказка: воспользоваться методом .format() + # Задача-2: -# Даны два произвольные списка. Удалите из первого списка элементы, присутствующие во втором списке. +# Даны два произвольные списка. +# Удалите из первого списка элементы, присутствующие во втором списке. + # Задача-3: -# Дан произвольный список из целых чисел. Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: +# Дан произвольный список из целых чисел. +# Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: # если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index d2421bc0a..c96843184 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -1,16 +1,20 @@ -# Задание-1: уравнение прямой вида y = kx + b задано ввиде строки. -# Определить координату y точки с заданной координатой x +# Задание-1: уравнение прямой вида y = kx + b задано в виде строки. +# Определить координату y точки с заданной координатой x. equation = 'y = -12x + 11111140.2121' x = 2.5 # вычислите и выведите 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' @@ -20,11 +24,14 @@ date = '1.12.1001' date = '-2.10.3001' -# Задание-3: "Перевернутая башня" (Задача олимпиадного уровня) + +# Задание-3: "Перевёрнутая башня" (Задача олимпиадного уровня) # -# Вавилонцы решили построить удивительную башню — расширяющуюся к верху и содержащую бесконечное число этажей и комнат. -# Она устроена следующим образом — на первом этаже одна комната, затем идет два этажа, -# на каждом из которых по две комнаты, затем идёт три этажа, на каждом из которых по три комнаты и так далее: +# Вавилонцы решили построить удивительную башню — +# расширяющуюся к верху и содержащую бесконечное число этажей и комнат. +# Она устроена следующим образом — на первом этаже одна комната, +# затем идет два этажа, на каждом из которых по две комнаты, +# затем идёт три этажа, на каждом из которых по три комнаты и так далее: # ... # 12 13 14 # 9 10 11 @@ -33,7 +40,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..3acfaabb6 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -1,17 +1,25 @@ # Задача-1: -# Дан список, заполненный произвольными целыми числами, получите новый список, элементами которого будут -# квадратные корни элементов исходного списка, но только если результаты извлечения корня не имеют десятичной части и +# Дан список, заполненный произвольными целыми числами, получите новый список, +# элементами которого будут квадратные корни элементов исходного списка, +# но только если результаты извлечения корня не имеют десятичной части и # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] + # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. # Склонением пренебречь (2000 года, 2010 года) -# Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами в диапазоне от -100 до 100 -# В списке должно быть n - элементов -# Подсказка: для получения случайного числа используйте функцию randint() модуля random -# Задача-4: Дан список, заполненный произвольными целыми числами -# Получите новый список, элементами которого будут только уникальные элементы исходного -# Например, lst = [1,2,4,5,6,2,5,2], нужно получить lst2 = [1,4,6] +# Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами +# в диапазоне от -100 до 100. В списке должно быть n - элементов. +# Подсказка: +# для получения случайного числа используйте функцию randint() модуля random + + +# Задача-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] diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index 6027c08ef..5035412b5 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -1,22 +1,21 @@ # Задание-1: # Напишите функцию, округляющую полученное произвольное десятичное число -# до кол-ва знаков (кол-во знаков передается вторым аргументом) +# до кол-ва знаков (кол-во знаков передается вторым аргументом). # Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0). -# Для решения задачи не используйте встроенные функции и функции из модуля math - +# Для решения задачи не используйте встроенные функции и функции из модуля math. def my_round(number, ndigits): pass my_round(2.1234567, 5) + # Задание-2: # Дан шестизначный номер билета. Определить, является ли билет счастливым. # Решение реализовать в виде функции. # Билет считается счастливым, если сумма его первых и последних цифр равны. # !!!P.S.: функция не должна НИЧЕГО print'ить - def lucky_ticket(ticket_number): pass 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/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..da01d4c00 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 -"""Лото +""" +== Лото == Правила игры в лото. 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-файлах происходит через пространство имен: Date: Fri, 28 Sep 2018 19:47:57 +0300 Subject: [PATCH 3/8] Fix typo --- lesson07/home_work/loto.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index da01d4c00..5ea6ad844 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -44,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) From 56b298ed44e63d7453fd811459c5789ab592777a Mon Sep 17 00:00:00 2001 From: lkashin Date: Fri, 31 May 2019 12:08:28 +0300 Subject: [PATCH 4/8] Easy --- lesson01/home_work/hw01_easy.py | 36 ++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/lesson01/home_work/hw01_easy.py b/lesson01/home_work/hw01_easy.py index f927b0b06..13c6ec978 100644 --- a/lesson01/home_work/hw01_easy.py +++ b/lesson01/home_work/hw01_easy.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Кашин Леонид Михайлович' # Задача-1: Дано произвольное целое число (число заранее неизвестно). # Вывести поочередно цифры исходного числа (порядок вывода цифр неважен). @@ -9,6 +9,14 @@ # код пишем тут... +# ''' +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: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. @@ -17,8 +25,34 @@ # или через арифметические действия # Не нужно решать задачу так: # 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 + +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') + + From 0a0da02cb428879c43989c51efbca9c2462cac11 Mon Sep 17 00:00:00 2001 From: lkashin Date: Fri, 31 May 2019 18:06:40 +0300 Subject: [PATCH 5/8] Easy --- lesson01/home_work/hw01_hard.py | 2 +- lesson01/home_work/hw01_normal.py | 61 +++++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index 7df268664..200b7e825 100644 --- a/lesson01/home_work/hw01_hard.py +++ b/lesson01/home_work/hw01_hard.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Кашин Леонид Михайлович' # Задание-1: # Ваня набрал несколько операций в интерпретаторе и получал результаты: diff --git a/lesson01/home_work/hw01_normal.py b/lesson01/home_work/hw01_normal.py index 991724e9a..0ee148405 100644 --- a/lesson01/home_work/hw01_normal.py +++ b/lesson01/home_work/hw01_normal.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Кашин Леонид Михайлович' # Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. # Например, дается x = 58375. @@ -10,6 +10,19 @@ # * постарайтесь решить задачу с применением арифметики и цикла 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: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. @@ -17,11 +30,53 @@ # Подсказки: # * постарайтесь сделать решение через действия над числами; # * при желании и понимании воспользуйтесь синтаксисом кортежей 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: Напишите программу, вычисляющую корни квадратного уравнения вида # ax² + bx + c = 0. # Коэффициенты уравнения вводятся пользователем. # Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math: -# import 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") +# ''' From 1a138872982b3442e5da6016251f06e8a7f71fa2 Mon Sep 17 00:00:00 2001 From: lkashin Date: Fri, 31 May 2019 18:46:05 +0300 Subject: [PATCH 6/8] Easy, Normal, Hard --- lesson01/home_work/hw01_hard.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index 200b7e825..f6af497d2 100644 --- a/lesson01/home_work/hw01_hard.py +++ b/lesson01/home_work/hw01_hard.py @@ -1,5 +1,5 @@ -__author__ = 'Кашин Леонид Михайлович' +__author__ = 'Ваши Ф.И.О.' # Задание-1: # Ваня набрал несколько операций в интерпретаторе и получал результаты: @@ -14,3 +14,11 @@ # если точно известно, что её значение не изменялось? # Подсказка: это значение точно есть ;) + +import math + +a = math.inf +print(a == a**2) +print(a == a*2) +print(a > 999999) + From 23985000c84fb1f757d6d4de469012a90b7aa047 Mon Sep 17 00:00:00 2001 From: lkashin Date: Fri, 31 May 2019 18:46:41 +0300 Subject: [PATCH 7/8] Easy, Normal, Hard --- lesson01/home_work/hw01_hard.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index f6af497d2..de13e0dc8 100644 --- a/lesson01/home_work/hw01_hard.py +++ b/lesson01/home_work/hw01_hard.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Кашин Леонид Михайлович' # Задание-1: # Ваня набрал несколько операций в интерпретаторе и получал результаты: From 562106fbe413bd784d6fc1f6feb10c080b987c30 Mon Sep 17 00:00:00 2001 From: lkashin Date: Sun, 2 Jun 2019 19:24:33 +0300 Subject: [PATCH 8/8] Easy, Normal, Hard --- lesson02/home_work/hw02_easy.py | 30 +++++++++++++ lesson02/home_work/hw02_hard.py | 75 ++++++++++++++++++++++++++----- lesson02/home_work/hw02_normal.py | 60 +++++++++++++++++++++++-- 3 files changed, 152 insertions(+), 13 deletions(-) diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index ed4447e50..c77757d2d 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -13,13 +13,43 @@ # Подсказка: воспользоваться методом .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 c96843184..f11065883 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -1,10 +1,18 @@ # Задание-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'. # Проверить, корректно ли введена дата. @@ -17,14 +25,26 @@ # (т.е. 2 символа для дня, 2 - для месяца, 4 - для года) # Пример корректной даты -date = '01.11.1985' - -# Примеры некорректных дат -date = '01.22.1001' -date = '1.12.1001' -date = '-2.10.3001' - - +# 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: "Перевёрнутая башня" (Задача олимпиадного уровня) # # Вавилонцы решили построить удивительную башню — @@ -53,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 3acfaabb6..b180cdc9f 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -4,22 +4,76 @@ # но только если результаты извлечения корня не имеют десятичной части и # если такой корень вообще можно извлечь # Пример: Дано: [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 года) +''' +mese = {'12':'декабря', '11':"ноября", '10':"октября", '09':"сентября", '08':"августа", '07':"июля", + '06':"июня", '05':"мая", '04':"апреля", '03':"марта", '02':"февраля", '01':"января"} + +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