From f0fdd2122673612b215fce94bc0753097eb08ab2 Mon Sep 17 00:00:00 2001 From: pablo Date: Sat, 18 Feb 2017 23:12:39 +0300 Subject: [PATCH 01/13] =?UTF-8?q?=D0=A1=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D1=8B=20=D0=B4?= =?UTF-8?q?=D0=BB=D0=B8=D0=BD=D1=8B=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=20?= =?UTF-8?q?=D0=B2=20=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 03/13] 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 b938203034f5431f50eee8402c1186551d2f5532 Mon Sep 17 00:00:00 2001 From: Gasby <4226793@gmail.com> Date: Tue, 13 Aug 2019 16:59:31 +0300 Subject: [PATCH 04/13] no message --- lesson01/home_work/hw01_easy.py | 21 +++++++++++++++++++-- lesson01/home_work/hw01_normal.py | 25 +++++++++++++++++++++---- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/lesson01/home_work/hw01_easy.py b/lesson01/home_work/hw01_easy.py index f927b0b06..140dde149 100644 --- a/lesson01/home_work/hw01_easy.py +++ b/lesson01/home_work/hw01_easy.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Пыпин Андрей Сергеевич.' # Задача-1: Дано произвольное целое число (число заранее неизвестно). # Вывести поочередно цифры исходного числа (порядок вывода цифр неважен). @@ -9,16 +9,33 @@ # код пишем тут... +m = int(input('Введите число')) +i = 0 +while i <= m: + print(i) + i +=1 + # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. # Подсказка: -# * постарайтесь сделать решение через дополнительную переменную +# * постарайтесь сделать решение через дополнительную переменную # или через арифметические действия # Не нужно решать задачу так: # print("a = ", b, "b = ", a) - это неправильное решение! +a = int(input('Введите число')) +b = int(input('Введите число')) +buf = a +a = b +b = buf +print(a, b) # Задача-3: Запросите у пользователя его возраст. # Если ему есть 18 лет, выведите: "Доступ разрешен", # иначе "Извините, пользование данным ресурсом только с 18 лет" +y = int(input('Сколько вам лет?')) +if y >= 18: + print('Доступ разрешен') +else: + print('Извините, пользование данным ресурсом только с 18 лет') diff --git a/lesson01/home_work/hw01_normal.py b/lesson01/home_work/hw01_normal.py index 991724e9a..63448bf41 100644 --- a/lesson01/home_work/hw01_normal.py +++ b/lesson01/home_work/hw01_normal.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Пыпин Андрей Сергеевич.' # Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. # Например, дается x = 58375. @@ -9,7 +9,13 @@ # Подсказки: # * постарайтесь решить задачу с применением арифметики и цикла while; # * при желании и понимании решите задачу с применением цикла for. - +m = 184 +ls = [] +while m > 10: + ls.append(m % 10) + m //= 10 +r = max(ls) +print(r) # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. @@ -17,11 +23,22 @@ # Подсказки: # * постарайтесь сделать решение через действия над числами; # * при желании и понимании воспользуйтесь синтаксисом кортежей Python. - - +i = int(input('Введите число')) +y = int(input('Введите число')) +i = i + y +y = i - y +i = i - y +print(i, y) # Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида # ax² + bx + c = 0. # Коэффициенты уравнения вводятся пользователем. # Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math: # import math # math.sqrt(4) - вычисляет корень числа 4 +import math +a = int(input('Введите число')) +b = int(input('Введите число')) +x = int(input('Введите число')) +c = int(input('Введите число')) +g = a*x**2 + (b*x) + c +print(math.sqrt(g)) From 02b288c29e4e3ddeb69570b989dd9778ac3e9fea Mon Sep 17 00:00:00 2001 From: Gasby <4226793@gmail.com> Date: Tue, 13 Aug 2019 17:04:29 +0300 Subject: [PATCH 05/13] no message --- lesson01/home_work/hw01_hard.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index 7df268664..35a5a4d4f 100644 --- a/lesson01/home_work/hw01_hard.py +++ b/lesson01/home_work/hw01_hard.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Пыпин Андрей Сергеевич' # Задание-1: # Ваня набрал несколько операций в интерпретаторе и получал результаты: @@ -9,7 +9,7 @@ # Результат: True # Код: a > 999999 # Результат: True - +8 # Вопрос: Чему была равна переменная a, # если точно известно, что её значение не изменялось? From b93fc942270c03525e6bc61c50771bfb63561748 Mon Sep 17 00:00:00 2001 From: Gasby <4226793@gmail.com> Date: Sat, 17 Aug 2019 19:09:44 +0300 Subject: [PATCH 06/13] no message --- lesson01/home_work/hw01_easy.py | 19 ++++- lesson01/home_work/hw01_hard.py | 2 +- lesson01/home_work/hw01_normal.py | 25 +++++- lesson02/home_work/hw02_easy.py | 16 ++++ lesson02/home_work/hw02_normal.py | 123 +++++++++++++++++++++++++++++- 5 files changed, 176 insertions(+), 9 deletions(-) diff --git a/lesson01/home_work/hw01_easy.py b/lesson01/home_work/hw01_easy.py index f927b0b06..8405c4398 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,12 @@ # код пишем тут... +m = int(input('Введите число')) +i = 0 +while i <= m: + print(i) + i +=1 + # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. @@ -17,8 +23,19 @@ # или через арифметические действия # Не нужно решать задачу так: # print("a = ", b, "b = ", a) - это неправильное решение! +a = int(input('Введите число')) +b = int(input('Введите число')) +buf = a +a = b +b = buf +print(a, b) # Задача-3: Запросите у пользователя его возраст. # Если ему есть 18 лет, выведите: "Доступ разрешен", # иначе "Извините, пользование данным ресурсом только с 18 лет" +y = int(input('Сколько вам лет?')) +if y >= 18: + print('Доступ разрешен') +else: + print('Извините, пользование данным ресурсом только с 18 лет') diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index 7df268664..725bc8677 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..63448bf41 100644 --- a/lesson01/home_work/hw01_normal.py +++ b/lesson01/home_work/hw01_normal.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Пыпин Андрей Сергеевич.' # Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. # Например, дается x = 58375. @@ -9,7 +9,13 @@ # Подсказки: # * постарайтесь решить задачу с применением арифметики и цикла while; # * при желании и понимании решите задачу с применением цикла for. - +m = 184 +ls = [] +while m > 10: + ls.append(m % 10) + m //= 10 +r = max(ls) +print(r) # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. @@ -17,11 +23,22 @@ # Подсказки: # * постарайтесь сделать решение через действия над числами; # * при желании и понимании воспользуйтесь синтаксисом кортежей Python. - - +i = int(input('Введите число')) +y = int(input('Введите число')) +i = i + y +y = i - y +i = i - y +print(i, y) # Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида # ax² + bx + c = 0. # Коэффициенты уравнения вводятся пользователем. # Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math: # import math # math.sqrt(4) - вычисляет корень числа 4 +import math +a = int(input('Введите число')) +b = int(input('Введите число')) +x = int(input('Введите число')) +c = int(input('Введите число')) +g = a*x**2 + (b*x) + c +print(math.sqrt(g)) diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index ed4447e50..9fde8a34a 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -2,6 +2,11 @@ # Дан список фруктов. # Напишите программу, выводящую фрукты в виде нумерованного списка, # выровненного по правой стороне. +empty_list = [] +my_list = ["яблоко", "банан", "киви", "арбуз"] +for index, value in enumerate(my_list, 1): + print("{}. {:>10}".format(index, value)) + # Пример: # Дано: ["яблоко", "банан", "киви", "арбуз"] @@ -18,8 +23,19 @@ # Даны два произвольные списка. # Удалите из первого списка элементы, присутствующие во втором списке. +list_1 = [1, 3, 5, 8, 9] +list_2 = [1, 7, 4, 15, 9] +list_1.pop(0) +list_1.pop(3) +list_2.pop(0) +list_2.pop(3) +print(list_1, list_2) # Задача-3: # Дан произвольный список из целых чисел. # Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: # если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. +a = [12, 15, 40, 25] +b = [12/2, 15*2, 40/2, 25*2] + +print(a, b) \ No newline at end of file diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index 3acfaabb6..e3d19e53f 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -4,18 +4,128 @@ # но только если результаты извлечения корня не имеют десятичной части и # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] - - +import math +import random +l = [2, -5, 8, 9, -25, 25, 4] +new = [] +for x in l: + if x > 0: + y = math.sqrt(x) + if y % int(y) == 0: + new.append(y) +print(new) # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. # Склонением пренебречь (2000 года, 2010 года) +s = '02.11.2013' +a = s.split('.') +day = a[0] +month = a[1] +year = a[2] +text = 'года' + +if day == '01': + day = 'первое' +elif day == '02': + day = 'второе' +elif day == '03': + day = 'третье' +elif day == '04': + day = 'четвертое' +elif day == '05': + day = 'пятое' +elif day == '06': + day = 'шестое' +elif day == '07': + day = 'седьмое' +elif day == '08': + day = 'восьмое' +elif day == '09': + day = 'девятое' +elif day == '10': + day = 'десятое' +elif day == '11': + day = 'одиннадцатое' +elif day == '12': + day = 'двенадцатое' +elif day == '13': + day = 'тринадцатое' +elif day == '14': + day = 'четырнадцатое' +elif day == '15': + day = 'пятнадцатое' +elif day == '16': + day = 'шестнадцатое' +elif day == '17': + day = 'семнадцатое' +elif day == '18': + day = 'восемнадцатое' +elif day == '19': + day = 'девятьнадцатое' +elif day == '20': + day = 'дцадцатое' +elif day == '21': + day = 'двадцать первое' +elif day == '22': + day = 'двадцать второе' +elif day == '23': + day = 'двадцать третье' +elif day == '24': + day = 'двадцать чертвертое' +elif day == '25': + day = 'двадцать пятое' +elif day == '26': + day = 'двадцать шестое' +elif day == '27': + day = 'двадцать седьмое' +elif day == '28': + day = 'двадцать восьмое' +elif day == '29': + day = 'двадцать девятое' +elif day == '30': + day = 'тридцатое' +elif day == '31': + day = 'тридцать первое' + +if month == '01': + month = 'января' +elif month == '02': + month = 'февраля' +elif month == '03': + month = 'марта' +elif month == '04': + month = 'апреля' +elif month == '05': + month = 'мая' +elif month == '06': + month = 'июня' +elif month == '07': + month = 'июля' +elif month == '08': + month = 'августа' +elif month == '09': + month = 'сентября' +elif month == '10': + month = 'октября' +elif month == '11': + month = 'ноября' +elif month == '12': + month = 'декабря' +print('{} {} {} {}'.format(day, month, year, text)) + # Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами # в диапазоне от -100 до 100. В списке должно быть n - элементов. # Подсказка: # для получения случайного числа используйте функцию randint() модуля random - +l = [] +n = 50 +count = 0 +while count < 50: + l.append(random.randint(-100, 100)) + count += 1 +print(l) # Задача-4: Дан список, заполненный произвольными целыми числами. # Получите новый список, элементами которого будут: @@ -23,3 +133,10 @@ # например, lst = [1, 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 2, 4, 5, 6] # б) элементы исходного списка, которые не имеют повторений: # например, lst = [1 , 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 4, 6] +lst = [1, 2, 4, 5, 6, 2, 5, 2] +lst1 = set(lst) +lst1 = list(lst1) +print(lst1) + +lst2 = [x for x in lst if not lst.count(x) > 1] +print(lst2) \ No newline at end of file From 37eb5d93993e56fc120f6dbf5b424fee3467b587 Mon Sep 17 00:00:00 2001 From: Gasby <4226793@gmail.com> Date: Tue, 20 Aug 2019 16:46:43 +0300 Subject: [PATCH 07/13] no message --- lesson03/home_work/hw03_easy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index 63d13f646..9df19d3a6 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -6,7 +6,7 @@ def my_round(number, ndigits): pass - +x = print(my_round(2.1234567, 5)) print(my_round(2.1999967, 5)) From a1b16539ea523cf0f7ac6b977d75a01656e8df7c Mon Sep 17 00:00:00 2001 From: Gasby <4226793@gmail.com> Date: Wed, 21 Aug 2019 15:30:55 +0300 Subject: [PATCH 08/13] no message --- lesson03/home_work/hw03_easy.py | 11 ++++----- lesson03/home_work/hw03_normal.py | 40 +++++++++++++++++++++++++++---- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index 9df19d3a6..b60b60709 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -4,9 +4,9 @@ # Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0). # Для решения задачи не используйте встроенные функции и функции из модуля math. -def my_round(number, ndigits): - pass -x = +def my_round(number, digits): + multiplier = pow(10.0, digits) + return int (number*multiplier + 0.5) / multiplier print(my_round(2.1234567, 5)) print(my_round(2.1999967, 5)) @@ -21,8 +21,5 @@ def my_round(number, ndigits): def lucky_ticket(ticket_number): pass + lucky_ticket = lambda x :(lambda x : 'yes' if sum(x[:3]) == sum(x[3:]) else 'no')(map(int, list(str(x)))) - -print(lucky_ticket(123006)) -print(lucky_ticket(12321)) -print(lucky_ticket(436751)) diff --git a/lesson03/home_work/hw03_normal.py b/lesson03/home_work/hw03_normal.py index 38ac1fcc1..f4d07d321 100644 --- a/lesson03/home_work/hw03_normal.py +++ b/lesson03/home_work/hw03_normal.py @@ -5,6 +5,24 @@ def fibonacci(n, m): pass + +for Y in range(0, 5 + 1): + print(Y) + +def fibonacci(n, m): + a = [] + golden = 1.618034 + for i in range(n, m + 1): + x = (golden ** i - (1 - golden) ** i) / (5 ** (1 / 2)) + a.append(round(x)) + return a + +x = 5 +y = 7 + +B = fibonacci(x, y) + +print(B) # Задача-2: # Напишите функцию, сортирующую принимаемый список по возрастанию. # Для сортировки используйте любой алгоритм (например пузырьковый). @@ -12,15 +30,29 @@ def fibonacci(n, m): def sort_to_max(origin_list): - pass + n = 1 + while n < len (origin_list): + for i in range(len(origin_list) - n): + if origin_list[i] > origin_list[i + 1]: + origin_list[i], origin_list[i + 1] = origin_list[i + 1], origin_list[i] + n += 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 filter_function(func,iterable): + output_iterable = [] + for i in range(len(iterable)): + if func(iterable[i]) == True: + output_iterable.append(iterable[i]) + return output_iterable + +func = lambda x: type(x) == str +iterable = [-1, 2, 'a', 4, 'GGG'] +print(filter_function(func,iterable)) # Задача-4: # Даны четыре точки А1(х1, у1), А2(x2 ,у2), А3(x3 , у3), А4(х4, у4). # Определить, будут ли они вершинами параллелограмма. From ee50403796db06f4e36c7666066a9e4a009d66ab Mon Sep 17 00:00:00 2001 From: Gasby <4226793@gmail.com> Date: Sun, 25 Aug 2019 11:53:50 +0300 Subject: [PATCH 09/13] no message --- lesson04/home_work/hw04_easy.py | 12 ++++++++++- lesson04/home_work/hw04_normal.py | 36 +++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/lesson04/home_work/hw04_easy.py b/lesson04/home_work/hw04_easy.py index 85035ea8b..a20731447 100644 --- a/lesson04/home_work/hw04_easy.py +++ b/lesson04/home_work/hw04_easy.py @@ -5,14 +5,24 @@ # Получить новый список, элементы которого будут # квадратами элементов исходного списка # [1, 2, 4, 0] --> [1, 4, 16, 0] +list_1 = [1, 2, 4, 0, 1, 4, 16, 0] +print('list_1:', list_1) +list_2 = list(map(lambda x: x ** 2, list_1)) +print('list_2:', list_2) # Задание-2: # Даны два списка фруктов. # Получить список фруктов, присутствующих в обоих исходных списках. - +fruit_list_1 = ['Грэйпфрут', 'Лайм', 'Ананас', 'Памела', 'Дыня'] +fruit_list_2 = ['Банан', 'Ананас', 'Апельсин', 'Лайм', 'Памела', 'Вишня'] +result_list = [i for i in fruit_list_1 if i in fruit_list_2] +print(result_list) # Задание-3: # Дан список, заполненный произвольными числами. # Получить список из элементов исходного, удовлетворяющих следующим условиям: # + Элемент кратен 3 # + Элемент положительный # + Элемент не кратен 4 +list_1 = [3, 4, 5, 11, 6, 7, 33, 39, 8, 45, 9, 12, 58, 61] +list_2 = [i for i in list_1 if i >= 0 and i%4 and not i%3] +print(list_2) \ No newline at end of file diff --git a/lesson04/home_work/hw04_normal.py b/lesson04/home_work/hw04_normal.py index 739dd33f8..461961c0f 100644 --- a/lesson04/home_work/hw04_normal.py +++ b/lesson04/home_work/hw04_normal.py @@ -22,6 +22,7 @@ # Задание-2: + # Вывести символы в верхнем регистре, слева от которых находятся # два символа в нижнем регистре, а справа - два символа в верхнем регистре. # Т.е. из строки @@ -44,7 +45,42 @@ 'uXBqHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQN'\ 'JFaXiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQ'\ 'oiQzTYwZAiRwycdlHfyHNGmkNqSwXUrxGC' +symbol1 = list(map(lambda x: chr(x), list(range(65, 91)))) +symbol2 = list(map(lambda x: chr(x), list(range(97, 123)))) +line_new = list(line_2) + +lst = [] +i = len(line_new) - 1 + +while i >= 0: + if line_new[i] in symbol2: + lst.append(line_new[i]) + elif line_new[i] in symbol1 and i <= len(line_new) - 3 and line_new[i + 1] in symbol1 and line_new[ + i + 2] in symbol1: + lst.append(line_new[i]) + else: + lst.append(' ') + i -= 1 +lst.reverse() + +i = 0 +lst2 = [] +registr = True +while i <= len(lst) - 1: + if lst[i] in symbol2: + registr = True + if lst[i] in symbol1 and lst[i - 1] in symbol2 and lst[i - 2] in symbol2: + lst2.append(lst[i]) + registr = False + elif lst[i] in symbol1 and registr == False: + lst2.append(lst[i]) + else: + lst2.append(' ') + i += 1 +stroka = ''.join(lst2).split(' ') +line_str_3 = [i for i in stroka if i != ''] +print('Список без использованием модуля re: \n', line_str_3) # Задание-3: # Напишите скрипт, заполняющий указанный файл (самостоятельно задайте имя файла) # произвольными целыми цифрами, в результате в файле должно быть From c2f117f15e6877908a5c56afd3a64448af1d5202 Mon Sep 17 00:00:00 2001 From: Gasby <4226793@gmail.com> Date: Wed, 28 Aug 2019 14:13:54 +0300 Subject: [PATCH 10/13] no message --- lesson05/home_work/hw05_easy.py | 18 ++++++++++++++++++ lesson05/home_work/hw05_normal.py | 1 + 2 files changed, 19 insertions(+) diff --git a/lesson05/home_work/hw05_easy.py b/lesson05/home_work/hw05_easy.py index c6317de2b..86cfcc003 100644 --- a/lesson05/home_work/hw05_easy.py +++ b/lesson05/home_work/hw05_easy.py @@ -2,9 +2,27 @@ # Напишите скрипт, создающий директории dir_1 - dir_9 в папке, # из которой запущен данный скрипт. # И второй скрипт, удаляющий эти папки. +import os +print('Ваща текущая директория {}'.format(os.getcwd())) +def makedir(i): + os.mkdir('{}'.format(i)) +def removedir(i): + os.rmdir('{}'.format(i)) +def chdir(i): + os.chdir(i) +for r in range(9): + makedir('dir_{}'.format(r+1)) +print(os.listdir()) +for r in range(9): + removedir('dir_{}'.format(r+1)) # Задача-2: # Напишите скрипт, отображающий папки текущей директории. + def nowdir(): + print('Содержимое текущей папки: {}'.format(os.listdir())) + # Задача-3: # Напишите скрипт, создающий копию файла, из которого запущен данный скрипт. +import shutil +shutil.copy('hw05_easy.py','hw05_easy_copy.py') \ No newline at end of file diff --git a/lesson05/home_work/hw05_normal.py b/lesson05/home_work/hw05_normal.py index ead6bbc19..684cc8f17 100644 --- a/lesson05/home_work/hw05_normal.py +++ b/lesson05/home_work/hw05_normal.py @@ -13,3 +13,4 @@ # Для решения данной задачи используйте алгоритмы из задания easy, # оформленные в виде соответствующих функций, # и импортированные в данный файл из easy.py + From e620af2fa6bbc2c5321f89671a9cb5602c2f6dc4 Mon Sep 17 00:00:00 2001 From: Gasby <4226793@gmail.com> Date: Sun, 1 Sep 2019 15:58:06 +0300 Subject: [PATCH 11/13] no message --- lesson06/home_work/hw06_easy.py | 57 +++++++++++++++++++++++++++-- lesson06/home_work/hw06_normal.py | 61 +++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 3 deletions(-) diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index fe5dc2b11..89e1b7faa 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -1,9 +1,60 @@ # Задача-1: Написать класс для фигуры-треугольника, заданного координатами трех точек. # Определить методы, позволяющие вычислить: площадь, высоту и периметр фигуры. - - +import math +class Triangle: + def __init__(self, A, B, C): + def sideLen(dot1, dot2): + return math.sqrt((dot1[0] - dot2[0]) ** 2 + + (dot1[1] - dot2[1]) ** 2) + self.A = A + self.B = B + self.C = C + self.AB = sideLen(self.A, self.B) + self.BC = sideLen(self.B, self.C) + self.CA = sideLen(self.C, self.A) + def areaTriangle(self): + semi_perimeter = self.perimeterTriangle() / 2 + return math.sqrt(semi_perimeter + * (semi_perimeter - self.AB) + * (semi_perimeter - self.BC) + * (semi_perimeter - self.CA)) + def perimeterTriangle(self): + return self.AB + self.BC + self.CA + def heightTriangle(self): + return self.areaTriangle() / (self.AB / 2) +treugolnik1 = Triangle((12, 5), (15, 9), (4, 8)) +print(treugolnik1.areaTriangle()) +print(treugolnik1.heightTriangle()) +print(treugolnik1.perimeterTriangle()) # Задача-2: Написать Класс "Равнобочная трапеция", заданной координатами 4-х точек. # Предусмотреть в классе методы: # проверка, является ли фигура равнобочной трапецией; # вычисления: длины сторон, периметр, площадь. - +class Trapeze: + def __init__(self, A, B, C, D): + def sideLen(dot1, dot2): + return math.sqrt((dot1[0] - dot2[0]) ** 2 + + (dot1[1] - dot2[1]) ** 2) + def areaTriangle(len1, len2, len3): + semi_perimeter = (len1 + len2 + len3) / 2 + return math.sqrt(semi_perimeter + * (semi_perimeter - len1) + * (semi_perimeter - len2) + * (semi_perimeter - len3)) + self.A = A + self.B = B + self.C = C + self.D = D + self.AB = sideLen(self.A, self.B) + self.BC = sideLen(self.B, self.C) + self.CD = sideLen(self.C, self.D) + self.DA = sideLen(self.D, self.A) + self.diagonal_AC = sideLen(self.C, self.A) + self.diagonal_BD = sideLen(self.B, self.D) + self.perimeter = self.AB + self.BC + self.CD + self.DA + self.area = areaTriangle(self.AB, self.diagonal_BD, self.DA) \ + + areaTriangle(self.diagonal_BD, self.BC, self.CD) + def isTrapezeEqu(self): + if self.diagonal_AC == self.diagonal_BD: + return True + return False diff --git a/lesson06/home_work/hw06_normal.py b/lesson06/home_work/hw06_normal.py index 01c3982f4..201be70b9 100644 --- a/lesson06/home_work/hw06_normal.py +++ b/lesson06/home_work/hw06_normal.py @@ -15,3 +15,64 @@ # (Ученик --> Класс --> Учителя --> Предметы) # 4. Узнать ФИО родителей указанного ученика # 5. Получить список всех Учителей, преподающих в указанном классе +class People: + def __init__(self, name, patronymic, surname): + self.name = name + self.surname = surname + self.patronymic = patronymic + + def get_full_name(self): + return self.name + ' ' + self.patronymic + ' ' + self.surname + + def get_short_name(self): + return '{} {}.{}.'.format(self.surname.title(), self.name[0].upper(), self.patronymic[0].upper()) + +class Student(People): + def __init__(self, name, patronymic, surname, mom, dad, school_class): + People.__init__(self, name, patronymic, surname) + self.mom = mom + self.dad = dad + self.school_class = school_class + +class Teacher(People): + def __init__(self, name, patronymic, surname, subject): + People.__init__(self, name, patronymic, surname) + self.subject = subject + + +class Class_rooms: + def __init__(self, class_room, teachers): + self.class_room = class_room + self.teachersdict = {t.subject: t for t in teachers} + + +if __name__ == '__main__': + teachers = [Teacher('Глеб', 'Глебович', 'Глебов', 'Химия'), + Teacher('Влад', 'Владович', 'Владов', 'Биология'), + Teacher('Валя', 'Валинтинович', 'Валентинов', 'География'), + Teacher('Николай', 'Николаевич', 'Николаев', 'Физика'), + Teacher('Василий', 'Васильевич', 'Васин', 'История')] + classes = [Class_rooms('10 А', [teachers[0], teachers[1], teachers[2]]), + Class_rooms('7 Б', [teachers[1], teachers[3], teachers[4]]), + Class_rooms('9 А', [teachers[3], teachers[1], teachers[0]])] + parents = [People('Никита', 'Никитич', 'Никитин'), + People('Светлана', 'Савельевна', 'Семенова'), + People('Роман', 'Романович', 'Романов'), + People('Дмитрий', 'Дмитриевич', 'Дмитриев'), + People('Сергей', 'Сергеевич', 'Сергеев'), + People('Юлия', 'Сергеевна', 'Сергеева')] + students = [Student('Влад', 'Васильевич', 'Васин', parents[0], parents[1], classes[0]), + Student('Ольга', 'Романова', 'Романова', parents[2], parents[3], classes[1]), + Student('Александр', 'Сергеевич', 'Сергеев', parents[4], parents[5], classes[2])] + print('Список классов в школе: ') + for f in classes: + print(f.class_room) + + for f in classes: + print('Учителя, преподающие в {} классе:'.format(f.class_room)) + for teacher in classes[0].teachersdict.values(): + print(teacher.get_full_name()) + for f in classes: + print("Ученики в классе {}:".format(f.class_room)) + for st in students: + print(st.get_short_name()) From 2f306cf9dd4f852400b3b9410f31e858d4ee6854 Mon Sep 17 00:00:00 2001 From: Gasby <4226793@gmail.com> Date: Thu, 5 Sep 2019 11:33:33 +0300 Subject: [PATCH 12/13] no message --- lesson07/home_work/loto.py | 215 +++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index 5ea6ad844..229f975f8 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -57,3 +57,218 @@ модуль random: http://docs.python.org/3/library/random.html """ +import random + + +class Card: + def __init__(self, rows_amount=3, cols_amount=9, nums_per_row=5, max_num=90): + self._rows_amount = rows_amount + self._cols_amount = cols_amount + self._nums_per_row = nums_per_row + self._max_num = max_num + + +class CommonCard(Card): + counter = 0 + + def __init__(self): + Card.__init__(self, rows_amount=3, cols_amount=9, nums_per_row=5, max_num=90) + self._title = ' ' + self._card = [['' for _ in range(self._cols_amount)] for _ in range(self._rows_amount)] + self._nums = random.sample(range(1, self._max_num + 1), self._nums_per_row * self._rows_amount) + self._pixels = self._cols_amount * 3 - 1 + self.__class__.counter += 1 + self._nums_for_game = self._nums[:] + + @classmethod + def get_created_instances_count(cls): + return cls.counter + + def __del__(self): + self.__class__.counter -= 1 + + @property + def nums(self): + return len(self._nums_for_game) + + def _header(self): + return '{:-^{}}'.format(self._title, self._pixels) + + def _mapping_card(self): + for row in self._card: + while row.count(True) != self._nums_per_row: + i = random.randrange(self._cols_amount) + if not row[i]: + row[i] = True + + def _filling_card_with_numbers(self): + for i, row in enumerate(self._card): + tmp = sorted(self._nums[i * self._nums_per_row:(i + 1) * self._nums_per_row], reverse=True) + for j, item in enumerate(row): + if item: + self._card[i][j] = tmp.pop() + + def __str__(self): + res = list() + res.append(self._header()) + for row in self._card: + res.append(' '.join(['{:<2}'.format(x) for x in row])) + res.append('-' * self._pixels) + return '\n'.join(res) + + def modify_card(self, num): + i = int(self._nums.index(num) / self._nums_per_row) + self._card[i][self._card[i].index(num)] = '-' + self._nums_for_game.remove(num) + + def check_num(self, num): + return num in self._nums + + def create_card(self): + self._mapping_card() + self._filling_card_with_numbers() + + +class PlayerCard(CommonCard): + def __init__(self, rows_amount=3, cols_amount=9, nums_per_row=5, max_num=90): + CommonCard.__init__(self) + self._name = 'Игрок {}'.format(self.get_created_instances_count()) + self._title = ' ' + 'Карточка игрока {}'.format(self.get_created_instances_count()) + ' ' + + @property + def name(self): + return self._name + + +class ComputerCard(CommonCard): + def __init__(self, rows_amount=3, cols_amount=9, nums_per_row=5, max_num=90): + CommonCard.__init__(self) + self._title = ' ' + 'Карточка компьютера' + ' ' + self._name = 'Компьютер' + + @property + def name(self): + return self._name + + +class Game(Card): + def __init__(self): + Card.__init__(self, rows_amount=3, cols_amount=9, nums_per_row=5, max_num=90) + self._do = ['1', '2', 'exit'] + self._menu = '1 - играть с компьютером\n2 - играть с другом\nexit - выйти из игры' + self._unit1 = None + self._unit2 = None + + def _init_game(self): + answer = '' + while answer not in self._do: + print(self._menu) + answer = input() + if answer == '1': + self._init_game_pve() + elif answer == '2': + self._init_game_pvp() + else: + exit() + + def _create_cards(self): + self._unit1.create_card() + self._unit2.create_card() + + def _init_game_pve(self): + self._unit1 = PlayerCard() + self._unit2 = ComputerCard() + self._create_cards() + + def _init_game_pvp(self): + self._unit1 = PlayerCard() + self._unit2 = PlayerCard() + self._create_cards() + + def _get_random_num(self): + random_numbers = random.sample(range(1, self._max_num + 1), self._max_num) + for i in random_numbers: + yield i, self._max_num - random_numbers.index(i) - 1 + + def _check_answer(self, unit, num, answer): + if answer == 'exit': + print('Приходите еще поиграть') + exit() + elif answer != 'y' and answer != 'n': + self._check_answer(unit, num, input('Зачеркнуть цифру? (y/n)')) + elif answer == 'y' and unit.check_num(num): + unit.modify_card(num) + return 0 + elif answer == 'n' and not unit.check_num(num): + return 0 + elif answer == 'y' and not unit.check_num(num): + print('{} нет на вашей карточке.'.format(num), end=' ') + return 1 + elif answer == 'n' and unit.check_num(num): + print('{} на вашей карточке.'.format(num), end=' ') + return 1 + else: + print('Что-то пошло не так', answer) + return 1 + + def _clean(self): + del self._unit1 + del self._unit2 + + def _lets_play(self): + num_generator = self._get_random_num() + gen_res = next(num_generator) + num = gen_res[0] + left = gen_res[1] + + while self._unit1.nums and self._unit2.nums: + print(self._unit1) + print(self._unit2) + + print('Новый бочонок: {} (осталось {})'.format(num, left)) + print('Ходит {}'.format(self._unit1.name)) + + if self._check_answer(self._unit1, num, input('Зачеркнуть цифру? (y/n)')): + if type(self._unit2) == PlayerCard: + return '{}, к сожалению, вы проиграли.\nПоздравляем, {}! Вы победили'.format(self._unit1.name, + self._unit2.name) + else: + return '{}, к сожалению, вы проиграли.'.format(self._unit1.name) + if type(self._unit2) == PlayerCard: + print('Ходит {}'.format(self._unit2.name)) + if self._check_answer(self._unit2, num, input('Зачеркнуть цифру? (y/n)')): + return '{}, к сожалению, вы проиграли.\nПоздравляем, {}! Вы победили'.format(self._unit2.name, + self._unit1.name) + else: + if self._unit2.check_num(num): + self._unit2.modify_card(num) + + gen_res = next(num_generator) + num = gen_res[0] + left = gen_res[1] + + if not self._unit1.nums and not self._unit2.nums: + return 'Ничья!' + elif self._unit2.nums: + return 'Поздравляем, {}, вы победили!'.format(self._unit1.name) + else: + if type(self._unit2) == PlayerCard: + return 'Поздравляем, {}, вы победили!'.format(self._unit2.name) + else: + return 'Компьютер успел первым. Попробуйте еще раз.' + + def main(self): + while True: + answer = input('Сыграем? (y/n)') + if answer == 'y': + self._init_game() + print(self._lets_play()) + self._clean() + elif answer == 'n': + print('До свидания!') + return + + +if __name__ == '__main__': + game = Game() + game.main() \ No newline at end of file From 5a11c012a333958fd08cf28fcf24e736e3b0fc48 Mon Sep 17 00:00:00 2001 From: Gasby <4226793@gmail.com> Date: Fri, 6 Sep 2019 18:35:21 +0300 Subject: [PATCH 13/13] no message --- lesson08/home_work/export_openweather.py | 88 ++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/lesson08/home_work/export_openweather.py b/lesson08/home_work/export_openweather.py index 0ae937519..7d558f266 100644 --- a/lesson08/home_work/export_openweather.py +++ b/lesson08/home_work/export_openweather.py @@ -20,5 +20,93 @@ """ +import sys import csv import json +import sqlite3 +import datetime + +db_filename = 'weather.db' + + +def export_csv(filename, city): + encoding = 'utf-8' + csv.register_dialect('excel-semicolon', delimiter=';') + sql_str = "select (Select city from cites where weath_city.idcity = cites.id) as cityname,(Select country from countres where weath_city.id_country = countres.id) as countryname,data,w_day,w_night from weath_city where idcity=" + str( + city) + if city == 0: + sql_str = "select (Select city from cites where weath_city.idcity = cites.id) as cityname,(Select country from countres where weath_city.id_country = countres.id) as countryname,data,w_day,w_night from weath_city" + + with open(filename, 'w', encoding=encoding) as csvfile: + writer = csv.writer(csvfile, dialect='excel-semicolon') + writer.writerow(('Город', 'Страна', 'Дата', 'Темп. днем', 'Темп. ночью')) + with sqlite3.connect(db_filename) as conn: + cur = conn.cursor() + for row in cur.execute(sql_str): + writer.writerow((row[0], row[1], row[2], row[3], row[4])) + conn.close + + +def export_json(filename, city): + sql_str = "select (Select city from cites where weath_city.idcity = cites.id) as cityname,(Select country from countres where weath_city.id_country = countres.id) as countryname,data,w_day,w_night from weath_city where idcity=" + str( + city) + if city == 0: + sql_str = "select (Select city from cites where weath_city.idcity = cites.id) as cityname,(Select country from countres where weath_city.id_country = countres.id) as countryname,data,w_day,w_night from weath_city" + f = open(filename, 'w') + f.write('{') + with sqlite3.connect(db_filename) as conn: + cur = conn.cursor() + for row in cur.execute(sql_str): + rjson = "city:{0},country:{1},data:{2},day:{3},night:{4}".format(row[0], row[1], row[2], row[3], row[4]) + f.write("{" + rjson + "},") + conn.close + f.write("{export:" + str(datetime.date.today()) + '}') + f.write('}') + f.close() + + +def exists_city(city): + b = True + with sqlite3.connect(db_filename) as conn: + cur = conn.cursor() + cur.execute("select * from cites where id=" + str(city)) + row = cur.fetchone() + if row == None: + b = False + else: + b = True + conn.close() + return b + + +def main(): + if len(sys.argv) > 4 or len(sys.argv) < 2: + print('usage: python export_weather.py {--csv | --json} file [<город>]') + sys.exit(1) + option = sys.argv[1] + filename = sys.argv[2] + city = 0 + if len(sys.argv) == 4: + city = sys.argv[3] + + if city != 0: + if exists_city(city) == False: + print('City not found!') + sys.exit(1) + if option == '--csv': + export_csv(filename, city) + elif option == '--json': + export_json(filename, city) + else: + print('unknown option: ' + option) + sys.exit(1) + + # city = 3917 - код города белфаст + # print(exists_city(city)) + # filename = "exp39.json" + # export_csv(filename,city) + # export_json(filename,city) + + +if __name__ == '__main__': + main()