From f0fdd2122673612b215fce94bc0753097eb08ab2 Mon Sep 17 00:00:00 2001 From: pablo Date: Sat, 18 Feb 2017 23:12:39 +0300 Subject: [PATCH 01/19] =?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: Thu, 26 Jul 2018 20:39:01 +0700 Subject: [PATCH 03/19] =?UTF-8?q?=D0=94=D0=BE=D0=BC=D0=B0=D1=88=D0=BD?= =?UTF-8?q?=D0=B5=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=A3=D1=80=D0=BE=D0=BA1=20easy=20=D0=B8=20normal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hw01_easy.ipynb | 140 +++++++++++++++++++++++++++++++++++++++ hw01_normal.ipynb | 163 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 303 insertions(+) create mode 100644 hw01_easy.ipynb create mode 100644 hw01_normal.ipynb diff --git a/hw01_easy.ipynb b/hw01_easy.ipynb new file mode 100644 index 000000000..ea4abcdbe --- /dev/null +++ b/hw01_easy.ipynb @@ -0,0 +1,140 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "__author__ = 'Вторушин Марк Викторович'\n", + "\n", + "# Задача-1: Дано произвольное целое число, вывести поочередно цифры исходного числа\n", + "\n", + "# код пишем тут...\n", + "\n", + "# Задача-2: Исходные значения двух переменных запросить у пользователя.\n", + "# Поменять значения переменных местами. Вывести новые значения на экран.\n", + "# Не нужно решать задачу так:\n", + "# print(\"a = \", b, \"b = \", a) - это неправильное решение!\n", + "\n", + "# Задача-3: Запросите у пользователя его возраст.\n", + "# Если ему есть 18 лет, выведите: \"Доступ разрешен\",\n", + "# иначе \"Извините, пользование данным ресурсом только с 18 лет\"\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Решение задачи №1" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Введите любое целое число:2525\n", + "2\n", + "5\n", + "2\n", + "5\n" + ] + } + ], + "source": [ + "print(*list(input('Введите любое целое число:')),sep = '\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Решение задачи №2" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Введите переменную А: 7\n", + "Введите переменную В: 37\n", + "Меняем местами значение А и В\n", + "Теперь значение А: 37\n", + "А значение В: 7\n" + ] + } + ], + "source": [ + "a = input('Введите переменную А: ')\n", + "b = input('Введите переменную В: ')\n", + "print ('Меняем местами значение А и В')\n", + "a,b = b,a\n", + "print ('Теперь значение А: ', a)\n", + "print ('А значение В: ', b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Решение задачи №3" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Введите свой возраст: 17\n", + "Извините, пользование данным ресурсом только с 18 лет\n" + ] + } + ], + "source": [ + "age = int(input('Введите свой возраст: '))\n", + "access = 0 \n", + "if age >= 18: \n", + " print('Доступ разрешен')\n", + " access = 1 \n", + "else:\n", + " print('Извините, пользование данным ресурсом только с 18 лет')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/hw01_normal.ipynb b/hw01_normal.ipynb new file mode 100644 index 000000000..1c2008ec7 --- /dev/null +++ b/hw01_normal.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "__author__ = 'Вторушин Марк Викторович'\n", + "\n", + "# Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа.\n", + "# Например, дается x = 58375.\n", + "# Нужно вывести максимальную цифру в данном числе, т.е. 8.\n", + "# Подразумевается, что мы не знаем это число заранее.\n", + "# Число приходит в виде целого беззнакового.\n", + "\n", + "\n", + "# Задача-2: Исходные значения двух переменных запросить у пользователя.\n", + "# Поменять значения переменных местами. Вывести новые значения на экран.\n", + "# Решите задачу, используя только две переменные.\n", + "\n", + "\n", + "# Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида\n", + "# ax2 + bx + c = 0.\n", + "# Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math\n", + "# import math\n", + "# math.sqrt(4) - вычисляет корень числа 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Решение задачи №1" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Введите целое число: 8537\n", + "Самое большое число: 8\n" + ] + } + ], + "source": [ + "z = 0\n", + "y = 0\n", + "x = int(input('Введите целое число: ', ))\n", + "while x >= 1:\n", + " x = x / 10\n", + " z = (x - int(x)) * 10\n", + " if z > y:\n", + " y = int(z)\n", + " else:\n", + " pass\n", + " int(x)\n", + "print(\"Самое большое число: \", y)\n", + "\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Решение задачи №2" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Введите переменную А: 1\n", + "Введите переменную В: 8\n", + "Меняем местами значение А и В\n", + "Теперь значение А: 8\n", + "А значение В: 1\n" + ] + } + ], + "source": [ + "a = input('Введите переменную А: ')\n", + "b = input('Введите переменную В: ')\n", + "print ('Меняем местами значение А и В')\n", + "a,b = b,a\n", + "print ('Теперь значение А: ', a)\n", + "print ('А значение В: ', b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Решение задачи №3" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Введите переменную А: 8\n", + "Введите переменную В: 4\n", + "Введите переменную C: 2\n", + "Корней нет\n" + ] + } + ], + "source": [ + "import math\n", + "a = float(input('Введите переменную А: '))\n", + "b = float(input('Введите переменную В: '))\n", + "c = float(input('Введите переменную C: ')) \n", + "d = b**2 - 4 * a * c\n", + "if d > 0:\n", + " x1 = (-b + math.sqrt(d)) / (2 * a)\n", + " x2 = (-b - math.sqrt(d)) / (2 * a)\n", + " print(\"x1 = %.2f \\nx2 = %.2f\" % (x1, x2))\n", + "elif d == 0:\n", + " x = -b / (2 * a)\n", + " print(\"x = %.2f\" % x)\n", + "else:\n", + " print(\"Корней нет\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 6eef81166b0b4dcccf20c3a9cf9d7bae507e5765 Mon Sep 17 00:00:00 2001 From: Bulat Gaifullin Date: Fri, 28 Sep 2018 19:47:57 +0300 Subject: [PATCH 04/19] 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 0a68728d71ddef32213e287b77c4bf69849ffd90 Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 14 Feb 2019 14:18:23 +0300 Subject: [PATCH 05/19] Complete lesson 1 (KSP) --- lesson01/home_work/hw01_easy.py | 43 +++++++++++++++++++++++++-- lesson01/home_work/hw01_hard.py | 8 ++++- lesson01/home_work/hw01_normal.py | 49 ++++++++++++++++++++++++++++++- 3 files changed, 96 insertions(+), 4 deletions(-) diff --git a/lesson01/home_work/hw01_easy.py b/lesson01/home_work/hw01_easy.py index f927b0b06..82e0f6d88 100644 --- a/lesson01/home_work/hw01_easy.py +++ b/lesson01/home_work/hw01_easy.py @@ -1,5 +1,5 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Кашурин Сергей Петрович' # Задача-1: Дано произвольное целое число (число заранее неизвестно). # Вывести поочередно цифры исходного числа (порядок вывода цифр неважен). @@ -7,8 +7,32 @@ # * постарайтесь решить задачу с применением арифметики и цикла while; # * при желании решите задачу с применением цикла for. -# код пишем тут... +# Решение 1 +# import random +# rnd = random.randrange(0, 99999) +# +# print(rnd) +# +# flag = True +# +# while flag: +# a = rnd % 10 +# if a: +# rnd = rnd // 10 +# print(a) +# else: +# flag = False +# Решение 2 +# import random +# rnd = random.randrange(0, 99999) +# +# print(rnd) +# +# for i in str(rnd): +# a = rnd % 10 +# print(a) +# rnd = rnd // 10 # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. @@ -18,7 +42,22 @@ # Не нужно решать задачу так: # print("a = ", b, "b = ", a) - это неправильное решение! +# Решение 1 +# a = int(input("Введите первое число: ")) +# b = int(input("Введите второе число: ")) +# +# a = a + b +# b = a - b +# a = a - b +# +# print(a,b) # Задача-3: Запросите у пользователя его возраст. # Если ему есть 18 лет, выведите: "Доступ разрешен", # иначе "Извините, пользование данным ресурсом только с 18 лет" +a = int(input("Введите Ваш возраст: ")) + +if a > 17: + print("Доступ разрешен") +else: + print("Извините, пользование данным ресурсом только с 18 лет") \ No newline at end of file diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index 7df268664..3f9864ab7 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,9 @@ # если точно известно, что её значение не изменялось? # Подсказка: это значение точно есть ;) +import math + +a = math.inf +if a == a**2 and a == a*2 and a > 999999: + print("True") + diff --git a/lesson01/home_work/hw01_normal.py b/lesson01/home_work/hw01_normal.py index 991724e9a..1ddf93b00 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. +# Решение 1 +# print(max(str(58375))) + +# Решение 2 +# x = 58375 +# x_str = str(x) +# x_max = int(x_str[0]) +# +# for i in x_str: +# if x_max < int(i): +# x_max = int(i) +# print(x_max) + # Задача-2: Исходные значения двух переменных запросить у пользователя. # Поменять значения переменных местами. Вывести новые значения на экран. @@ -18,6 +31,23 @@ # * постарайтесь сделать решение через действия над числами; # * при желании и понимании воспользуйтесь синтаксисом кортежей Python. +# Решение 1 +# a = int(input("Введите первое число: ")) +# b = int(input("Введите второе число: ")) +# +# a = a + b +# b = a - b +# a = a - b +# +# print(a,b) + +# Решение 2 +# a = int(input("Введите первое число: ")) +# b = int(input("Введите второе число: ")) +# +# a, b = b, a +# +# print(a,b) # Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида # ax² + bx + c = 0. @@ -25,3 +55,20 @@ # Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math: # import math # math.sqrt(4) - вычисляет корень числа 4 + +# Решение 1 +import math +a = int(input("Введите A: ")) +b = int(input("Введите B: ")) +c = int(input("Введите C: ")) + +# Вычисляем дискриминант +d = (b * b) - (4 * a * c) + +if d == 0: + print("X1 %.2f" % (-b / (2 * a))) +elif d > 0: + print("X1 %.2f" % ((-b + math.sqrt(d)) / (2 * a))) + print("X2 %.2f" % ((-b - math.sqrt(d)) / (2 * a))) +elif d < 0: + print("Корней нет") From c1c12d0dcc6eb5d2a991e8cab70f1e21d037f647 Mon Sep 17 00:00:00 2001 From: Sergey Date: Mon, 18 Feb 2019 17:50:41 +0300 Subject: [PATCH 06/19] Lesson 2 (KSP) --- lesson02/home_work/hw02_easy.py | 18 ++++++++ lesson02/home_work/hw02_hard.py | 68 +++++++++++++++++++++++++--- lesson02/home_work/hw02_normal.py | 74 +++++++++++++++++++++++++++++++ 3 files changed, 153 insertions(+), 7 deletions(-) diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index ed4447e50..42575ed77 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -13,13 +13,31 @@ # Подсказка: воспользоваться методом .format() +# Решение 1 +# fruits = ["яблоко", "банан", "киви", "арбуз"] +# for i in range(len(fruits)): +# print(i + 1, "{:>10}".format(fruits[i])) # Задача-2: # Даны два произвольные списка. # Удалите из первого списка элементы, присутствующие во втором списке. +# Решение 1 +# l1 = [1, 2, 3, 4, 5, 6] +# l2 = [2, 4, 6] +# +# l1 = list(set(l1) - set(l2)) +# +# print(l1) # Задача-3: # Дан произвольный список из целых чисел. # Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: # если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. + +# Решение 1 +lst = [i for i in range(10)] +print(lst) + +rez = list(map(lambda x: x / 4 if x % 2 == 0 else x * 2, lst)) +print(rez) diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py index c96843184..c0af91d9f 100644 --- a/lesson02/home_work/hw02_hard.py +++ b/lesson02/home_work/hw02_hard.py @@ -1,10 +1,19 @@ # Задание-1: уравнение прямой вида y = kx + b задано в виде строки. # Определить координату y точки с заданной координатой x. -equation = 'y = -12x + 11111140.2121' -x = 2.5 +# equation = 'y = -12x + 11111140.2121' +# x = 2.5 # вычислите и выведите y +# Решение 1 +# lst = equation.split(" ") +# +# a1 = int(lst[2][:-1]) +# a2 = float(lst[4]) +# +# y = (a1 * x) + a2 +# +# print(y) # Задание-2: Дата задана в виде строки формата 'dd.mm.yyyy'. # Проверить, корректно ли введена дата. @@ -17,13 +26,29 @@ # (т.е. 2 символа для дня, 2 - для месяца, 4 - для года) # Пример корректной даты -date = '01.11.1985' +# date = '01.11.1985' # Примеры некорректных дат -date = '01.22.1001' -date = '1.12.1001' -date = '-2.10.3001' +# date = '01.22.1001' +# date = '1.12.1001' +# date = '-2.10.3001' +# Решение 1 +# date = '18.02.2019' +# +# +# def date_is_corrent(date): +# flag = False +# lst = str(date).split(".") +# print(lst) +# if len(lst[0]) == 2 and len(lst[1]) == 2 and len(lst[2]) == 4: +# if 1 <= int(lst[0]) <= 31 and 1 <= int(lst[1]) <= 12 and 1 <= int(lst[2]) <= 9999: +# if int(lst[0]) > 0 and int(lst[1]) > 0: +# flag = True +# return flag +# +# +# print(date_is_corrent(date)) # Задание-3: "Перевёрнутая башня" (Задача олимпиадного уровня) # @@ -53,4 +78,33 @@ # Выход: 6 2 # # Вход: 11 -# Выход: 5 3 \ No newline at end of file +# Выход: 5 + +# Решение 1 + +# room_number = int(input("Введите номер комнаты:")) +# +# floor = 1 +# room = 1 +# +# answer_floor = 0 +# answer_room = 0 +# +# while room_number > 0: +# +# for current_floor in range(floor): +# answer_floor += 1 +# +# for current_room in range(room): +# room_number -= 1 +# +# if room_number == 0: +# answer_room = current_room + 1 +# break +# +# if room_number == 0: +# break +# floor += 1 +# room += 1 +# +# print(answer_floor, answer_room) diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index 3acfaabb6..37b09273b 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -5,17 +5,80 @@ # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] +# Решение 1 +# from math import sqrt +# +# lst = [2, -5, 8, 9, -25, 25, 4] +# lst2 = [] +# +# for i in range(len(lst)): +# try: +# m = sqrt(lst[i]) +# except: +# pass +# else: +# if m.is_integer(): +# lst2.append(int(m)) +# +# print(lst2) # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. # Склонением пренебречь (2000 года, 2010 года) +# Решение 1 +# days = { +# "01": "первое", +# "02": "второе", +# "03": "третье", +# "04": "четвертое", +# "05": "пятое", +# "06": "шестое", +# "07": "седьмое", +# "08": "восьмое", +# "09": "девятое", +# "10": "десятое", +# "11": "одиннадцатое", +# "12": "двинадцатое", +# "13": "тринадцатое", +# } +# months = { +# "01": "января", +# "02": "февраля", +# "03": "марта", +# "04": "апреля", +# "05": "мая", +# "06": "июня", +# "07": "июля", +# "08": "августа", +# "09": "сентября", +# "10": "октября", +# "11": "ноября", +# "12": "декабря" +# } +# +# sample = "02.11.2013".split(".") +# +# if sample[0] in days: print(days[sample[0]], end=" ") +# if sample[1] in months: print(months[sample[1]], end=" ") +# +# print(sample[2] + " года", end="") # Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами # в диапазоне от -100 до 100. В списке должно быть n - элементов. # Подсказка: # для получения случайного числа используйте функцию randint() модуля random +# Решение 1 +# col = int(input("Введите размер списка:")) +# +# +# def list_generator(a): +# from random import randint +# lst = [] +# for i in range(a): +# lst.append(randint(-100, 100)) +# return lst # Задача-4: Дан список, заполненный произвольными целыми числами. # Получите новый список, элементами которого будут: @@ -23,3 +86,14 @@ # например, lst = [1, 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 2, 4, 5, 6] # б) элементы исходного списка, которые не имеют повторений: # например, lst = [1 , 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 4, 6] + +# Решение 1 +source = [1, 2, 4, 5, 6, 2, 5, 2] +lst = set(source) +print(lst) + +lst2 = [] +for i in lst: + if source.count(i) == 1: + lst2.append(i) +print(lst2) From 24e870189ca0163b716704caf6029fb51a07bbf3 Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 21 Feb 2019 17:23:19 +0300 Subject: [PATCH 07/19] Lesson 3 is done --- lesson03/home_work/hw03_easy.py | 32 ++++++++++------- lesson03/home_work/hw03_hard.py | 60 +++++++++++++++++++++++++++++++ lesson03/home_work/hw03_normal.py | 44 ++++++++++++++++++++--- 3 files changed, 119 insertions(+), 17 deletions(-) diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index 63d13f646..f748955fb 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -4,13 +4,15 @@ # Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0). # Для решения задачи не используйте встроенные функции и функции из модуля math. -def my_round(number, ndigits): - pass +# def my_round(number, count): +# number = (number * (10 ** count) + 0.41) // 1 +# return number / (10 ** count) -print(my_round(2.1234567, 5)) -print(my_round(2.1999967, 5)) -print(my_round(2.9999967, 5)) + +# print(my_round(2.1234567, 5)) +# print(my_round(2.1999967, 5)) +# print(my_round(2.9999967, 5)) # Задание-2: @@ -19,10 +21,16 @@ def my_round(number, ndigits): # Билет считается счастливым, если сумма его первых и последних цифр равны. # !!!P.S.: функция не должна НИЧЕГО print'ить -def lucky_ticket(ticket_number): - pass - - -print(lucky_ticket(123006)) -print(lucky_ticket(12321)) -print(lucky_ticket(436751)) +# Решение 1 +# def lucky_ticket(ticket_number): +# ticket_number_str = str(ticket_number) +# ticket_number_lst = [int(i) for i in ticket_number_str] +# if len(ticket_number_str) > 5 and (sum(ticket_number_lst[:3]) == sum(ticket_number_lst[-3::])): +# return True +# else: +# return False +# +# +# print(lucky_ticket(123006)) +# print(lucky_ticket(12321)) +# print(lucky_ticket(436751)) diff --git a/lesson03/home_work/hw03_hard.py b/lesson03/home_work/hw03_hard.py index a8c7f668a..214c454ab 100644 --- a/lesson03/home_work/hw03_hard.py +++ b/lesson03/home_work/hw03_hard.py @@ -18,6 +18,38 @@ # они получают удвоенную ЗП, пропорциональную норме. # Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" +# Решение 1 +# Добавляем информацию о количестве отработанных часов из второго списка в первый +# def smart_union(main_lst, etc_lst): +# tmp = [] +# for i in main_lst: +# for j in etc_lst: +# if i[1] in j[1]: +# tmp.append(i + j[2:]) +# break +# return tmp +# +# +# with open("data/workers", encoding="utf-8", mode="r") as tmp: +# salary_lst = [i.split() for i in tmp][1:] +# +# with open("data/hours_of", encoding="utf-8", mode="r") as tmp: +# worked_hours_lst = [i.split() for i in tmp][1:] +# +# union_list = smart_union(salary_lst, worked_hours_lst) +# +# print("{:<15} {:<15} {:<15} {:<15} {:<15} {:<15} {:<15}".format("Имя", "Отчество", "Оклад 100%", "Должность", "Норма ч.", "По факту ч.", "Выплатят")) +# +# for worker in union_list: +# salary, hours_norm, hours_work = int(worker[2]), int(worker[4]), int(worker[5]) +# +# work = hours_work - hours_norm +# if work > 0: +# price = salary + (2 * (salary / hours_norm) * (hours_work - hours_norm)) +# else: +# price = salary + (salary / hours_norm) * (hours_work - hours_norm) +# print("{:<15} {:<15} {:<15} {:<15} {:<15} {:<15} {:<15.2f}".format(worker[0], worker[1], worker[2], worker[3], worker[4], worker[5], price)) + # Задание-3: # Дан файл ("data/fruits") со списком фруктов. @@ -31,3 +63,31 @@ # Подсказка: # Чтобы получить список больших букв русского алфавита: # print(list(map(chr, range(ord('А'), ord('Я')+1)))) + +# Решение 1 +# def write_file(lst, letter): +# new_file = open("data/fruits_{}.txt".format(letter), encoding="utf-8", mode="w") +# +# for line in lst: +# new_file.write(line + "\n") +# new_file.close() +# +# tmp = [] +# +# with open("data/fruits.txt", encoding="utf-8", mode="r") as file: +# sorted_lst = sorted(list(set([i.rstrip() for i in file]))[1:]) +# +# first_letter = sorted_lst[0][:1] +# +# for x in sorted_lst: +# if x[:1] == first_letter: +# tmp.append(x) +# else: +# write_file(tmp, first_letter) +# +# tmp = [] +# +# first_letter = x[:1] +# tmp.append(x) +# else: +# write_file(tmp, first_letter) diff --git a/lesson03/home_work/hw03_normal.py b/lesson03/home_work/hw03_normal.py index 38ac1fcc1..c15fe1650 100644 --- a/lesson03/home_work/hw03_normal.py +++ b/lesson03/home_work/hw03_normal.py @@ -2,8 +2,18 @@ # Напишите функцию, возвращающую ряд Фибоначчи с n-элемента до m-элемента. # Первыми элементами ряда считать цифры 1 1 -def fibonacci(n, m): - pass + +# Решение 1 +# def fibonacci(n, m): +# start = n +# lst = [i for i in range(n, m + 3)] +# while start < m: +# lst[start + 2] = lst[start] + lst[start + 1] +# start += 1 +# print(lst) + + +# fibonacci(1, 10) # Задача-2: # Напишите функцию, сортирующую принимаемый список по возрастанию. @@ -11,17 +21,41 @@ def fibonacci(n, m): # Для решения данной задачи нельзя использовать встроенную функцию и метод sort() -def sort_to_max(origin_list): - pass +# def sort_to_max(origin_list): +# for i in range(len(origin_list) - 1): +# for j in range(len(origin_list) - i - 1): +# if origin_list[j] > origin_list[j + 1]: +# origin_list[j], origin_list[j + 1] = origin_list[j + 1], origin_list[j] +# print(origin_list) + -sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) +# sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) # Задача-3: # Напишите собственную реализацию стандартной функции filter. # Разумеется, внутри нельзя использовать саму функцию filter. +# def unclass_filter(func, value): +# f = func +# return f(value) + + +# hlp = [0, 50, 100, -1, 9, 4] +# print(unclass_filter(min, hlp)) + # Задача-4: # Даны четыре точки А1(х1, у1), А2(x2 ,у2), А3(x3 , у3), А4(х4, у4). # Определить, будут ли они вершинами параллелограмма. +# A = {"x1": 2, "y1": -1} +# B = {"x2": 5, "y2": -3} +# +# C = {"x3": -2, "y3": 11} +# D = {"x4": -5, "y4": 13} +# +# ifEdgeParallelogram = False +# if (A["y1"] - D["y4"] == B["y2"] - C["y3"]) and (B["x2"] - A["x1"] == C["x3"] - D["x4"]): +# ifEdgeParallelogram = True +# +# print(ifEdgeParallelogram) From 468d9682854b3bdc28fe757e69164d7f55924542 Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 21 Feb 2019 18:20:38 +0300 Subject: [PATCH 08/19] Revert "Lesson 3 is done" This reverts commit 24e870189ca0163b716704caf6029fb51a07bbf3. --- lesson03/home_work/hw03_easy.py | 32 +++++++---------- lesson03/home_work/hw03_hard.py | 60 ------------------------------- lesson03/home_work/hw03_normal.py | 44 +++-------------------- 3 files changed, 17 insertions(+), 119 deletions(-) diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index f748955fb..63d13f646 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -4,15 +4,13 @@ # Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0). # Для решения задачи не используйте встроенные функции и функции из модуля math. +def my_round(number, ndigits): + pass -# def my_round(number, count): -# number = (number * (10 ** count) + 0.41) // 1 -# return number / (10 ** count) - -# print(my_round(2.1234567, 5)) -# print(my_round(2.1999967, 5)) -# print(my_round(2.9999967, 5)) +print(my_round(2.1234567, 5)) +print(my_round(2.1999967, 5)) +print(my_round(2.9999967, 5)) # Задание-2: @@ -21,16 +19,10 @@ # Билет считается счастливым, если сумма его первых и последних цифр равны. # !!!P.S.: функция не должна НИЧЕГО print'ить -# Решение 1 -# def lucky_ticket(ticket_number): -# ticket_number_str = str(ticket_number) -# ticket_number_lst = [int(i) for i in ticket_number_str] -# if len(ticket_number_str) > 5 and (sum(ticket_number_lst[:3]) == sum(ticket_number_lst[-3::])): -# return True -# else: -# return False -# -# -# print(lucky_ticket(123006)) -# print(lucky_ticket(12321)) -# print(lucky_ticket(436751)) +def lucky_ticket(ticket_number): + pass + + +print(lucky_ticket(123006)) +print(lucky_ticket(12321)) +print(lucky_ticket(436751)) diff --git a/lesson03/home_work/hw03_hard.py b/lesson03/home_work/hw03_hard.py index 214c454ab..a8c7f668a 100644 --- a/lesson03/home_work/hw03_hard.py +++ b/lesson03/home_work/hw03_hard.py @@ -18,38 +18,6 @@ # они получают удвоенную ЗП, пропорциональную норме. # Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" -# Решение 1 -# Добавляем информацию о количестве отработанных часов из второго списка в первый -# def smart_union(main_lst, etc_lst): -# tmp = [] -# for i in main_lst: -# for j in etc_lst: -# if i[1] in j[1]: -# tmp.append(i + j[2:]) -# break -# return tmp -# -# -# with open("data/workers", encoding="utf-8", mode="r") as tmp: -# salary_lst = [i.split() for i in tmp][1:] -# -# with open("data/hours_of", encoding="utf-8", mode="r") as tmp: -# worked_hours_lst = [i.split() for i in tmp][1:] -# -# union_list = smart_union(salary_lst, worked_hours_lst) -# -# print("{:<15} {:<15} {:<15} {:<15} {:<15} {:<15} {:<15}".format("Имя", "Отчество", "Оклад 100%", "Должность", "Норма ч.", "По факту ч.", "Выплатят")) -# -# for worker in union_list: -# salary, hours_norm, hours_work = int(worker[2]), int(worker[4]), int(worker[5]) -# -# work = hours_work - hours_norm -# if work > 0: -# price = salary + (2 * (salary / hours_norm) * (hours_work - hours_norm)) -# else: -# price = salary + (salary / hours_norm) * (hours_work - hours_norm) -# print("{:<15} {:<15} {:<15} {:<15} {:<15} {:<15} {:<15.2f}".format(worker[0], worker[1], worker[2], worker[3], worker[4], worker[5], price)) - # Задание-3: # Дан файл ("data/fruits") со списком фруктов. @@ -63,31 +31,3 @@ # Подсказка: # Чтобы получить список больших букв русского алфавита: # print(list(map(chr, range(ord('А'), ord('Я')+1)))) - -# Решение 1 -# def write_file(lst, letter): -# new_file = open("data/fruits_{}.txt".format(letter), encoding="utf-8", mode="w") -# -# for line in lst: -# new_file.write(line + "\n") -# new_file.close() -# -# tmp = [] -# -# with open("data/fruits.txt", encoding="utf-8", mode="r") as file: -# sorted_lst = sorted(list(set([i.rstrip() for i in file]))[1:]) -# -# first_letter = sorted_lst[0][:1] -# -# for x in sorted_lst: -# if x[:1] == first_letter: -# tmp.append(x) -# else: -# write_file(tmp, first_letter) -# -# tmp = [] -# -# first_letter = x[:1] -# tmp.append(x) -# else: -# write_file(tmp, first_letter) diff --git a/lesson03/home_work/hw03_normal.py b/lesson03/home_work/hw03_normal.py index c15fe1650..38ac1fcc1 100644 --- a/lesson03/home_work/hw03_normal.py +++ b/lesson03/home_work/hw03_normal.py @@ -2,18 +2,8 @@ # Напишите функцию, возвращающую ряд Фибоначчи с n-элемента до m-элемента. # Первыми элементами ряда считать цифры 1 1 - -# Решение 1 -# def fibonacci(n, m): -# start = n -# lst = [i for i in range(n, m + 3)] -# while start < m: -# lst[start + 2] = lst[start] + lst[start + 1] -# start += 1 -# print(lst) - - -# fibonacci(1, 10) +def fibonacci(n, m): + pass # Задача-2: # Напишите функцию, сортирующую принимаемый список по возрастанию. @@ -21,41 +11,17 @@ # Для решения данной задачи нельзя использовать встроенную функцию и метод sort() -# def sort_to_max(origin_list): -# for i in range(len(origin_list) - 1): -# for j in range(len(origin_list) - i - 1): -# if origin_list[j] > origin_list[j + 1]: -# origin_list[j], origin_list[j + 1] = origin_list[j + 1], origin_list[j] -# print(origin_list) - +def sort_to_max(origin_list): + pass -# sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) +sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) # Задача-3: # Напишите собственную реализацию стандартной функции filter. # Разумеется, внутри нельзя использовать саму функцию filter. -# def unclass_filter(func, value): -# f = func -# return f(value) - - -# hlp = [0, 50, 100, -1, 9, 4] -# print(unclass_filter(min, hlp)) - # Задача-4: # Даны четыре точки А1(х1, у1), А2(x2 ,у2), А3(x3 , у3), А4(х4, у4). # Определить, будут ли они вершинами параллелограмма. -# A = {"x1": 2, "y1": -1} -# B = {"x2": 5, "y2": -3} -# -# C = {"x3": -2, "y3": 11} -# D = {"x4": -5, "y4": 13} -# -# ifEdgeParallelogram = False -# if (A["y1"] - D["y4"] == B["y2"] - C["y3"]) and (B["x2"] - A["x1"] == C["x3"] - D["x4"]): -# ifEdgeParallelogram = True -# -# print(ifEdgeParallelogram) From 92119ebe8af754c37517a279a8ae229523d7fe2c Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 21 Feb 2019 18:20:44 +0300 Subject: [PATCH 09/19] Revert "Revert "Lesson 3 is done"" This reverts commit 468d9682854b3bdc28fe757e69164d7f55924542. --- lesson03/home_work/hw03_easy.py | 32 ++++++++++------- lesson03/home_work/hw03_hard.py | 60 +++++++++++++++++++++++++++++++ lesson03/home_work/hw03_normal.py | 44 ++++++++++++++++++++--- 3 files changed, 119 insertions(+), 17 deletions(-) diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index 63d13f646..f748955fb 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -4,13 +4,15 @@ # Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0). # Для решения задачи не используйте встроенные функции и функции из модуля math. -def my_round(number, ndigits): - pass +# def my_round(number, count): +# number = (number * (10 ** count) + 0.41) // 1 +# return number / (10 ** count) -print(my_round(2.1234567, 5)) -print(my_round(2.1999967, 5)) -print(my_round(2.9999967, 5)) + +# print(my_round(2.1234567, 5)) +# print(my_round(2.1999967, 5)) +# print(my_round(2.9999967, 5)) # Задание-2: @@ -19,10 +21,16 @@ def my_round(number, ndigits): # Билет считается счастливым, если сумма его первых и последних цифр равны. # !!!P.S.: функция не должна НИЧЕГО print'ить -def lucky_ticket(ticket_number): - pass - - -print(lucky_ticket(123006)) -print(lucky_ticket(12321)) -print(lucky_ticket(436751)) +# Решение 1 +# def lucky_ticket(ticket_number): +# ticket_number_str = str(ticket_number) +# ticket_number_lst = [int(i) for i in ticket_number_str] +# if len(ticket_number_str) > 5 and (sum(ticket_number_lst[:3]) == sum(ticket_number_lst[-3::])): +# return True +# else: +# return False +# +# +# print(lucky_ticket(123006)) +# print(lucky_ticket(12321)) +# print(lucky_ticket(436751)) diff --git a/lesson03/home_work/hw03_hard.py b/lesson03/home_work/hw03_hard.py index a8c7f668a..214c454ab 100644 --- a/lesson03/home_work/hw03_hard.py +++ b/lesson03/home_work/hw03_hard.py @@ -18,6 +18,38 @@ # они получают удвоенную ЗП, пропорциональную норме. # Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" +# Решение 1 +# Добавляем информацию о количестве отработанных часов из второго списка в первый +# def smart_union(main_lst, etc_lst): +# tmp = [] +# for i in main_lst: +# for j in etc_lst: +# if i[1] in j[1]: +# tmp.append(i + j[2:]) +# break +# return tmp +# +# +# with open("data/workers", encoding="utf-8", mode="r") as tmp: +# salary_lst = [i.split() for i in tmp][1:] +# +# with open("data/hours_of", encoding="utf-8", mode="r") as tmp: +# worked_hours_lst = [i.split() for i in tmp][1:] +# +# union_list = smart_union(salary_lst, worked_hours_lst) +# +# print("{:<15} {:<15} {:<15} {:<15} {:<15} {:<15} {:<15}".format("Имя", "Отчество", "Оклад 100%", "Должность", "Норма ч.", "По факту ч.", "Выплатят")) +# +# for worker in union_list: +# salary, hours_norm, hours_work = int(worker[2]), int(worker[4]), int(worker[5]) +# +# work = hours_work - hours_norm +# if work > 0: +# price = salary + (2 * (salary / hours_norm) * (hours_work - hours_norm)) +# else: +# price = salary + (salary / hours_norm) * (hours_work - hours_norm) +# print("{:<15} {:<15} {:<15} {:<15} {:<15} {:<15} {:<15.2f}".format(worker[0], worker[1], worker[2], worker[3], worker[4], worker[5], price)) + # Задание-3: # Дан файл ("data/fruits") со списком фруктов. @@ -31,3 +63,31 @@ # Подсказка: # Чтобы получить список больших букв русского алфавита: # print(list(map(chr, range(ord('А'), ord('Я')+1)))) + +# Решение 1 +# def write_file(lst, letter): +# new_file = open("data/fruits_{}.txt".format(letter), encoding="utf-8", mode="w") +# +# for line in lst: +# new_file.write(line + "\n") +# new_file.close() +# +# tmp = [] +# +# with open("data/fruits.txt", encoding="utf-8", mode="r") as file: +# sorted_lst = sorted(list(set([i.rstrip() for i in file]))[1:]) +# +# first_letter = sorted_lst[0][:1] +# +# for x in sorted_lst: +# if x[:1] == first_letter: +# tmp.append(x) +# else: +# write_file(tmp, first_letter) +# +# tmp = [] +# +# first_letter = x[:1] +# tmp.append(x) +# else: +# write_file(tmp, first_letter) diff --git a/lesson03/home_work/hw03_normal.py b/lesson03/home_work/hw03_normal.py index 38ac1fcc1..c15fe1650 100644 --- a/lesson03/home_work/hw03_normal.py +++ b/lesson03/home_work/hw03_normal.py @@ -2,8 +2,18 @@ # Напишите функцию, возвращающую ряд Фибоначчи с n-элемента до m-элемента. # Первыми элементами ряда считать цифры 1 1 -def fibonacci(n, m): - pass + +# Решение 1 +# def fibonacci(n, m): +# start = n +# lst = [i for i in range(n, m + 3)] +# while start < m: +# lst[start + 2] = lst[start] + lst[start + 1] +# start += 1 +# print(lst) + + +# fibonacci(1, 10) # Задача-2: # Напишите функцию, сортирующую принимаемый список по возрастанию. @@ -11,17 +21,41 @@ def fibonacci(n, m): # Для решения данной задачи нельзя использовать встроенную функцию и метод sort() -def sort_to_max(origin_list): - pass +# def sort_to_max(origin_list): +# for i in range(len(origin_list) - 1): +# for j in range(len(origin_list) - i - 1): +# if origin_list[j] > origin_list[j + 1]: +# origin_list[j], origin_list[j + 1] = origin_list[j + 1], origin_list[j] +# print(origin_list) + -sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) +# sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) # Задача-3: # Напишите собственную реализацию стандартной функции filter. # Разумеется, внутри нельзя использовать саму функцию filter. +# def unclass_filter(func, value): +# f = func +# return f(value) + + +# hlp = [0, 50, 100, -1, 9, 4] +# print(unclass_filter(min, hlp)) + # Задача-4: # Даны четыре точки А1(х1, у1), А2(x2 ,у2), А3(x3 , у3), А4(х4, у4). # Определить, будут ли они вершинами параллелограмма. +# A = {"x1": 2, "y1": -1} +# B = {"x2": 5, "y2": -3} +# +# C = {"x3": -2, "y3": 11} +# D = {"x4": -5, "y4": 13} +# +# ifEdgeParallelogram = False +# if (A["y1"] - D["y4"] == B["y2"] - C["y3"]) and (B["x2"] - A["x1"] == C["x3"] - D["x4"]): +# ifEdgeParallelogram = True +# +# print(ifEdgeParallelogram) From c7e696601038857c3ccb4785fd46a972d20ef2d6 Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 21 Feb 2019 18:20:49 +0300 Subject: [PATCH 10/19] Revert "Revert "Revert "Lesson 3 is done""" This reverts commit 92119ebe8af754c37517a279a8ae229523d7fe2c. --- lesson03/home_work/hw03_easy.py | 32 +++++++---------- lesson03/home_work/hw03_hard.py | 60 ------------------------------- lesson03/home_work/hw03_normal.py | 44 +++-------------------- 3 files changed, 17 insertions(+), 119 deletions(-) diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index f748955fb..63d13f646 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -4,15 +4,13 @@ # Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0). # Для решения задачи не используйте встроенные функции и функции из модуля math. +def my_round(number, ndigits): + pass -# def my_round(number, count): -# number = (number * (10 ** count) + 0.41) // 1 -# return number / (10 ** count) - -# print(my_round(2.1234567, 5)) -# print(my_round(2.1999967, 5)) -# print(my_round(2.9999967, 5)) +print(my_round(2.1234567, 5)) +print(my_round(2.1999967, 5)) +print(my_round(2.9999967, 5)) # Задание-2: @@ -21,16 +19,10 @@ # Билет считается счастливым, если сумма его первых и последних цифр равны. # !!!P.S.: функция не должна НИЧЕГО print'ить -# Решение 1 -# def lucky_ticket(ticket_number): -# ticket_number_str = str(ticket_number) -# ticket_number_lst = [int(i) for i in ticket_number_str] -# if len(ticket_number_str) > 5 and (sum(ticket_number_lst[:3]) == sum(ticket_number_lst[-3::])): -# return True -# else: -# return False -# -# -# print(lucky_ticket(123006)) -# print(lucky_ticket(12321)) -# print(lucky_ticket(436751)) +def lucky_ticket(ticket_number): + pass + + +print(lucky_ticket(123006)) +print(lucky_ticket(12321)) +print(lucky_ticket(436751)) diff --git a/lesson03/home_work/hw03_hard.py b/lesson03/home_work/hw03_hard.py index 214c454ab..a8c7f668a 100644 --- a/lesson03/home_work/hw03_hard.py +++ b/lesson03/home_work/hw03_hard.py @@ -18,38 +18,6 @@ # они получают удвоенную ЗП, пропорциональную норме. # Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" -# Решение 1 -# Добавляем информацию о количестве отработанных часов из второго списка в первый -# def smart_union(main_lst, etc_lst): -# tmp = [] -# for i in main_lst: -# for j in etc_lst: -# if i[1] in j[1]: -# tmp.append(i + j[2:]) -# break -# return tmp -# -# -# with open("data/workers", encoding="utf-8", mode="r") as tmp: -# salary_lst = [i.split() for i in tmp][1:] -# -# with open("data/hours_of", encoding="utf-8", mode="r") as tmp: -# worked_hours_lst = [i.split() for i in tmp][1:] -# -# union_list = smart_union(salary_lst, worked_hours_lst) -# -# print("{:<15} {:<15} {:<15} {:<15} {:<15} {:<15} {:<15}".format("Имя", "Отчество", "Оклад 100%", "Должность", "Норма ч.", "По факту ч.", "Выплатят")) -# -# for worker in union_list: -# salary, hours_norm, hours_work = int(worker[2]), int(worker[4]), int(worker[5]) -# -# work = hours_work - hours_norm -# if work > 0: -# price = salary + (2 * (salary / hours_norm) * (hours_work - hours_norm)) -# else: -# price = salary + (salary / hours_norm) * (hours_work - hours_norm) -# print("{:<15} {:<15} {:<15} {:<15} {:<15} {:<15} {:<15.2f}".format(worker[0], worker[1], worker[2], worker[3], worker[4], worker[5], price)) - # Задание-3: # Дан файл ("data/fruits") со списком фруктов. @@ -63,31 +31,3 @@ # Подсказка: # Чтобы получить список больших букв русского алфавита: # print(list(map(chr, range(ord('А'), ord('Я')+1)))) - -# Решение 1 -# def write_file(lst, letter): -# new_file = open("data/fruits_{}.txt".format(letter), encoding="utf-8", mode="w") -# -# for line in lst: -# new_file.write(line + "\n") -# new_file.close() -# -# tmp = [] -# -# with open("data/fruits.txt", encoding="utf-8", mode="r") as file: -# sorted_lst = sorted(list(set([i.rstrip() for i in file]))[1:]) -# -# first_letter = sorted_lst[0][:1] -# -# for x in sorted_lst: -# if x[:1] == first_letter: -# tmp.append(x) -# else: -# write_file(tmp, first_letter) -# -# tmp = [] -# -# first_letter = x[:1] -# tmp.append(x) -# else: -# write_file(tmp, first_letter) diff --git a/lesson03/home_work/hw03_normal.py b/lesson03/home_work/hw03_normal.py index c15fe1650..38ac1fcc1 100644 --- a/lesson03/home_work/hw03_normal.py +++ b/lesson03/home_work/hw03_normal.py @@ -2,18 +2,8 @@ # Напишите функцию, возвращающую ряд Фибоначчи с n-элемента до m-элемента. # Первыми элементами ряда считать цифры 1 1 - -# Решение 1 -# def fibonacci(n, m): -# start = n -# lst = [i for i in range(n, m + 3)] -# while start < m: -# lst[start + 2] = lst[start] + lst[start + 1] -# start += 1 -# print(lst) - - -# fibonacci(1, 10) +def fibonacci(n, m): + pass # Задача-2: # Напишите функцию, сортирующую принимаемый список по возрастанию. @@ -21,41 +11,17 @@ # Для решения данной задачи нельзя использовать встроенную функцию и метод sort() -# def sort_to_max(origin_list): -# for i in range(len(origin_list) - 1): -# for j in range(len(origin_list) - i - 1): -# if origin_list[j] > origin_list[j + 1]: -# origin_list[j], origin_list[j + 1] = origin_list[j + 1], origin_list[j] -# print(origin_list) - +def sort_to_max(origin_list): + pass -# sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) +sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) # Задача-3: # Напишите собственную реализацию стандартной функции filter. # Разумеется, внутри нельзя использовать саму функцию filter. -# def unclass_filter(func, value): -# f = func -# return f(value) - - -# hlp = [0, 50, 100, -1, 9, 4] -# print(unclass_filter(min, hlp)) - # Задача-4: # Даны четыре точки А1(х1, у1), А2(x2 ,у2), А3(x3 , у3), А4(х4, у4). # Определить, будут ли они вершинами параллелограмма. -# A = {"x1": 2, "y1": -1} -# B = {"x2": 5, "y2": -3} -# -# C = {"x3": -2, "y3": 11} -# D = {"x4": -5, "y4": 13} -# -# ifEdgeParallelogram = False -# if (A["y1"] - D["y4"] == B["y2"] - C["y3"]) and (B["x2"] - A["x1"] == C["x3"] - D["x4"]): -# ifEdgeParallelogram = True -# -# print(ifEdgeParallelogram) From 471a28dd7de6ba46cd1c58c991e93b2b4379adc6 Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 21 Feb 2019 18:22:01 +0300 Subject: [PATCH 11/19] Lesson 3 (KSP) --- lesson03/home_work/hw03_easy.py | 32 ++++++++++------- lesson03/home_work/hw03_hard.py | 60 +++++++++++++++++++++++++++++++ lesson03/home_work/hw03_normal.py | 44 ++++++++++++++++++++--- 3 files changed, 119 insertions(+), 17 deletions(-) diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index 63d13f646..f748955fb 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -4,13 +4,15 @@ # Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0). # Для решения задачи не используйте встроенные функции и функции из модуля math. -def my_round(number, ndigits): - pass +# def my_round(number, count): +# number = (number * (10 ** count) + 0.41) // 1 +# return number / (10 ** count) -print(my_round(2.1234567, 5)) -print(my_round(2.1999967, 5)) -print(my_round(2.9999967, 5)) + +# print(my_round(2.1234567, 5)) +# print(my_round(2.1999967, 5)) +# print(my_round(2.9999967, 5)) # Задание-2: @@ -19,10 +21,16 @@ def my_round(number, ndigits): # Билет считается счастливым, если сумма его первых и последних цифр равны. # !!!P.S.: функция не должна НИЧЕГО print'ить -def lucky_ticket(ticket_number): - pass - - -print(lucky_ticket(123006)) -print(lucky_ticket(12321)) -print(lucky_ticket(436751)) +# Решение 1 +# def lucky_ticket(ticket_number): +# ticket_number_str = str(ticket_number) +# ticket_number_lst = [int(i) for i in ticket_number_str] +# if len(ticket_number_str) > 5 and (sum(ticket_number_lst[:3]) == sum(ticket_number_lst[-3::])): +# return True +# else: +# return False +# +# +# print(lucky_ticket(123006)) +# print(lucky_ticket(12321)) +# print(lucky_ticket(436751)) diff --git a/lesson03/home_work/hw03_hard.py b/lesson03/home_work/hw03_hard.py index a8c7f668a..214c454ab 100644 --- a/lesson03/home_work/hw03_hard.py +++ b/lesson03/home_work/hw03_hard.py @@ -18,6 +18,38 @@ # они получают удвоенную ЗП, пропорциональную норме. # Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" +# Решение 1 +# Добавляем информацию о количестве отработанных часов из второго списка в первый +# def smart_union(main_lst, etc_lst): +# tmp = [] +# for i in main_lst: +# for j in etc_lst: +# if i[1] in j[1]: +# tmp.append(i + j[2:]) +# break +# return tmp +# +# +# with open("data/workers", encoding="utf-8", mode="r") as tmp: +# salary_lst = [i.split() for i in tmp][1:] +# +# with open("data/hours_of", encoding="utf-8", mode="r") as tmp: +# worked_hours_lst = [i.split() for i in tmp][1:] +# +# union_list = smart_union(salary_lst, worked_hours_lst) +# +# print("{:<15} {:<15} {:<15} {:<15} {:<15} {:<15} {:<15}".format("Имя", "Отчество", "Оклад 100%", "Должность", "Норма ч.", "По факту ч.", "Выплатят")) +# +# for worker in union_list: +# salary, hours_norm, hours_work = int(worker[2]), int(worker[4]), int(worker[5]) +# +# work = hours_work - hours_norm +# if work > 0: +# price = salary + (2 * (salary / hours_norm) * (hours_work - hours_norm)) +# else: +# price = salary + (salary / hours_norm) * (hours_work - hours_norm) +# print("{:<15} {:<15} {:<15} {:<15} {:<15} {:<15} {:<15.2f}".format(worker[0], worker[1], worker[2], worker[3], worker[4], worker[5], price)) + # Задание-3: # Дан файл ("data/fruits") со списком фруктов. @@ -31,3 +63,31 @@ # Подсказка: # Чтобы получить список больших букв русского алфавита: # print(list(map(chr, range(ord('А'), ord('Я')+1)))) + +# Решение 1 +# def write_file(lst, letter): +# new_file = open("data/fruits_{}.txt".format(letter), encoding="utf-8", mode="w") +# +# for line in lst: +# new_file.write(line + "\n") +# new_file.close() +# +# tmp = [] +# +# with open("data/fruits.txt", encoding="utf-8", mode="r") as file: +# sorted_lst = sorted(list(set([i.rstrip() for i in file]))[1:]) +# +# first_letter = sorted_lst[0][:1] +# +# for x in sorted_lst: +# if x[:1] == first_letter: +# tmp.append(x) +# else: +# write_file(tmp, first_letter) +# +# tmp = [] +# +# first_letter = x[:1] +# tmp.append(x) +# else: +# write_file(tmp, first_letter) diff --git a/lesson03/home_work/hw03_normal.py b/lesson03/home_work/hw03_normal.py index 38ac1fcc1..c15fe1650 100644 --- a/lesson03/home_work/hw03_normal.py +++ b/lesson03/home_work/hw03_normal.py @@ -2,8 +2,18 @@ # Напишите функцию, возвращающую ряд Фибоначчи с n-элемента до m-элемента. # Первыми элементами ряда считать цифры 1 1 -def fibonacci(n, m): - pass + +# Решение 1 +# def fibonacci(n, m): +# start = n +# lst = [i for i in range(n, m + 3)] +# while start < m: +# lst[start + 2] = lst[start] + lst[start + 1] +# start += 1 +# print(lst) + + +# fibonacci(1, 10) # Задача-2: # Напишите функцию, сортирующую принимаемый список по возрастанию. @@ -11,17 +21,41 @@ def fibonacci(n, m): # Для решения данной задачи нельзя использовать встроенную функцию и метод sort() -def sort_to_max(origin_list): - pass +# def sort_to_max(origin_list): +# for i in range(len(origin_list) - 1): +# for j in range(len(origin_list) - i - 1): +# if origin_list[j] > origin_list[j + 1]: +# origin_list[j], origin_list[j + 1] = origin_list[j + 1], origin_list[j] +# print(origin_list) + -sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) +# sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) # Задача-3: # Напишите собственную реализацию стандартной функции filter. # Разумеется, внутри нельзя использовать саму функцию filter. +# def unclass_filter(func, value): +# f = func +# return f(value) + + +# hlp = [0, 50, 100, -1, 9, 4] +# print(unclass_filter(min, hlp)) + # Задача-4: # Даны четыре точки А1(х1, у1), А2(x2 ,у2), А3(x3 , у3), А4(х4, у4). # Определить, будут ли они вершинами параллелограмма. +# A = {"x1": 2, "y1": -1} +# B = {"x2": 5, "y2": -3} +# +# C = {"x3": -2, "y3": 11} +# D = {"x4": -5, "y4": 13} +# +# ifEdgeParallelogram = False +# if (A["y1"] - D["y4"] == B["y2"] - C["y3"]) and (B["x2"] - A["x1"] == C["x3"] - D["x4"]): +# ifEdgeParallelogram = True +# +# print(ifEdgeParallelogram) From e4ceb59149c89ecb47497a822bdaf7fbfd6bf7e4 Mon Sep 17 00:00:00 2001 From: Sergey Date: Tue, 26 Feb 2019 10:17:01 +0300 Subject: [PATCH 12/19] Lesson 4 is done --- lesson04/home_work/hw04_easy.py | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/lesson04/home_work/hw04_easy.py b/lesson04/home_work/hw04_easy.py index 85035ea8b..bdc601d92 100644 --- a/lesson04/home_work/hw04_easy.py +++ b/lesson04/home_work/hw04_easy.py @@ -6,13 +6,47 @@ # квадратами элементов исходного списка # [1, 2, 4, 0] --> [1, 4, 16, 0] +# Решение 1 +# import random +# +# lst = [random.randrange(0, 10) for _ in range(5)] +# print("Исходный список: ", lst) +# +# +# def square_my_lst(loc_lst): +# return [i * i for i in loc_lst] +# +# +# print("[DEF] Получившийся список элементов в квадрате: ", square_my_lst(lst)) +# +# Решение 2 +# # TODO +# print("[LMD] Получившийся список элементов в квадрате: ", (lambda x: x * x for x in lst)) + # Задание-2: # Даны два списка фруктов. # Получить список фруктов, присутствующих в обоих исходных списках. +# Решение 1 +# fruits_lst1 = ["Apple", "Banana", "Apricot", "Grapes"] +# fruits_lst2 = ["Apple", "Fig", "Apricot", "Melon"] +# +# result_lst = list(set(fruits_lst1) & set(fruits_lst2)) +# +# print(result_lst) + # Задание-3: # Дан список, заполненный произвольными числами. # Получить список из элементов исходного, удовлетворяющих следующим условиям: # + Элемент кратен 3 # + Элемент положительный # + Элемент не кратен 4 + +# Решение 1 +from random import randrange + +lst_sample = [randrange(-50, 50) for _ in range(15)] +print("Исходный список ", lst_sample) + +finally_lst = [i for i in lst_sample if i > 0 and i % 3 == 0 and i % 4 != 0] +print("Результирующий список ", finally_lst) From c2d06fd208c4d5093877da4830cbb3be281adf74 Mon Sep 17 00:00:00 2001 From: Sergey Date: Tue, 26 Feb 2019 10:17:31 +0300 Subject: [PATCH 13/19] Lesson 4 is done --- lesson04/home_work/hw04_hard.py | 27 +++++++++ lesson04/home_work/hw04_normal.py | 91 +++++++++++++++++++++++++++++++ lesson04/home_work/test.txt | 1 + 3 files changed, 119 insertions(+) create mode 100644 lesson04/home_work/test.txt diff --git a/lesson04/home_work/hw04_hard.py b/lesson04/home_work/hw04_hard.py index 3b12dc315..fd7a2a063 100644 --- a/lesson04/home_work/hw04_hard.py +++ b/lesson04/home_work/hw04_hard.py @@ -13,6 +13,9 @@ # Суть сложности hard: Решите задачу в одну строку +# Решение 1 +print([list(map(lambda x: x[i], matrix)) for i in range(len(matrix))]) + # Задание-2: # Найдите наибольшее произведение пяти последовательных цифр в 1000-значном числе. # Выведите произведение и индекс смещения первого числа последовательных 5-ти цифр. @@ -39,6 +42,9 @@ 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450""" +# Решение 1 +# import re +# print(5 * int(re.findall(r'(?=(\d))\1{5}', number)[0]), number.find(5 * re.findall(r'(?=(\d))\1{5}', number)[0])) # Задание-3 (Ферзи): # Известно, что на доске 8×8 можно расставить 8 ферзей так, чтобы они не били @@ -47,3 +53,24 @@ # Программа получает на вход восемь пар чисел, # каждое число от 1 до 8 — координаты 8 ферзей. # Если ферзи не бьют друг друга, выведите слово NO, иначе выведите YES. + +# Решение 1 +# n = 8 +# x, y = [], [] +# +# flag = True +# +# for i in range(n): +# new_x, new_y = [int(s) for s in input().split()] +# x.append(new_x) +# y.append(new_y) +# +# for i in range(n): +# for j in range(i + 1, n): +# if x[i] == x[j] or y[i] == y[j] or abs(x[i] - x[j]) == abs(y[i] - y[j]): +# flag = False +# +# if flag: +# print('NO') +# else: +# print('YES') diff --git a/lesson04/home_work/hw04_normal.py b/lesson04/home_work/hw04_normal.py index 739dd33f8..4d0148137 100644 --- a/lesson04/home_work/hw04_normal.py +++ b/lesson04/home_work/hw04_normal.py @@ -20,6 +20,27 @@ 'XiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQoiQ'\ 'zTYwZAiRwycdlHfyHNGmkNqSwXUrxGc' +# Решение 1 +# import re +# +# lst = re.findall(r'[A-Z]*([a-z]+)[A-Z]*', line) +# print(lst) + +# Решение 2 +# tmp = '' +# res = [] +# +# for word in line: +# if ord(word) in range(ord('a'), ord('z')): +# tmp += word +# if ord(word) in range(ord('A'), ord('Z')) and len(tmp) > 0: +# res.append(tmp) +# tmp = '' +# +# if len(tmp) > 0: +# res.append(tmp) +# +# print(res) # Задание-2: # Вывести символы в верхнем регистре, слева от которых находятся @@ -45,9 +66,79 @@ 'JFaXiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQ'\ 'oiQzTYwZAiRwycdlHfyHNGmkNqSwXUrxGC' +# Решение 1 +# import re +# +# str = re.findall(r'[a-z]{2}([A-Z]+)[A-Z]{2}', line_2) +# print(str) + +# Решение 2 +# tmp = '' +# res = [] +# left_count = 0 +# right_count = 0 +# +# for word in line_2: +# if ord(word) in range(ord('a'), ord('z') + 1): +# if right_count > 2 and left_count == -1: +# res.append(tmp[:right_count - 2]) +# tmp = '' +# +# if left_count == -1: +# left_count = 0 +# +# tmp = '' +# right_count = 0 +# left_count += 1 +# +# +# if ord(word) in range(ord('A'), ord('Z') + 1): +# right_count += 1 +# if left_count >= 2 or left_count == -1: +# left_count = -1 +# else: +# left_count = 0 +# tmp += word +# +# print(res) + # Задание-3: # Напишите скрипт, заполняющий указанный файл (самостоятельно задайте имя файла) # произвольными целыми цифрами, в результате в файле должно быть # 2500-значное произвольное число. # Найдите и выведите самую длинную последовательность одинаковых цифр # в вышезаполненном файле. + +# Решение 1 +# Запись в файл +# import random +# +# str = "" +# for _ in range(0, 2500): +# str += random.randrange(0, 10).__str__() +# +# file = open("test.txt", "w", encoding="UTF-8") +# file.write(str) +# file.close() + +# Чтение из файла +file_r = open("test.txt", "r", encoding="UTF-8") + +str = file_r.readline() +file_r.close() + +sequence = "" +digit = 0 +val = "" + +for i in str: + if digit == i: + val += i.__str__() + else: + if len(sequence) < len(val): + sequence = val + val = "" + digit = i + val = i.__str__() + +print(sequence) \ No newline at end of file diff --git a/lesson04/home_work/test.txt b/lesson04/home_work/test.txt new file mode 100644 index 000000000..66210347b --- /dev/null +++ b/lesson04/home_work/test.txt @@ -0,0 +1 @@ +0111148466198075247132794627900481701639475983466728910391387066530344605088776293617391366566159697680705535217373863378099407180294598150107778678020030492930543202801638640663378028090641039269416535752553010958985663302545906587715160257760174010288845673949351608732934047629575965107059335104385481639604745309829724962899656502776456922164025627343964526822501854028776005479943972548976159502561056745529694615275636223043678680509453360564331144702638133307921745627242586713908526046427015820535963961231632457198522259039919375522903151289694650245820852633753538715270369362074026925491017958262107871176214521535106140691443692525889320754631513263421263500923937191200862879280609724351924230350233685806742754289404055386420960453432387177273836379166078279418922253437323281970723834503665660589514434646255034936401865314271461985132239182185267480687533440963195570402158242317954445906128551885091821133869614831231217573608559087472824259521794653368443753939698621552496062597181521878454245264167992984611905649446346653580165133386770899038116197468547217636918476055138378517538277364449045547799407441502821882586484088511222783766423213699850595409461889545365382761282476727596045902747755831983376069495140977956552579089819448917052113267329580865054335776503681556862113016262036926499484192244536278168929050270971589396422337480057782484004902265434148651878107867807640817444315235085230345289913774663355934762661042383299763957477951280139428458782009881191658881107063780352470447201527195670851517260718991015736756221418535328721356258936002717240653242544913834225045029224048636616536280824080264466967118802143471043821264007341435800091388606044014732830239337908649731418219969497817288498992406210085620543240519286422506906923475307884351700025943265812187320486524588823727332486491373711291542233409419394921786664941351862907583642111530441754650037204325867603657242787252083710280443803223442492861560005676831078158102745686767348640633258436466677777166750790488204431831033389656376416793746123813719466452439980652909744286338266981571901186775164658256898177176105302977830612609263862412414414713574309655695017870167568741563342112738653104803853704622009980048695826052528751447211406412046891280756978194216793011031919086138386561758003058368629853511872268863944429805775656770521917882645869112370665882275914308130485555910496556434446884657744514196473904804132016045301309895047496287203057300956683639924257238526205380163418979386095 \ No newline at end of file From a818b6526ed1e12983fe600b9d1c2f5bd91e995e Mon Sep 17 00:00:00 2001 From: Sergey Date: Wed, 27 Feb 2019 09:36:15 +0300 Subject: [PATCH 14/19] Home work of lesson 5 is done --- lesson05/home_work/hw05_easy.py | 38 +++++++++++ lesson05/home_work/hw05_hard.py | 106 ++++++++++++++++++++++++++++++ lesson05/home_work/hw05_normal.py | 95 ++++++++++++++++++++++++++ 3 files changed, 239 insertions(+) diff --git a/lesson05/home_work/hw05_easy.py b/lesson05/home_work/hw05_easy.py index c6317de2b..7f190eb9a 100644 --- a/lesson05/home_work/hw05_easy.py +++ b/lesson05/home_work/hw05_easy.py @@ -3,8 +3,46 @@ # из которой запущен данный скрипт. # И второй скрипт, удаляющий эти папки. +# Решение 1 +import os + +def make_dirs(count = 1): + for dr in range(0, count): + dir_path = os.path.join(os.getcwd(), "dir_" + str(dr + 1)) + try: + os.mkdir(dir_path) + except FileExistsError: + print("Такая директория уже существует") + +# Удаляем директорию по маске наименования +def delete_dirs(mask = "dir_"): + dirs = os.listdir(path=os.getcwd()) + + for dr in dirs: + if len(dr) > 4 and dr.startswith(mask): + dir_path = os.path.join(os.getcwd(), dr) + try: + os.rmdir(dir_path) + except FileExistsError: + print("Ошибка удаления файла", dr ) + +make_dirs(9) +delete_dirs() + # Задача-2: # Напишите скрипт, отображающий папки текущей директории. +# Решение 1 +def show_current_dir(): + from os import walk + + for root, dirs, files in walk("."): + if len(dirs) > 0: + print(dirs) + # Задача-3: # Напишите скрипт, создающий копию файла, из которого запущен данный скрипт. + +# Решение 1 +import shutil +shutil.copy(__file__, __file__ + "_copy.py") \ No newline at end of file diff --git a/lesson05/home_work/hw05_hard.py b/lesson05/home_work/hw05_hard.py index 7507e47b2..1fa015a80 100644 --- a/lesson05/home_work/hw05_hard.py +++ b/lesson05/home_work/hw05_hard.py @@ -13,3 +13,109 @@ # Исходной директорией считать ту, в которой был запущен скрипт. # P.S. По возможности, сделайте кросс-платформенную реализацию. +# Решение 1 +import os +import sys +import shutil + +print('sys.argv = ', sys.argv) + +current_dir = os.getcwd() + + +def print_main_menu(): + print("help - получение справки", + "mkdir - создание директории", + 'cp - создает копию указанного файла', + 'rm - удаляет указанный файл', + 'cd - меняет текущую директорию на указанную', + 'ls - отображение полного пути текущей директории', + "ping - тестовый ключ", sep="\n") + + +# Тест +def ping(): + print("test") + + +# Создаём папку +def make_dir(): + if not dir_name: + print("[Ошибка] укажите имя директории вторым параметром") + return + dir_path = os.path.join(current_dir, dir_name) + try: + os.mkdir(dir_path) + except FileExistsError: + print("Невозможно создать") + else: + print("Успешно создано") + + +# Удаляем файл +def remove_file(): + if not dir_name: + print("[Ошибка] укажите имя файла вторым параметром") + return + + file_path = os.path.join(current_dir, dir_name) + if os.path.exists(file_path): + answer = input("Вы действительно хотите удалить этот файл? [Д/Н]") + if answer.lower() in ["д", "Д"]: + os.remove(file_path) + print('Успешно удалено') + + +# Копируем файл +def copy_file(): + if not dir_name: + print("Укажите имя файла вторым параметром") + return + shutil.copy(__file__, __file__ + "_copy.py") + + +# Меняет текущую директорию на указанную +def change_dir(): + if not dir_name: + print("[Ошибка] укажите имя директории вторым параметром") + return + global current_dir + new_dir = dir_name if os.path.isabs(dir_name) else os.path.normpath(os.path.join(current_dir, dir_name)) + if os.path.exists(new_dir): + current_dir = new_dir + print("Успешно изменено") + else: + print("Невозможно изменить") + + +def show_current_dir(): + print(current_dir) + + +do = { + "help": print_main_menu, + "mkdir": make_dir, + "cp": copy_file, + "rm": remove_file, + "cd": change_dir, + "ls": show_current_dir, + "ping": ping +} + +try: + dir_name = sys.argv[2] +except IndexError: + dir_name = None + +try: + key = sys.argv[1] +except IndexError: + key = None + + +if key: + if do.get(key): + do[key]() + else: + print("Задан неверный ключ") + print("Укажите ключ help для получения справки") diff --git a/lesson05/home_work/hw05_normal.py b/lesson05/home_work/hw05_normal.py index ead6bbc19..5e5a60568 100644 --- a/lesson05/home_work/hw05_normal.py +++ b/lesson05/home_work/hw05_normal.py @@ -13,3 +13,98 @@ # Для решения данной задачи используйте алгоритмы из задания easy, # оформленные в виде соответствующих функций, # и импортированные в данный файл из easy.py + +# Решение 1 +import os +import sys +import hw05_easy as hwork + + +# Дополнительные функции +def print_main_menu(): + print( + "1. Перейти в папку", + "2. Просмотреть содержимое текущей папки", + "3. Удалить папку", + "4. Создать папку", + "", + "5. Показать главное меню ещё раз", + "Q. Выход из OS", + sep="\n") + + +# Функция смены рабочего каталога +def goto_dir(): + dir_name = input("Введите наименование папки:") + + try: + os.chdir(os.path.join(os.getcwd(), dir_name)) + except: + print("Невозможно перейти") + else: + print("Успешно перешел") + print("Текущая = ", os.getcwd()) + + +# Функция просмотра содержимого текущей папки +def show_current_dir(): + from os import walk + + for root, dirs, files in walk("."): + print(files) + + +# Удаляем директорию по маске наименования +def delete_dir(): + usr = input("Введите наименование папки: ") + dirs = os.listdir(path=os.getcwd()) + + for dr in dirs: + if dr == usr: + dir_path = os.path.join(os.getcwd(), dr) + try: + os.rmdir(dir_path) + except FileExistsError: + print("Невозможно удалить") + else: + print("Успешно удалено") + + +# Создаём папку +def make_dirs(): + usr = input("Введите наименование папки: ") + try: + os.mkdir(usr) + except FileExistsError: + print("Невозможно создать") + else: + print("Успешно создано") + +# Можно использовать функции с модуля hw05_easy, но ТЗ этого д/з не позволяет так сделать +do = { + "1": goto_dir, + "2": show_current_dir, + "3": delete_dir, + "4": make_dirs, + "5": print_main_menu, +} + +print("Поиск необходимой мощности для запуска...") +print("Папка OS v 0.0.0.1 (SuperAlpha C2019). Добро пожаловать!\n") + + +print("Вот что я умею:") + +print_main_menu() + +while True: + key = input() + + if do.get(key) or key == 'q': + if key == 'q': + sys.exit() + + do[key]() + else: + print("Задан неверный ключ") + print("Укажите ключ 5 для получения справки") From b3e3e4ccc5c6b0698ccba8ad481b1d0f90dccf7c Mon Sep 17 00:00:00 2001 From: Sergey Date: Tue, 5 Mar 2019 15:00:52 +0300 Subject: [PATCH 15/19] Home work of lesson 6 is done. --- lesson06/home_work/hw06_easy.py | 149 ++++++++++++++++++++++++++++ lesson06/home_work/hw06_hard.py | 56 +++++++++++ lesson06/home_work/hw06_normal.py | 157 ++++++++++++++++++++++++++++++ 3 files changed, 362 insertions(+) diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index fe5dc2b11..5e00bbcf2 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -2,8 +2,157 @@ # Определить методы, позволяющие вычислить: площадь, высоту и периметр фигуры. +# Решение 1 +from math import sqrt +class Triangle: + ''' + Входные данные: 3x tuple + + properties: + triangle_sides - стороны треугольника + square - площадь + + def: + height - высота + perimeter - периметр + ''' + def __init__(self, a, b, c): + self.A = a + self.B = b + self.C = c + + @property + def triangle_sides(self): + ''' + Стороны треугольника + :return: + ''' + ab = sqrt((self.A[0] - self.B[0]) ** 2 + (self.A[1] - self.B[1]) ** 2) + bc = sqrt((self.B[0] - self.C[0]) ** 2 + (self.B[1] - self.C[1]) ** 2) + ac = sqrt((self.A[0] - self.C[0]) ** 2 + (self.A[1] - self.C[1]) ** 2) + return ab, bc, ac + + @property + def square(self): + ''' + Площадь треугольника + :return: + ''' + d1 = self.A[0] - self.C[0] + d2 = self.A[1] - self.C[1] + + d3 = self.B[0] - self.C[0] + d4 = self.B[1] - self.C[1] + + return abs((d1 * d4) - (d3 * d2)) / 2 + + def height(self, ab, bc, ac): + ''' + Высота треугольника + :return: + ''' + p = (ab + bc + ac) / 2 + h1 = sqrt(p * (p - ab) * (p - bc) * (p - ac)) * 2 / ab + h2 = sqrt(p * (p - ab) * (p - bc) * (p - ac)) * 2 / bc + h3 = sqrt(p * (p - ab) * (p - bc) * (p - ac)) * 2 / ac + return int(h1), int(h2), int(h3) + + def perimeter(self, ab, bc, ac): + ''' + Периметр треугольника + :return: + ''' + return round(ab + bc + ac, 2) + + +A = [1, 3] +B = [2, -5] +C = [-8, 4] + +tr = Triangle(A, B, C) + +# print("Площадь треугольника", tr.square) +# print("Высота треугольника", tr.height(*(tr.triangle_sides))) +# print("Периметр треугольника", tr.perimeter(*(tr.triangle_sides))) + # Задача-2: Написать Класс "Равнобочная трапеция", заданной координатами 4-х точек. # Предусмотреть в классе методы: # проверка, является ли фигура равнобочной трапецией; # вычисления: длины сторон, периметр, площадь. + +class IsoscelesTrapezoid: + ''' + Входные данные: список из 4х int элементов + + def: + является ли фигура равнобочной трапецией + + properties: + side_length - длина стороны + perimeter - периметр + square - площадь + ''' + def __init__(self, a, b, c, d): + self.A = a + self.B = b + self.C = c + self.D = d + + def side_length(self, x, y): + ''' + Длина стороны + :return: + ''' + return round(sqrt((x[0] - y[0]) ** 2 + (x[1] - y[1]) ** 2), 2) + + @property + def is_trapezoid(self): + ''' + Является ли фигура равнобочной трапецией + :return: + ''' + return self.side_length(self.C, self.A) == self.side_length(self.B, self.D) + + @property + def perimeter(self): + ''' + Периметр трапеции + :return: + ''' + return round(self.side_length(self.A, self.B) + self.side_length(self.B, self.C) + \ + self.side_length(self.C, self.D) + self.side_length(self.A, self.D), 2) + + @property + def square(self): + ''' + Площадь трапеции + :return: + ''' + + #TODO Вынести в конструктор + ab = self.side_length(self.A, self.B) + cd = self.side_length(self.C, self.D) + bc = self.side_length(self.B, self.C) + ad = self.side_length(self.A, self.D) + if ab == cd: + return round(((bc + ad) / 2) * sqrt(ab ** 2 - ((bc - ad) ** 2 / (2 * (bc - ad))) ** 2), 2) + else: + return round(((ab + cd) / 2) * sqrt(bc ** 2 - ((ab - cd) ** 2 / (2 * (ab - cd))) ** 2), 2) + + +A = (-6, 0) +B = (6, 0) +C = (2, 2) +D = (-2, 2) + +tp = IsoscelesTrapezoid(A, B, C, D) + +# print('Дины стороны трапеции [A B]: ', tp.side_length(A, B)) +# print('Дины стороны трапеции [C D]: ', tp.side_length(C, D)) +# print('Дины стороны трапеции [B C]: ', tp.side_length(B, C)) +# print('Дины стороны трапеции [A D]: ', tp.side_length(A, A)) + +# print("Является ли фигура равнобочной трапецией", tp.is_trapezoid) +# print("Периментр равнобочной трапецией", tp.perimeter) +print("Площадь равнобочной трапецией", tp.square) diff --git a/lesson06/home_work/hw06_hard.py b/lesson06/home_work/hw06_hard.py index fae8d84d2..0973a1444 100644 --- a/lesson06/home_work/hw06_hard.py +++ b/lesson06/home_work/hw06_hard.py @@ -10,3 +10,59 @@ # С использованием классов. # Реализуйте классы сотрудников так, чтобы на вход функции-конструктора # каждый работник получал строку из файла + + +# Решение 1 +class Worker: + ''' + Класс "Сотрудник" + ''' + def __init__(self, data): + ''' + Каждый работник получает строку из файла + :param data: + ''' + res = data.split(" ") + if len(res) > 0: + [name, family, salary, position, hours_norm, hours_work] = res + self.name = name + self.family = family + self.salary = int(salary) + self.position = position + self.hours_norm = int(hours_norm) + self.hours_work = int(hours_work) + + +def smart_union(main_lst, etc_lst): + tmp = [] + for i in main_lst: + for j in etc_lst: + if i[1] in j[1]: + tmp.append(i + j[2:]) + break + return tmp + + +with open("data/workers", encoding="utf-8", mode="r") as tmp: + salary_lst = [i.split() for i in tmp][1:] + +with open("data/hours_of", encoding="utf-8", mode="r") as tmp: + worked_hours_lst = [i.split() for i in tmp][1:] + +union_list = smart_union(salary_lst, worked_hours_lst) + +# Создаём из объединённого списка (результата работы smart_union) экземпляры класса "Worker" +workers = [] +for lst in union_list: + workers.append(Worker(" ".join(lst))) + +# Рассчитываем заработную плату +for worker in workers: + salary, hours_norm, hours_work = worker.salary, worker.hours_norm, worker.hours_work + + work = hours_work - hours_norm + if work > 0: + price = salary + (2 * (salary / hours_norm) * (hours_work - hours_norm)) + else: + price = salary + (salary / hours_norm) * (hours_work - hours_norm) + print("{:<15} {:<15} {:<15} {:<15} {:<15} {:<15} {:<15.2f}".format(worker.name, worker.family, worker.salary, worker.position, worker.hours_norm, worker.hours_work, price)) diff --git a/lesson06/home_work/hw06_normal.py b/lesson06/home_work/hw06_normal.py index 01c3982f4..06a0c36a6 100644 --- a/lesson06/home_work/hw06_normal.py +++ b/lesson06/home_work/hw06_normal.py @@ -15,3 +15,160 @@ # (Ученик --> Класс --> Учителя --> Предметы) # 4. Узнать ФИО родителей указанного ученика # 5. Получить список всех Учителей, преподающих в указанном классе + + +# Решение 1 +class People: + ''' + Описание основных черт человека + + string: name - имя + string: surname - фамилия + string: patronymic - отчество + ''' + def __init__(self, name, surname, patronymic): + self.name = name + self.surname = surname + self.patronymic = patronymic + + @property + def get_full_name(self): + ''' + Ф.И.О полностью + ''' + return '{0} {1} {2}'.format(self.surname, self.name, self.patronymic) + + @property + def get_short_name(self): + ''' + Ф.И.О в формате "Фамилия И.О." + ''' + return '{0} {1} {2} '.format(self.surname, self.name[:1], self.patronymic[:1]) + + +class Student(People): + ''' + Описание типа "Школьник" + + string: name - имя + string: surname - фамилия + string: patronymic - отчество + string: student_class - класс в формате "1Б" + list: parents - родители (список) + ''' + def __init__(self, name, surname, patronymic, class_room, parents): + People.__init__(self, name, surname, patronymic) + self.class_room = class_room + self.parents = parents + + @property + def get_class_room(self): + return self.class_room + + @property + def get_parents(self): + return self.parents + +class Teacher(People): + ''' + Описание типа "Предодаватель" + + string: name - имя + string: surname - фамилия + string: patronymic - отчество + string: student_class - класс в формате "1Б, 7А" + string: subject - предмет + ''' + def __init__(self, name, surname, patronymic, class_room, subject): + People.__init__(self, name, surname, patronymic) + self.class_room = class_room + self.subject = subject + + @property + def get_classes(self): + return self.class_room + + @property + def get_courses(self): + return self.subject + +class Parent(People): + ''' + Описание типа "Родитель" + + string: name - имя + string: surname - фамилия + string: patronymic - отчество + ''' + def __init__(self, name, surname, patronymic): + People.__init__(self, name, surname, patronymic) + + +class School: + ''' + Описание типа "Школа" + + list: teachers - список учителей + list: students - список чащихся + ''' + def __init__(self, teachers, students): + self._teachers = teachers + self._students = students + + def get_all_classes(self): + ''' + Получить полный список всех классов школы + ''' + classes = set([student.get_class_room for student in self._students]) + return list(sorted(classes, key=lambda x: int(x[:-1]))) + + def get_students(self, class_room): + ''' + Получить список всех учеников в указанном классе + ''' + return [student.get_short_name for student in self._students if class_room == student.get_class_room] + + def get_teachers(self, class_room): + ''' + Получить список всех Учителей, преподающих в указанном классе + ''' + return [teacher.get_short_name for teacher in self._teachers if class_room in teacher.get_classes] + + def find_student(self, student_full_name): + ''' + Полная информация об учащемся + ''' + for person in self._students: + if student_full_name == person.get_full_name: + teachers = [teachers.get_short_name for teachers in self._teachers if person.get_class_room in teachers.get_classes] + lessons = [teachers.subject for teachers in self._teachers if person.get_class_room in teachers.get_classes] + parents = person.get_parents[0].get_full_name + " \ " + person.get_parents[1].get_full_name + + return {'ФИО': student_full_name, 'Класс': person.get_class_room, 'Учителя': teachers, 'Предметы': lessons, 'Родитель': parents} + + +# Список преподавателей +teachers_list = [ + Teacher("Иван", "Федорович", "Павлов", "1А, 2А, 3А, 1Б, 2Б, 3Б, 1В, 2В, 3В", "Математика"), + Teacher("Евлампий", "Акакиевич", "Федоров", "1Б, 2Б, 3Б", "Русский язык"), + Teacher("Кондрат", "Рассолович", "Иванов", "1А, 3А, 3Б, 3В", "Информатика")] + +# Список учащихся +students_list = [ + Student("Сергей", "Кашурин", "Петрович", "1А", [Parent("Пётр", "Кашурин", "Михайлович"), \ + Parent("Валентина", "Кашурина", "Дмитриевна")]), + + Student("Иван", "Иванов", "Вообщетович", "1А", [Parent("Иван", "Вообщетович", "Павлович"), \ + Parent("Екатерина", "Вообщетовна", "Васильевна")]), + + Student("Никита", "Васин", "Логонов", "1Б", [Parent("Василий", "Логонов", "Евлампиевич"), \ + Parent("Снежанна", "Логоновна", "Раисовна")]) ] + +school = School(teachers_list, students_list) + +# print('Список классов школы:, '.join(school.get_all_classes())) +# print('Список 1А класса:', school.get_students('1А')) +student = school.find_student('Кашурин Сергей Петрович') +# print(student) + +print('Преподаватели в 1А: {0}'.format(', '.join(school.get_teachers('1А')))) From 566c6295b65c815c053970b2193016bc3dcce12d Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 7 Mar 2019 16:34:49 +0300 Subject: [PATCH 16/19] Lesson 7 is not done v0.75 (07.03.2019) --- lesson07/home_work/loto.py | 203 +++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index 5ea6ad844..7066c8ded 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -57,3 +57,206 @@ модуль random: http://docs.python.org/3/library/random.html """ + + +# Решение 1 +from random import randint + + +class Card: + def __init__(self, user_name="Computer"): + self._user_name = user_name + self._card = self.generate_card + + @property + def generate_card(self): + ''' + Генерация данных для игральной карты + :return: + ''' + result_list = [] + tmp_values = [] + + for q in range(0, 3): + result_list.append([" " for _ in range(0, 9)]) + + tmp = self.list_index_generate + random_values = self.list_random_values_generate(tmp_values) + + i = 0 + error = "" + while i < 5: + rnd_value = randint(0, 99) + if rnd_value not in tmp_values: + try: + result_list[q][tmp[i]] = random_values[i] + tmp_values.append(rnd_value) + except IndexError as err: + error = err.args + finally: + i += 1 + + return result_list + + @property + def list_index_generate(self): + ''' + Получение рандомных идексов в последствии которые будут заполнены рандомными значениями из функции list_random_values_generate + :return: + ''' + # TODO Иногда не генерируется достаточное количество рандомных элементов, по-этому может возникать ошибка + return list(set([randint(0, 9) for _ in range(0, 15)]))[:9] + + def list_random_values_generate(self, tmp_values): + ''' + Заполнить карту неповторяющимися значениями + :param tmp_values: + :return: + ''' + i = 0 + tmp = [] + while i <= 5: + rnd = randint(0, 99) + # TODO Вариант использования изменяемого объекта необходимо продумать! + if rnd not in tmp and rnd not in tmp_values: + tmp.append(rnd) + i += 1 + return sorted(tmp) + + @property + def show_card(self): + ''' + Распечатать карту + :return: + ''' + print("------------ {} карточка -----------".format(self._user_name)) + for line in self._card: + for L in line: + print("{:3}".format(L), end=" ") + print() + print("--------------------------------------") + + def cross_out_number(self, number): + """ + Зачеркнуть значение в карте + :param number: + :return: + """ + self._card[number[0]][number[1]] = " " + + @property + def get_card(self): + ''' + Получить значение карты + :return: + ''' + return self._card + + def is_exist(self, number): + ''' + Переданный аргумент есть в карте? + :param number: + :return: + ''' + i = 0 + error = "" + finder_index = -1 + while i < 3: + try: + finder_index = self.get_card[i].index(number) + except ValueError as err: + error = err.args + if finder_index >= 0: + return i, finder_index + i += 1 + return -1 + + @property + def get_user_name(self): + ''' + Получить имя текущего владельца карты + :return: + ''' + return self._user_name + + +class Chip: + ''' + Фишки (бочонки) с цифрами + ''' + def __init__(self): + ''' + Заполняем список элементами от 0 до 90 + ''' + self._chips = list(range(0, 91)) + + @property + def generate(self): + ''' + Генерируем рандомный индекс и забираем элемент по нему удаляя из списка + ''' + yield self._chips.pop(randint(0, len(self._chips) - 1)) + + @property + def show(self): + ''' + Отображение текущих бочонков с цифрами + ''' + return self._chips + + +print("Добро пожаловать в игру == Лото ==") +print("Пожалуйста подождите, идёт инициализация игровых объектов:\n") + +user_card = Card("User") +computer_card = Card() + +chip = Chip() + +ship_number = 0 + + +def show_all_cards(): + user_card.show_card + computer_card.show_card + + +def next_step(): + ship_number = next(chip.generate) + print("Выпал бочонок №", ship_number) + show_all_cards() + return ship_number + + +print("\nИнициализация завершена: карточки игроков ->\n") + +show_all_cards() + +while True: + user_choice = input("Для следующего броска введите 1, для выхода из игры введите Q:") + + if user_choice in ["Q", "q"]: + break + + if user_choice == "1": + ship_number = next_step() + + user_shot = input("Зачеркнуть бочонок на карте? Y - зачеркнуть N - продолжить") + + if user_shot in ["Y", "y"]: + index_is_exist = user_card.is_exist(ship_number) + if index_is_exist != -1: + user_card.cross_out_number(index_is_exist) + show_all_cards() + else: + print("Неверно! Конец игры!!!") + break + elif user_shot in ["N", "n"]: + index_is_exist = user_card.is_exist(ship_number) + if index_is_exist != -1: + print("Номер бочёнка был в Вашей карте, Вы проиграли! Конец игры!!!") + break + else: + continue + else: + break From cd1638ac76e63dd9133b4a85f797e619af7fcfc0 Mon Sep 17 00:00:00 2001 From: Sergey Date: Mon, 11 Mar 2019 13:31:33 +0300 Subject: [PATCH 17/19] Lesson 7 is done --- lesson07/home_work/card.py | 138 ++++++++++++++++++++++++++++++ lesson07/home_work/chip.py | 25 ++++++ lesson07/home_work/loto.py | 167 +++++-------------------------------- 3 files changed, 182 insertions(+), 148 deletions(-) create mode 100644 lesson07/home_work/card.py create mode 100644 lesson07/home_work/chip.py diff --git a/lesson07/home_work/card.py b/lesson07/home_work/card.py new file mode 100644 index 000000000..2338bed79 --- /dev/null +++ b/lesson07/home_work/card.py @@ -0,0 +1,138 @@ +from random import randint + + +class Card: + def __init__(self, user_name="Computer"): + self._user_name = user_name + self._card = self.generate_card + + @property + def generate_card(self): + ''' + Генерация данных для игральной карты + :return: + ''' + result_list = [] + tmp_values = [] + + for q in range(0, 3): + result_list.append([" " for _ in range(0, 9)]) + + tmp = self.list_index_generate + tmp_values, random_values = self.list_random_values_generate(tmp_values) + + i = 0 + error = "" + while i < 5: + rnd_value = randint(0, 99) + if rnd_value not in tmp_values: + try: + result_list[q][tmp[i]] = random_values[i] + tmp_values.append(rnd_value) + except IndexError as err: + error = err.args + finally: + i += 1 + + return result_list + + @property + def list_index_generate(self): + ''' + Получение рандомных идексов в последствии которые будут заполнены рандомными значениями из функции list_random_values_generate + :return: + ''' + i = 0 + tmp = [] + while i <= 5: + rnd = randint(0, 9) + if rnd not in tmp: + tmp.append(rnd) + i += 1 + return sorted(tmp) + + @staticmethod + def list_random_values_generate(tmp_values): + ''' + Заполнить карту неповторяющимися значениями + :param tmp_values: + :return: + ''' + i = 0 + tmp = [] + while i <= 5: + rnd = randint(0, 99) + if rnd not in tmp and rnd not in tmp_values: + tmp.append(rnd) + tmp_values.append(rnd) + i += 1 + return tmp_values, sorted(tmp) + + @property + def show_card(self): + ''' + Распечатать карту + :return: + ''' + print("------------ {} карточка -----------".format(self._user_name)) + for line in self._card: + for L in line: + print("{:3}".format(L), end=" ") + print() + print("--------------------------------------") + + def cross_out_number(self, number): + """ + Зачеркнуть значение в карте + :param number: + :return: + """ + self._card[number[0]][number[1]] = " " + + @property + def get_card(self): + ''' + Получить значение карты + :return: + ''' + return self._card + + def is_exist(self, number): + ''' + Переданный аргумент есть в карте? + :param number: + :return: + ''' + i = 0 + error = "" + finder_index = -1 + while i < 3: + try: + finder_index = self.get_card[i].index(number) + except ValueError as err: + error = err.args + if finder_index >= 0: + return i, finder_index + i += 1 + return -1 + + @property + def get_user_name(self): + ''' + Получить имя текущего владельца карты + :return: + ''' + return self._user_name + + @property + def are_you_winner(self): + ''' + Узнаём победителя (у кого не осталось значений в карте) + :return: + ''' + flag = True + for x in self._card: + for y in x: + if y != ' ' and y >= 0: + flag = False + return flag \ No newline at end of file diff --git a/lesson07/home_work/chip.py b/lesson07/home_work/chip.py new file mode 100644 index 000000000..b45bcf92d --- /dev/null +++ b/lesson07/home_work/chip.py @@ -0,0 +1,25 @@ +from random import randint + +class Chip: + ''' + Фишки (бочонки) с цифрами + ''' + def __init__(self): + ''' + Заполняем список элементами от 1 до 90 + ''' + self._chips = list(range(1, 91)) + + @property + def generate(self): + ''' + Генерируем рандомный индекс и забираем элемент по нему удаляя из списка + ''' + yield self._chips.pop(randint(0, len(self._chips) - 1)) + + @property + def show(self): + ''' + Отображение текущих бочонков с цифрами + ''' + return self._chips \ No newline at end of file diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index 7066c8ded..85e494a04 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -60,158 +60,16 @@ # Решение 1 -from random import randint - - -class Card: - def __init__(self, user_name="Computer"): - self._user_name = user_name - self._card = self.generate_card - - @property - def generate_card(self): - ''' - Генерация данных для игральной карты - :return: - ''' - result_list = [] - tmp_values = [] - - for q in range(0, 3): - result_list.append([" " for _ in range(0, 9)]) - - tmp = self.list_index_generate - random_values = self.list_random_values_generate(tmp_values) - - i = 0 - error = "" - while i < 5: - rnd_value = randint(0, 99) - if rnd_value not in tmp_values: - try: - result_list[q][tmp[i]] = random_values[i] - tmp_values.append(rnd_value) - except IndexError as err: - error = err.args - finally: - i += 1 - - return result_list - - @property - def list_index_generate(self): - ''' - Получение рандомных идексов в последствии которые будут заполнены рандомными значениями из функции list_random_values_generate - :return: - ''' - # TODO Иногда не генерируется достаточное количество рандомных элементов, по-этому может возникать ошибка - return list(set([randint(0, 9) for _ in range(0, 15)]))[:9] - - def list_random_values_generate(self, tmp_values): - ''' - Заполнить карту неповторяющимися значениями - :param tmp_values: - :return: - ''' - i = 0 - tmp = [] - while i <= 5: - rnd = randint(0, 99) - # TODO Вариант использования изменяемого объекта необходимо продумать! - if rnd not in tmp and rnd not in tmp_values: - tmp.append(rnd) - i += 1 - return sorted(tmp) - - @property - def show_card(self): - ''' - Распечатать карту - :return: - ''' - print("------------ {} карточка -----------".format(self._user_name)) - for line in self._card: - for L in line: - print("{:3}".format(L), end=" ") - print() - print("--------------------------------------") - - def cross_out_number(self, number): - """ - Зачеркнуть значение в карте - :param number: - :return: - """ - self._card[number[0]][number[1]] = " " - - @property - def get_card(self): - ''' - Получить значение карты - :return: - ''' - return self._card - - def is_exist(self, number): - ''' - Переданный аргумент есть в карте? - :param number: - :return: - ''' - i = 0 - error = "" - finder_index = -1 - while i < 3: - try: - finder_index = self.get_card[i].index(number) - except ValueError as err: - error = err.args - if finder_index >= 0: - return i, finder_index - i += 1 - return -1 - - @property - def get_user_name(self): - ''' - Получить имя текущего владельца карты - :return: - ''' - return self._user_name - - -class Chip: - ''' - Фишки (бочонки) с цифрами - ''' - def __init__(self): - ''' - Заполняем список элементами от 0 до 90 - ''' - self._chips = list(range(0, 91)) - - @property - def generate(self): - ''' - Генерируем рандомный индекс и забираем элемент по нему удаляя из списка - ''' - yield self._chips.pop(randint(0, len(self._chips) - 1)) - - @property - def show(self): - ''' - Отображение текущих бочонков с цифрами - ''' - return self._chips - +import chip +import card print("Добро пожаловать в игру == Лото ==") print("Пожалуйста подождите, идёт инициализация игровых объектов:\n") -user_card = Card("User") -computer_card = Card() +user_card = card.Card("User") +computer_card = card.Card() -chip = Chip() +chip = chip.Chip() ship_number = 0 @@ -228,7 +86,7 @@ def next_step(): return ship_number -print("\nИнициализация завершена: карточки игроков ->\n") +print("Инициализация завершена: карточки игроков ->\n") show_all_cards() @@ -239,8 +97,21 @@ def next_step(): break if user_choice == "1": + + if user_card.are_you_winner: + print("Победил %UserName%!") + break + elif computer_card.are_you_winner: + print("Победил Computer!") + break + ship_number = next_step() + # Реализация игры компьютера + index_is_exist_pc = computer_card.is_exist(ship_number) + if index_is_exist_pc != -1: + computer_card.cross_out_number(index_is_exist_pc) + user_shot = input("Зачеркнуть бочонок на карте? Y - зачеркнуть N - продолжить") if user_shot in ["Y", "y"]: From 2fbdd0843b37cd185c19e8db7ddf070e56a6074f Mon Sep 17 00:00:00 2001 From: Sergey Kashurin Date: Mon, 11 Mar 2019 22:06:35 +0300 Subject: [PATCH 18/19] Lesson 8 is started --- lesson08/home_work/app.id | 2 +- lesson08/home_work/openweather.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lesson08/home_work/app.id b/lesson08/home_work/app.id index 1abf6bafa..51d526b1c 100644 --- a/lesson08/home_work/app.id +++ b/lesson08/home_work/app.id @@ -1 +1 @@ -== тут будет ваш APPID для доступа к openweathermap.org == +a0676fe489771bc8199bdf536f08ec11 diff --git a/lesson08/home_work/openweather.py b/lesson08/home_work/openweather.py index a9debfa1c..13f19f3dc 100644 --- a/lesson08/home_work/openweather.py +++ b/lesson08/home_work/openweather.py @@ -123,3 +123,8 @@ def gen_ns(tag): """ +from urllib import request + +req = request.urlopen("http://api.openweathermap.org/data/2.5/weather?id=523523&units=metric&appid=a0676fe489771bc8199bdf536f08ec11") + +print(set(req)) From 4b70bbe402655089ce5b4ab4e21f36b9e544543c Mon Sep 17 00:00:00 2001 From: Sergey Date: Tue, 12 Mar 2019 13:53:44 +0300 Subject: [PATCH 19/19] Lesson 8 in process.... 0.65% --- lesson08/home_work/openweather.py | 148 +++++++++++++++++++++++++++++- 1 file changed, 145 insertions(+), 3 deletions(-) diff --git a/lesson08/home_work/openweather.py b/lesson08/home_work/openweather.py index 13f19f3dc..3a38fc856 100644 --- a/lesson08/home_work/openweather.py +++ b/lesson08/home_work/openweather.py @@ -122,9 +122,151 @@ def gen_ns(tag): ... """ +import urllib.request +import os +import sqlite3 +import datetime +import json -from urllib import request -req = request.urlopen("http://api.openweathermap.org/data/2.5/weather?id=523523&units=metric&appid=a0676fe489771bc8199bdf536f08ec11") +class DB: + def __init__(self, db_name="weather.db"): + self._db_name = db_name -print(set(req)) + @property + def is_exist(self): + ''' + Проверяем наличие файла базы данных + :return: + ''' + return os.path.isfile(self._db_name) + + @property + def create_db(self): + ''' + Создаём базу данных пустышку + :return: + ''' + conn = sqlite3.connect(self._db_name) + conn.close() + + with sqlite3.connect(self._db_name) as conn: + conn.execute(""" + create table weather_information ( + id_town INTEGER PRIMARY KEY, + town VARCHAR(255), + calendar_date DATE, + degree INTEGER, + id_weather INTEGER + ); """) + + + def insert_or_replace_db(self): + #conn = sqlite3.connect(self._db_name) + + #conn.row_factory = sqlite3.Row + + #cur = conn.cursor() + # cur.execute("insert or replace into weather_information (id_town, town, calendar_date, degree, id_weather) values ( \ + # (select id_town from weather_information where town = 'Nalchik'), 'Nalchik', 5, 6") + + #conn.close() + # for row in cur.fetchall(): + # print(row) + # name, description, deadline = row + # print(name, description, deadline) + pass + + + def select_information_from_db_for_test(self): + #TODO SELECT for test! + conn = sqlite3.connect(self._db_name) + conn.row_factory = sqlite3.Row + + cur = conn.cursor() + cur.execute("select * from weather_information where id_town = 523523") + for row in cur.fetchall(): + print(row) + town, calendar_date, degree = row + print(town, calendar_date, degree) + + def insert_information_from_db_for_test(self): + #TODO INSERT for test! + conn = sqlite3.connect(self._db_name) + conn.execute(""" + insert into weather_information (id_town, town, calendar_date, degree, id_weather) VALUES (?,?,?,?,?)""", ( + 523523, + 'Nalchik', + datetime.date.today(), + 25, + 11, + ) + ) + + +class JsonReader: + def __init__(self, file_name="city.list.json"): + self._file_name = file_name + + @property + def is_exist(self): + ''' + Проверяем наличие файла с данными + :return: + ''' + return os.path.isfile(self._file_name) + + def get_countries(self): + ''' + Читаем страны из файла и делаем список состоящим из уникальных элементов + :return: + ''' + uniq = [] + with open(self._file_name, mode="r", encoding="UTF-8") as json_file: + data = json.load(json_file) + for p in data: + uniq.append(p['country']) + return sorted(set(uniq))[1:] + + +class Weather: + def __init__(self, country="RU"): + self._country = country + + @property + def get_country(self): + return self._country + + +class WeatherOnline(Weather): + def __init__(self, country="RU"): + Weather.__init__(self) + + self._country = country + self._appid = "a0676fe489771bc8199bdf536f08ec11" + + @property + def get_weather_online(self): + return urllib.request.urlopen("http://api.openweathermap.org/data/2.5/weather?id=523523&units=metric&appid={}".format(self._appid)) + + +#1 (Если нет БД, создаём её) +db = DB() +if not db.is_exist: + db.create_db + + +#2 (Читаем с файла список стран) +# json_obj = JsonReader() +# if json_obj.is_exist: +# print("Список стран:") +# print(json_obj.get_countries()) + + +#3 Скачивание погоды для выбранного города +weather_online = WeatherOnline() +#print(set(weather_online.get_weather_online)) + + +db.insert_information_from_db_for_test() +db.select_information_from_db_for_test() \ No newline at end of file