diff --git a/lesson01/home_work/hw01-1.py b/lesson01/home_work/hw01-1.py new file mode 100644 index 000000000..8ba9cbf74 --- /dev/null +++ b/lesson01/home_work/hw01-1.py @@ -0,0 +1,11 @@ + +__author__ = 'Agafonova Anna' + +# Задача-1: Поработайте с переменными, создайте несколько, выведите на экран, +# запросите у пользователя несколько чисел и строк и сохраните в переменные, выведите на экран. + +a = input("Enter your name: ") +b = int(input("Enter your age: ")) +c = float(input("Enter any number: ")) + +print(a, b, c) \ No newline at end of file diff --git a/lesson01/home_work/hw01-2.py b/lesson01/home_work/hw01-2.py new file mode 100644 index 000000000..6f43f55ae --- /dev/null +++ b/lesson01/home_work/hw01-2.py @@ -0,0 +1,12 @@ +__author__ = 'Agafonova Anna' + +# Задача-2: Пользователь вводит время в секундах. +# Переведите время в часы, минуты и секунды и выведите в формате чч:мм:сс. +# Используйте форматирование строк. + +time_in_sec = int(input("Enter your local time in sec: ")) +hours = time_in_sec // 3600 +residue = time_in_sec % 3600 +minutes = residue // 60 +sec = residue % 60 +print(f"Now is {hours}:{minutes}:{sec} ") \ No newline at end of file diff --git a/lesson01/home_work/hw01-3.py b/lesson01/home_work/hw01-3.py new file mode 100644 index 000000000..5e4b4d337 --- /dev/null +++ b/lesson01/home_work/hw01-3.py @@ -0,0 +1,11 @@ +__author__ = 'Agafonova Anna' + +# Задача-3: Узнайте у пользователя число n. Найдите сумму чисел n + nn + nnn. +# Например, пользователь ввёл число 3. Считаем 3 + 33 + 333 = 369. + +number = input("Enter number: ") +a = int(number + number) +b = int(number+number+number) +summa = int(number) + a + b + +print(summa) \ No newline at end of file diff --git a/lesson01/home_work/hw01-4.py b/lesson01/home_work/hw01-4.py new file mode 100644 index 000000000..80835c550 --- /dev/null +++ b/lesson01/home_work/hw01-4.py @@ -0,0 +1,13 @@ +__author__ = 'Agafonova Anna' + +# Задача-4: Пользователь вводит целое положительное число. +# Найдите самую большую цифру в числе. +# Для решения используйте цикл while и арифметические операции. + +number = input("Enter number: ") +x = 0 +for i in number: + while int(i) > x: + x = int(i) +print(x) + diff --git a/lesson01/home_work/hw01-5.py b/lesson01/home_work/hw01-5.py new file mode 100644 index 000000000..d9ea65858 --- /dev/null +++ b/lesson01/home_work/hw01-5.py @@ -0,0 +1,22 @@ + +__author__ = 'Agafonova Anna' + +# Задание-5: +# Запросите у пользователя значения выручки и издержек фирмы. +# Определите, с каким финансовым результатом работает фирма (прибыль — выручка больше издержек, или убыток — издержки больше выручки). +# Выведите соответствующее сообщение. +# Если фирма отработала с прибылью, вычислите рентабельность выручки (соотношение прибыли к выручке). +# Далее запросите численность сотрудников фирмы и определите прибыль фирмы в расчете на одного сотрудника. + +proceed = int(input("Enter proceed: ")) +outlay = int(input("Enter outlay: ")) +if proceed > outlay: + profitability = proceed-outlay + rent = profitability/proceed + print(f"Great work. You have {profitability} profitability") + worker = int(input("How many people work: ")) + print(f"{profitability/worker} for one worker") +elif proceed == outlay: + print("No bad") +else: + print("Good luck") \ No newline at end of file diff --git a/lesson01/home_work/hw01-6.py b/lesson01/home_work/hw01-6.py new file mode 100644 index 000000000..0f93c0337 --- /dev/null +++ b/lesson01/home_work/hw01-6.py @@ -0,0 +1,17 @@ + +__author__ = 'Agafonova Anna' + +# Задача-6: Спортсмен занимается ежедневными пробежками. В первый день его результат составил a километров. +# Каждый день спортсмен увеличивал результат на 10 % относительно предыдущего. +# Требуется определить номер дня, на который общий результат спортсмена составить не менее b километров. +# Программа должна принимать значения параметров a и b и выводить одно натуральное число — номер дня. + +a = float(input("Enter start: ")) +b = float(input("Enter finish: ")) +day = 1 +if a > b: + print(day) +while a < b: + a = a + a/10 + day += 1 +print(day) diff --git a/lesson01/home_work/hw01_easy.py b/lesson01/home_work/hw01_easy.py deleted file mode 100644 index 4592ef2af..000000000 --- a/lesson01/home_work/hw01_easy.py +++ /dev/null @@ -1,11 +0,0 @@ - -# Задача-1: Дано произвольное целое число, вывести поочередно цифры исходного числа - -# код пишем тут... - -# Задача-2: Исходные значения двух переменных запросить у пользователя. -# Поменять значения переменных местами. Вывести новые значения на экран. -# Не нужно решать задачу так: print("a = ", b, "b = ", a) - это неправильное решение! - -# Задача-3: Запросите у пользователя его возраст. Если ему есть 18 лет, выведите: "Доступ разрешен", -# иначе "Извините, пользование данным ресурсом только с 18 лет" diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py deleted file mode 100644 index d4d9fa7aa..000000000 --- a/lesson01/home_work/hw01_hard.py +++ /dev/null @@ -1,9 +0,0 @@ -# Задание-1: -# Ваня набрал несколько операций в интерпретаторе и получал результаты: -# Код: a == a**2 -# Результат: True -# Код: a == a*2 -# Результат: True -# Код: a > 999999 -# Результат: True -# Вопрос: Чему была равна переменная a, если точно известно, что её значение не изменялось? diff --git a/lesson01/home_work/hw01_normal.py b/lesson01/home_work/hw01_normal.py deleted file mode 100644 index 8c6435811..000000000 --- a/lesson01/home_work/hw01_normal.py +++ /dev/null @@ -1,16 +0,0 @@ -__author__ = '' - -# Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. -# Например, дается x = 58375. Нужно вывести максимальную цифру в данном числе, т.е. 8. -# Подразумевается, что мы не знаем это число заранее. Число приходит в виде целого беззнакового. - - -# Задача-2: Исходные значения двух переменных запросить у пользователя. -# Поменять значения переменных местами. Вывести новые значения на экран. -# Решите задачу, используя только две переменные. - - -# Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида ax2 + bx + c = 0. -# Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math -# import math -# math.sqrt(4) - вычисляет корень числа 4 diff --git a/lesson02/home_work/hw02-1.py b/lesson02/home_work/hw02-1.py new file mode 100644 index 000000000..7d96ccc47 --- /dev/null +++ b/lesson02/home_work/hw02-1.py @@ -0,0 +1,14 @@ +# Задача-1: Создать список и заполнить его элементами различных типов данных. +# Реализовать скрипт проверки типа данных каждого элемента. Использовать функцию type() для проверки типа. +# Элементы списка можно не запрашивать у пользователя, а указать явно, в программе. + +my_int = 5 +my_float = 1.2 +my_str = "Hello world" +my_list = ['a', '2'] +my_tuple = ('b', '3') +my_dict = {'city': 'Moscow', 'country': 'Russia'} + +super_list = [my_int, my_float, my_str, my_list, my_tuple, my_dict] +for i in super_list: + print(f'{i} is {type(i)}') diff --git a/lesson02/home_work/hw02-2.py b/lesson02/home_work/hw02-2.py new file mode 100644 index 000000000..6832dd7d4 --- /dev/null +++ b/lesson02/home_work/hw02-2.py @@ -0,0 +1,22 @@ +# Задание-2: Для списка реализовать обмен значений соседних элементов, т.е. +# Значениями обмениваются элементы с индексами 0 и 1, 2 и 3 и т.д. +# При нечетном количестве элементов последний сохранить на своем месте. +# Для заполнения списка элементов необходимо использовать функцию input(). + +my_list = ['a', 'b', 'c', 'd', 'e'] +if len(my_list) % 2 == 0: + i = 0 + while i < len(my_list): + el = my_list[i] + my_list[i] = my_list[i+1] + my_list[i+1] = el + i += 2 +else: + i = 0 + while i < len(my_list) - 1: + el = my_list[i] + my_list[i] = my_list[i + 1] + my_list[i + 1] = el + i += 2 +print(my_list) + diff --git a/lesson02/home_work/hw02-3.py b/lesson02/home_work/hw02-3.py new file mode 100644 index 000000000..fbe4655d5 --- /dev/null +++ b/lesson02/home_work/hw02-3.py @@ -0,0 +1,25 @@ +# Задача-3: Пользователь вводит месяц в виде целого числа от 1 до 12. +# Сообщить к какому времени года относится месяц (зима, весна, лето, осень). +# Напишите решения через list и через dict. +number = int(input("Enter month number: ")) +if number <= 12 and number >= 1: + month_dict = {1: 'January', + 2: 'February', + 3: 'March', + 4: 'April', + 5: 'May', + 6: 'June', + 7: 'Jule', + 8: 'August', + 9: 'September', + 10: 'October', + 11: 'November', + 12: 'December'} + month_list = list(month_dict.values()) + for i, el in enumerate(month_list): + if i == number-1: + print(f"Month from list is {month_list[i]}") + break + print(f"Month from dict is {month_dict[number]}") +else: + print("You made a mistake") \ No newline at end of file diff --git a/lesson02/home_work/hw02-4.py b/lesson02/home_work/hw02-4.py new file mode 100644 index 000000000..c6aebbf1f --- /dev/null +++ b/lesson02/home_work/hw02-4.py @@ -0,0 +1,10 @@ +# Задача-4: Пользователь вводит строку из нескольких слов, разделённых пробелами. +# Вывести каждое слово с новой строки. Строки необходимо пронумеровать. +# Если в слово длинное, выводить только первые 10 букв в слове +my_str = input("Enter string: ") +a = my_str.split(' ') +for i, el in enumerate(a, 1): + if len(el) > 10: + el = el[0:10] + print(f"{i}. - {el}") + diff --git a/lesson02/home_work/hw02-5.py b/lesson02/home_work/hw02-5.py new file mode 100644 index 000000000..c9edda00b --- /dev/null +++ b/lesson02/home_work/hw02-5.py @@ -0,0 +1,20 @@ +# Задача-5: Реализовать структуру «Рейтинг», представляющую собой не возрастающий набор натуральных чисел. +# У пользователя необходимо запрашивать новый элемент рейтинга. +# Если в рейтинге существуют элементы с одинаковыми значениями, то новый элемент с тем же значением должен разместиться после них. + +number = int(input("Enter number: ")) +my_list = [7, 4, 3, 2] +c = my_list.count(number) +for element in my_list: + if c > 0: + i = my_list.index(number) + my_list.insert(i+c, number) + break + else: + if number > element: + j = my_list.index(element) + my_list.insert(j, number) + break + elif number < my_list[len(my_list) - 1]: + my_list.append(number) +print(my_list) \ No newline at end of file diff --git a/lesson02/home_work/hw02-6.py b/lesson02/home_work/hw02-6.py new file mode 100644 index 000000000..6c09c61f5 --- /dev/null +++ b/lesson02/home_work/hw02-6.py @@ -0,0 +1,40 @@ +'''*Реализовать структуру данных «Товары». Она должна представлять собой список кортежей. +Каждый кортеж хранит информацию об отдельном товаре. В кортеже должно быть два элемента — номер товара и словарь с параметрами +(характеристиками товара: название, цена, количество, единица измерения). +Структуру нужно сформировать программно, т.е. запрашивать все данные у пользователя. +Пример готовой структуры: +[ + (1, {“название”: “компьютер”, “цена”: 20000, “количество”: 5, “eд”: “шт.”}), + (2, {“название”: “принтер”, “цена”: 6000, “количество”: 2, “eд”: “шт.”}), + (3, {“название”: “сканер”, “цена”: 2000, “количество”: 7, “eд”: “шт.”}) +] +Необходимо собрать аналитику о товарах. Реализовать словарь, в котором каждый ключ — характеристика товара, +например название, а значение — список значений-характеристик, например список названий товаров. +Пример: +{ + “название”: [“компьютер”, “принтер”, “сканер”], + “цена”: [20000, 6000, 2000], + “количество”: [5, 2, 7], + “ед”: [“шт.”] +}''' +goods = [] +while input("Would you like add product? Enter yes/no: ") == 'yes': + number = int(input("Enter product number: ")) + features = {} + while input("Would you like add product parameters? Enter yes/no: ") == 'yes': + feature_key = input("Enter feature product: ") + feature_value = input("Enter feature value product: ") + features[feature_key] = feature_value + goods.append(tuple([number, features])) +print(goods) +#goods = [(1, {'name': 'comp', 'price': '11'}), (2, {'name': 'pri', 'price': '22'})] +analitics = {} +for good in goods: + for feature_key, feature_value in good[1].items(): + if feature_key in analitics: + analitics[feature_key].append(feature_value) + else: + analitics[feature_key] = [feature_value] +print(analitics) + + diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py deleted file mode 100644 index 370c370b2..000000000 --- a/lesson02/home_work/hw02_easy.py +++ /dev/null @@ -1,18 +0,0 @@ -# Задача-1: -# Дан список фруктов. Напишите программу, выводящую фрукты в виде нумерованного списка, выровненного по правой стороне -# Пример: -# Дано: ["яблоко", "банан", "киви", "арбуз"] -# Вывод: -# 1. яблоко -# 2. банан -# 3. киви -# 4. арбуз - -# Подсказка: использует метод .format() - -# Задача-2: -# Даны два произвольные списка. Удалите из первого списка элементы, присутствующие во втором списке. - -# Задача-3: -# Дан произвольный список из целых чисел. Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: -# если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. diff --git a/lesson02/home_work/hw02_hard.py b/lesson02/home_work/hw02_hard.py deleted file mode 100644 index d2421bc0a..000000000 --- a/lesson02/home_work/hw02_hard.py +++ /dev/null @@ -1,48 +0,0 @@ -# Задание-1: уравнение прямой вида y = kx + b задано ввиде строки. -# Определить координату y точки с заданной координатой x - -equation = 'y = -12x + 11111140.2121' -x = 2.5 -# вычислите и выведите y - -# Задание-2: Дата задана в виде строки формата 'dd.mm.yyyy'. Проверить, корректно ли введена дата. -# Условия корректности: -# 1. День должен приводиться к целому числу в диапазоне от 1 до 30(31) (в зависимости от месяца, февраль не учитываем) -# 2. Месяц должен приводиться к целому числу в диапазоне от 1 до 12 -# 3. Год должен приводиться к целому положительному числу в диапазоне от 1 до 9999 -# 4. Длина исходной строки для частей должна быть в соответствии с форматом (т.е. 2 - для дня, 2- месяц, 4 -год) - -# Пример корректной даты -date = '01.11.1985' - -# Примеры некорректных дат -date = '01.22.1001' -date = '1.12.1001' -date = '-2.10.3001' - -# Задание-3: "Перевернутая башня" (Задача олимпиадного уровня) -# -# Вавилонцы решили построить удивительную башню — расширяющуюся к верху и содержащую бесконечное число этажей и комнат. -# Она устроена следующим образом — на первом этаже одна комната, затем идет два этажа, -# на каждом из которых по две комнаты, затем идёт три этажа, на каждом из которых по три комнаты и так далее: -# ... -# 12 13 14 -# 9 10 11 -# 6 7 8 -# 4 5 -# 2 3 -# 1 -# -# Эту башню решили оборудовать лифтом --- и вот задача: нужно научиться по номеру комнаты определять, -# на каком этаже она находится и какая она по счету слева на этом этаже. -# -# Входные данные: В первой строчке задан номер комнаты N, 1 ≤ N ≤ 2 000 000 000. -# -# Выходные данные: Два целых числа — номер этажа и порядковый номер слева на этаже. -# -# Пример: -# Вход: 13 -# Выход: 6 2 -# -# Вход: 11 -# Выход: 5 3 \ No newline at end of file diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py deleted file mode 100644 index e446ac144..000000000 --- a/lesson02/home_work/hw02_normal.py +++ /dev/null @@ -1,17 +0,0 @@ -# Задача-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] diff --git a/lesson03/examples/3+_file.py b/lesson03/examples/3+_file.py index c0e3a0499..5de458b0f 100644 --- a/lesson03/examples/3+_file.py +++ b/lesson03/examples/3+_file.py @@ -17,11 +17,11 @@ DIR = 'files' -wanted_symbol = "@" -# wanted_symbol = "+" # раскомментируйте, чтобы посмотреть как работает, если не найдено то, что искали +wanted_token = "@" +# wanted_token = "+" # раскомментируйте, чтобы посмотреть как работает, если не найдено то, что искали with open(os.path.join(DIR, 'data'), 'r', encoding='UTF-8') as f: for line in f: # считываем файл построчно - if wanted_symbol in line: # пока не найдем нужную информацию + if wanted_token in line: # пока не найдем нужную информацию print(line) break # как нашли, заканчиваем чтение файла else: diff --git a/lesson03/examples/files/data b/lesson03/examples/files/data index 2e5b9e82b..bff330fe9 100644 --- a/lesson03/examples/files/data +++ b/lesson03/examples/files/data @@ -1,4 +1,4 @@ Hello world Second string... -Secret symbol is "@" +Secret token is "@" Привет мир!!! \ No newline at end of file diff --git a/lesson03/home_work/hw03-1.py b/lesson03/home_work/hw03-1.py new file mode 100644 index 000000000..86907c3fe --- /dev/null +++ b/lesson03/home_work/hw03-1.py @@ -0,0 +1,14 @@ +# Задание-1: +'''Реализовать функцию, принимающую два числа (позиционные аргументы) и выполняющую их деление. +Числа запрашивать у пользователя, предусмотреть обработку ситуации деления на ноль +''' + +def my_func (x, y): + try: + z = x / y + return z + except ZeroDivisionError: + return "y is'n be a zero" + except ValueError: + return "enter only number" +print(my_func(int(input("Enter x = ")), int(input("Enter y = ")))) diff --git a/lesson03/home_work/hw03-2.py b/lesson03/home_work/hw03-2.py new file mode 100644 index 000000000..3d9322ab2 --- /dev/null +++ b/lesson03/home_work/hw03-2.py @@ -0,0 +1,11 @@ +# Задание-2: +''' +Реализовать функцию, принимающую несколько параметров, описывающих данные пользователя: +имя, фамилия, год рождения, город проживания, email, телефон. +Функция должна принимать параметры как именованные аргументы. Реализовать вывод данных о пользователе одной строкой. +''' + +def my_func(name, surname, byear, city, email, phone): + print(fname, surname, byear, city, email, phone) + +my_func(name= 'anna', surname='agf', byear=1992, city='Spb', email='email', phone='0232') \ No newline at end of file diff --git a/lesson03/home_work/hw03-3.py b/lesson03/home_work/hw03-3.py new file mode 100644 index 000000000..ba3106c85 --- /dev/null +++ b/lesson03/home_work/hw03-3.py @@ -0,0 +1,14 @@ +# Задание-3: +'''Реализовать функцию my_func(), которая принимает три позиционных аргумента, +и возвращает сумму наибольших двух аргументов. +''' +def my_func(x, y, z): + sequence = [x, y, z] + total = [] + max_1 = max(sequence) + total.append(max_1) + sequence.remove(max_1) + max_2 = max(sequence) + total.append(max_2) + print(sum(total)) +my_func(-4, 2, 0) diff --git a/lesson03/home_work/hw03-4.py b/lesson03/home_work/hw03-4.py new file mode 100644 index 000000000..251d28965 --- /dev/null +++ b/lesson03/home_work/hw03-4.py @@ -0,0 +1,8 @@ +'''Программа принимает действительное положительное число x и целое отрицательное число y. +Необходимо выполнить возведение числа x в степень y. Задание необходимо реализовать в виде функции my_func(x, y). +При решении задания необходимо обойтись без встроенной функции возведения числа в степень''' + +def my_func(x, y): + return 1 / x ** abs(y) + #return x ** y +print(my_func(2, -3)) \ No newline at end of file diff --git a/lesson03/home_work/hw03-5.py b/lesson03/home_work/hw03-5.py new file mode 100644 index 000000000..37c6105d1 --- /dev/null +++ b/lesson03/home_work/hw03-5.py @@ -0,0 +1,27 @@ +'''Программа запрашивает у пользователя строку чисел, разделенных пробелом. +При нажатии Enter должна выводиться сумма чисел. +Пользователь может продолжить ввод чисел, разделенных пробелом и снова нажать Enter. +Сумма вновь введенных чисел будет добавляться к уже подсчитанной сумме. +Но если вместо числа вводится специальный символ, выполнение программы завершается. +Если специальный символ введен после нескольких чисел, +то вначале нужно добавить сумму этих чисел к полученной ранее сумме и после этого завершить программу. +''' +import sys + +result = 0 +while True: + line = input("Enter number or special token q fo exite: ") + tokens = line.split(" ") + for token in tokens: + try: + number = float(token) + result += number + except: + if token == 'q': + print(f"You sum is {result}. Program is terminated") + exit(0) + else: + print(f"You sum is {result}. Input error", file=sys.stderr) + exit(1) +#print(result) +#exit() diff --git a/lesson03/home_work/hw03-6.py b/lesson03/home_work/hw03-6.py new file mode 100644 index 000000000..66d77daad --- /dev/null +++ b/lesson03/home_work/hw03-6.py @@ -0,0 +1,24 @@ +'''Реализовать функцию int_func(), принимающую слово из маленьких латинских букв и возвращающую его же, но с прописной первой буквой. +Например, print(int_func(‘text’)) -> Text. +Продолжить работу над заданием. В программу должна попадать строка из слов, разделенных пробелом. +Каждое слово состоит из латинских букв в нижнем регистре. +Сделать вывод исходной строки, но каждое слово должно начинаться с заглавной буквы. +Необходимо использовать написанную ранее функцию int_func(). +''' + +''' 1 Вариант +def func(a): + return a.title() +print(func("abca dsd"))''' + +# 2 Вариант +def my_func(a): + separate_word = a.split(' ') + total = [] + for i in separate_word: + string_element = str(i) + first_letter = string_element[:1].upper() + word = first_letter + string_element[1:] + total.append(word) + return total +print(my_func("hello world")) diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py deleted file mode 100644 index 6027c08ef..000000000 --- a/lesson03/home_work/hw03_easy.py +++ /dev/null @@ -1,22 +0,0 @@ -# Задание-1: -# Напишите функцию, округляющую полученное произвольное десятичное число -# до кол-ва знаков (кол-во знаков передается вторым аргументом) -# Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0). -# Для решения задачи не используйте встроенные функции и функции из модуля 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 deleted file mode 100644 index 9bb864f4d..000000000 --- a/lesson03/home_work/hw03_hard.py +++ /dev/null @@ -1,30 +0,0 @@ -# Задание-1: -# Написать программу, выполняющую операции (сложение и вычитание) с простыми дробями. -# Дроби вводятся и выводятся в формате: n x/y ,где n - целая часть, x - числитель, у - знаменатель. -# Дроби могут быть отрицательные и не иметь целой части, или иметь только целую часть. -# Примеры: -# Ввод: 5/6 + 4/7 (все выражение вводится целиком в виде строки) -# Вывод: 1 17/42 (результат обязательно упростить и выделить целую часть) -# Ввод: -2/3 - -2 -# Вывод: 1 1/3 - -# Задание-2: -# Дана ведомость расчета заработной платы (файл "data/workers"). -# Рассчитайте зарплату всех работников, зная что они получат полный оклад, -# если отработают норму часов. Если же они отработали меньше нормы, -# то их ЗП уменьшается пропорционально, а за заждый час переработки -# они получают удвоенную ЗП, пропорциональную норме. -# Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" - -# Задание-3: -# Дан файл ("data/fruits") со списком фруктов. -# Записать в новые файлы все фрукты, начинающиеся с определенной буквы. -# Т.е. в одном файле будут все фрукты на букву “А”, во втором на “Б” и т.д. -# Файлы назвать соответственно. -# Пример имен файлов: fruits_А, fruits_Б, fruits_В …. -# Важно! Обратите внимание, что нет фруктов, начинающихся с некоторых букв. -# Напишите универсальный код, который будет работать с любым списком фруктов -# и распределять по файлам в зависимости от первых букв, имеющихся в списке фруктов. -# Подсказка: -# Чтобы получить список больших букв русского алфавита: -# print(list(map(chr, range(ord('А'), ord('Я')+1)))) diff --git a/lesson03/home_work/hw03_normal.py b/lesson03/home_work/hw03_normal.py deleted file mode 100644 index 38ac1fcc1..000000000 --- a/lesson03/home_work/hw03_normal.py +++ /dev/null @@ -1,27 +0,0 @@ -# Задание-1: -# Напишите функцию, возвращающую ряд Фибоначчи с n-элемента до m-элемента. -# Первыми элементами ряда считать цифры 1 1 - -def fibonacci(n, m): - pass - -# Задача-2: -# Напишите функцию, сортирующую принимаемый список по возрастанию. -# Для сортировки используйте любой алгоритм (например пузырьковый). -# Для решения данной задачи нельзя использовать встроенную функцию и метод sort() - - -def sort_to_max(origin_list): - pass - -sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) - -# Задача-3: -# Напишите собственную реализацию стандартной функции filter. -# Разумеется, внутри нельзя использовать саму функцию filter. - - -# Задача-4: -# Даны четыре точки А1(х1, у1), А2(x2 ,у2), А3(x3 , у3), А4(х4, у4). -# Определить, будут ли они вершинами параллелограмма. - diff --git a/lesson04/home_work/hw04-1.py b/lesson04/home_work/hw04-1.py new file mode 100644 index 000000000..790230e7f --- /dev/null +++ b/lesson04/home_work/hw04-1.py @@ -0,0 +1,11 @@ +# Задание-1: +'''Реализовать скрипт, в котором должна быть предусмотрена функция расчета заработной платы сотрудника. +В расчете необходимо использовать формулу: (выработка в часах*ставка в час) + премия. +Для выполнения расчета для конкретных значений необходимо запускать скрипт с параметрами.''' + +from sys import argv + +file_name, worked_hour, rate, benefit = argv + +calculation = (int(worked_hour) * int(rate)) + int(benefit) +print(f"Your pay is equal {calculation}") \ No newline at end of file diff --git a/lesson04/home_work/hw04-2.py b/lesson04/home_work/hw04-2.py new file mode 100644 index 000000000..65f85f109 --- /dev/null +++ b/lesson04/home_work/hw04-2.py @@ -0,0 +1,18 @@ +""" +Представлен список чисел. Необходимо вывести элементы исходного списка, значения которых больше предыдущего элемента. +Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. Для формирования списка использовать генератор. +""" +'''Вариант с генератором''' +my_list = [3, 20, 9, 5, 1, 8, 11, 6, 15] +new = [el for el in my_list if el > my_list[my_list.index(el)-1]] +print(new) + +''' Вариант с циклом +i = 0 +new= [] +for el in my_list: + if el > my_list[i-1]: + new.append(el) + i+=1 +print(new) +''' \ No newline at end of file diff --git a/lesson04/home_work/hw04-3.py b/lesson04/home_work/hw04-3.py new file mode 100644 index 000000000..7627cc4d0 --- /dev/null +++ b/lesson04/home_work/hw04-3.py @@ -0,0 +1,7 @@ +"""Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. +Необходимо решить задание в одну строку. +Подсказка: использовать функцию range() и генератор.""" + +numbers = range(20, 241) +new_list = [el for el in numbers if el%20==0 or el%21==0] +print(new_list) \ No newline at end of file diff --git a/lesson04/home_work/hw04-4.py b/lesson04/home_work/hw04-4.py new file mode 100644 index 000000000..c08d3a0db --- /dev/null +++ b/lesson04/home_work/hw04-4.py @@ -0,0 +1,10 @@ +'''Представлен список чисел. Определить элементы списка, не имеющие повторений. +Сформировать итоговый массив чисел, соответствующих требованию. +Элементы вывести в порядке их следования в исходном списке. +Для выполнения задания обязательно использовать генератор.''' +from itertools import permutations +from itertools import repeat +from itertools import combinations +my_list = [1, 2, 2, 3, 4, 1, 2] +new = [el for el in my_list if my_list.count(el)==1] +print(new) \ No newline at end of file diff --git a/lesson04/home_work/hw04-5.py b/lesson04/home_work/hw04-5.py new file mode 100644 index 000000000..8ed663326 --- /dev/null +++ b/lesson04/home_work/hw04-5.py @@ -0,0 +1,11 @@ +'''Реализовать формирование списка, используя функцию range() и возможности генератора. +В список должны войти четные числа от 100 до 1000 (включая границы). +Необходимо получить результат вычисления произведения всех элементов списка. +Подсказка: использовать функцию reduce(). +''' +from functools import reduce +my_list = [el for el in range(100, 1001) if el % 2 == 0] +def my_func(prev_el, el): + return prev_el * el + +print(reduce(my_func, my_list)) \ No newline at end of file diff --git a/lesson04/home_work/hw04-6.py b/lesson04/home_work/hw04-6.py new file mode 100644 index 000000000..5bf941deb --- /dev/null +++ b/lesson04/home_work/hw04-6.py @@ -0,0 +1,21 @@ +'''Реализовать два небольших скрипта: +а) бесконечный итератор, генерирующий целые числа, начиная с указанного, +б) бесконечный итератор, повторяющий элементы некоторого списка, определенного заранее. +Подсказка: использовать функцию count() и cycle() модуля itertools.''' +from itertools import count +from itertools import cycle + +def my_count_func(start_number, stop_number): + for el in count(start_number): + if el > stop_number: + break + else: + print(el) +def my_cycle_func(my_list, iteration): + i = 0 + iter = cycle(my_list) + while i < iteration: + print(next(iter)) + i+=1 +my_count_func(start_number = int(input("enter start number: ")), stop_number = int(input("enter stop number: "))) +my_cycle_func(my_list = [1, 2], iteration = int(input("enter iteration: "))) \ No newline at end of file diff --git a/lesson04/home_work/hw04-7.py b/lesson04/home_work/hw04-7.py new file mode 100644 index 000000000..6d21be190 --- /dev/null +++ b/lesson04/home_work/hw04-7.py @@ -0,0 +1,22 @@ +'''Реализовать генератор с помощью функции с ключевым словом yield, создающим очередное значение. +При вызове функции должен создаваться объект-генератор. +Функция должна вызываться следующим образом: for el in fibo_gen(). +Функция отвечает за получение факториала числа, а в цикле необходимо выводить только первые 15 чисел. +Подсказка: факториал числа n — произведение чисел от 1 до n. Например, факториал четырёх 4! = 1 * 2 * 3 * 4 = 24. +''' +def fibo_gen(number): + count = 1 + while count <= number: + yield count + count += 1 +i = 1 +my_fifteen = [] +for el in fibo_gen(5): + if i > 15: + break + else: + my_fifteen.append(el) + i += 1 +print(my_fifteen) + + diff --git a/lesson04/home_work/hw04_easy.py b/lesson04/home_work/hw04_easy.py deleted file mode 100644 index 85035ea8b..000000000 --- a/lesson04/home_work/hw04_easy.py +++ /dev/null @@ -1,18 +0,0 @@ -# Все задачи текущего блока решите с помощью генераторов списков! - -# Задание-1: -# Дан список, заполненный произвольными целыми числами. -# Получить новый список, элементы которого будут -# квадратами элементов исходного списка -# [1, 2, 4, 0] --> [1, 4, 16, 0] - -# Задание-2: -# Даны два списка фруктов. -# Получить список фруктов, присутствующих в обоих исходных списках. - -# Задание-3: -# Дан список, заполненный произвольными числами. -# Получить список из элементов исходного, удовлетворяющих следующим условиям: -# + Элемент кратен 3 -# + Элемент положительный -# + Элемент не кратен 4 diff --git a/lesson04/home_work/hw04_hard.py b/lesson04/home_work/hw04_hard.py index 3b12dc315..ce6238040 100644 --- a/lesson04/home_work/hw04_hard.py +++ b/lesson04/home_work/hw04_hard.py @@ -1,49 +1,31 @@ -# Задание-1: -# Матрицы в питоне реализуются в виде вложенных списков: -# Пример. Дано: -matrix = [[1, 0, 8], - [3, 4, 1], - [0, 4, 2]] - -# Выполнить поворот (транспонирование) матрицы -# Пример. Результат: -# matrix_rotate = [[1, 3, 0], -# [0, 4, 4], -# [8, 1, 2]] +import my_module +import random +from itertools import permutations +'''for el in repeat('j', 6): + print(el) +for el in combinations('j', 6): + if el > 3: + break + else: + print(el)''' +'''print(random.randint(0, 10)) +print(random.randrange(5)) +print(random.randrange(0, 100, 5)) +print(random.random() + 1) -# Суть сложности hard: Решите задачу в одну строку +print(my_module.my_func(2, 5)) +my_module.my_msg() -# Задание-2: -# Найдите наибольшее произведение пяти последовательных цифр в 1000-значном числе. -# Выведите произведение и индекс смещения первого числа последовательных 5-ти цифр. -# Пример 1000-значного числа: -number = """ -73167176531330624919225119674426574742355349194934 -96983520312774506326239578318016984801869478851843 -85861560789112949495459501737958331952853208805511 -12540698747158523863050715693290963295227443043557 -66896648950445244523161731856403098711121722383113 -62229893423380308135336276614282806444486645238749 -30358907296290491560440772390713810515859307960866 -70172427121883998797908792274921901699720888093776 -65727333001053367881220235421809751254540594752243 -52584907711670556013604839586446706324415722155397 -53697817977846174064955149290862569321978468622482 -83972241375657056057490261407972968652414535100474 -82166370484403199890008895243450658541227588666881 -16427171479924442928230863465674813919123162824586 -17866458359124566529476545682848912883142607690042 -24219022671055626321111109370544217506941658960408 -07198403850962455444362981230987879927244284909188 -84580156166097919133875499200524063689912560717606 -05886116467109405077541002256983155200055935729725 -71636269561882670428252483600823257530420752963450""" +my_list = [1, 2, 3, 4, 5] +new =[el * 10 for el in my_list if el % 2 == 1] +new2 = {el: el * 3 for el in my_list if el % 2 == 1} +print(new2) +print(random.choices(my_list))''' - -# Задание-3 (Ферзи): -# Известно, что на доске 8×8 можно расставить 8 ферзей так, чтобы они не били -# друг друга. Вам дана расстановка 8 ферзей на доске. -# Определите, есть ли среди них пара бьющих друг друга. -# Программа получает на вход восемь пар чисел, -# каждое число от 1 до 8 — координаты 8 ферзей. -# Если ферзи не бьют друг друга, выведите слово NO, иначе выведите YES. +''''''def generator(): + for el in (10, 20, 30): + yield el +g = generator() +print(g) +for el in g: + print(el) \ No newline at end of file diff --git a/lesson04/home_work/hw04_normal.py b/lesson04/home_work/hw04_normal.py deleted file mode 100644 index f29293105..000000000 --- a/lesson04/home_work/hw04_normal.py +++ /dev/null @@ -1,44 +0,0 @@ -# Задание-1: -# Вывести символы в нижнем регистре, которые находятся вокруг -# 1 или более символов в верхнем регистре. -# Т.е. из строки "mtMmEZUOmcq" нужно получить ['mt', 'm', 'mcq'] -# Решить задачу двумя способами: с помощью re и без. - -line = 'mtMmEZUOmcqWiryMQhhTxqKdSTKCYEJlEZCsGAMkgAYEOmHBSQsSUHKvSfbmxULaysmNO'\ - 'GIPHpEMujalpPLNzRWXfwHQqwksrFeipEUlTLeclMwAoktKlfUBJHPsnawvjPhfgewVzK'\ - 'TUfSYtBydXaVIpxWjNKgXANvIoumesCSSvjEGRJosUfuhRRDUuTQwLlJJJDdkVjfSAHqn'\ - 'LxooisBDWuxIhyjJaXDYwdoVPnsllMngNlmkpYOlqXEFIxPqqqgAWdJsOvqppOfyIVjXa'\ - 'pzGOrfinzzsNMtBIOclwbfRzytmDgEFUzxvZGkdOaQYLVBfsGSAfJMchgBWAsGnBnWete'\ - 'kUTVuPluKRMQsdelzBgLzuwiimqkFKpyQRzOUyHkXRkdyIEBvTjdByCfkVIAQaAbfCvzQ'\ - 'WrMMsYpLtdqRltXPqcSMXJIvlBzKoQnSwPFkapxGqnZCVFfKRLUIGBLOwhchWCdJbRuXb'\ - 'JrwTRNyAxDctszKjSnndaFkcBZmJZWjUeYMdevHhBJMBSShDqbjAuDGTTrSXZywYkmjCC'\ - 'EUZShGofaFpuespaZWLFNIsOqsIRLexWqTXsOaScgnsUKsJxiihwsCdBViEQBHQaOnLfB'\ - 'tQQShTYHFqrvpVFiiEFMcIFTrTkIBpGUflwTvAzMUtmSQQZGHlmQKJndiAXbIzVkGSeuT'\ - 'SkyjIGsiWLALHUCsnQtiOtrbQOQunurZgHFiZjWtZCEXZCnZjLeMiFlxnPkqfJFbCfKCu'\ - 'UJmGYJZPpRBFNLkqigxFkrRAppYRXeSCBxbGvqHmlsSZMWSVQyzenWoGxyGPvbnhWHuXB'\ - 'qHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQNJFa'\ - 'XiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQoiQ'\ - 'zTYwZAiRwycdlHfyHNGmkNqSwXUrxGc' - -# Задание-2: -# Вывести символы в верхнем регистре, слева от которых находятся -# два символа в нижнем регистре, а справа два символа в верхнем регистре. -# Т.е. из строки -# "GAMkgAYEOmHBSQsSUHKvSfbmxULaysmNOGIPHpEMujalpPLNzRWXfwHQqwksrFeipEUlTLec" -# нужно получить список строк: ['AY', 'NOGI', 'P'] -# Решить задачу двумя способами: с помощью re и без. - -line_2 = 'mtMmEZUOmcqWiryMQhhTxqKdSTKCYEJlEZCsGAMkgAYEOmHBSQsSUHKvSfbmxULaysm'\ - 'NOGIPHpEMujalpPLNzRWXfwHQqwksrFeipEUlTLeclMwAoktKlfUBJHPsnawvjPhfgewV'\ - 'fzKTUfSYtBydXaVIpxWjNKgXANvIoumesCSSvjEGRJosUfuhRRDUuTQwLlJJJDdkVjfSA'\ - 'HqnLxooisBDWuxIhyjJaXDYwdoVPnsllMngNlmkpYOlqXEFIxPqqqgAWdJsOvqppOfyIV'\'jXapzGOrfinzzsNMtBIOclwbfRzytmDgEFUzxvZGkdOaQYLVBfsGSAfJMchgBWAsGnBnW'\'etekUTVuPluKRMQsdelzBgLzuwiimqkFKpyQRzOUyHkXRkdyIEBvTjdByCfkVIAQaAbfC'\'vzQWrMMsYpLtdqRltXPqcSMXJIvlBzKoQnSwPFkapxGqnZCVFfKRLUIGBLOwhchWCdJbR'\ - 'uXbJrwTRNyAxDctszKjSnndaFkcBZmJZWjUeYMdevHhBJMBSShDqbjAuDGTTrSXZywYkm'\ - 'jCCEUZShGofaFpuespaZWLFNIsOqsIRLexWqTXsOaScgnsUKsJxiihwsCdBViEQBHQaOn'\'LfBtQQShTYHFqrvpVFiiEFMcIFTrTkIBpGUflwTvAzMUtmSQQZGHlmQKJndiAXbIzVkGS'\'euTSkyjIGsiWLALHUCsnQtiOtrbQOQunurZgHFiZjWtZCEXZCnZjLeMiFlxnPkqfJFbCf'\'KCuUJmGYJZPpRBFNLkqigxFkrRAppYRXeSCBxbGvqHmlsSZMWSVQyzenWoGxyGPvbnhWH'\'uXBqHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQN'\'JFaXiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQ'\ - 'oiQzTYwZAiRwycdlHfyHNGmkNqSwXUrxGC' - -# Задание-3: -# Напишите скрипт, заполняющий указанный файл (самостоятельно задайте имя файла) -# произвольными целыми цифрами, в результате в файле должно быть -# 2500-значное произвольное число. -# Найдите и выведите самую длинную последовательность одинаковых цифр -# в вышезаполненном файле. diff --git a/lesson04/home_work/my_module.py b/lesson04/home_work/my_module.py new file mode 100644 index 000000000..983c75946 --- /dev/null +++ b/lesson04/home_work/my_module.py @@ -0,0 +1,5 @@ +def my_func(a, b): + return a + b + +def my_msg(): + print("Hello") \ No newline at end of file diff --git a/lesson05/home_work/hw05-03.py b/lesson05/home_work/hw05-03.py new file mode 100644 index 000000000..be9750d34 --- /dev/null +++ b/lesson05/home_work/hw05-03.py @@ -0,0 +1,30 @@ +# Задача-1: +'''Создать текстовый файл (не программно), построчно записать фамилии сотрудников и величину их окладов. +Определить, кто из сотрудников имеет оклад менее 200, вывести фамилии этих сотрудников. +Выполнить подсчет средней величины дохода сотрудников. +''' +firm = {'Black': 170, 'Smith': 210, 'Potter': 190, 'Green': 150} +try: + file_obj = open("test_3.txt", 'w') + for last_name, salary in firm.items(): + file_obj.write(last_name + ':' + str(salary) + "\n") +except IOError: + print("Произошла ошибка ввода-вывода!") +finally: + file_obj.close() +summa = 0 +count = 0 +persons = [] +with open("test_3.txt", "r") as file_obj: + for line in file_obj: + print(line, end="") + tokens = line.split(':') + if int(tokens[1]) <= 200: + persons.append(tokens[0]) + summa += int(tokens[1]) + count += 1 +result = summa / count +print(f"persons: {persons}") +print(f"averate: {result}") + + diff --git a/lesson05/home_work/hw05-1.py b/lesson05/home_work/hw05-1.py new file mode 100644 index 000000000..7d8fe841a --- /dev/null +++ b/lesson05/home_work/hw05-1.py @@ -0,0 +1,16 @@ +# Задача-1:Создать программно файл в текстовом формате, записать в него построчно данные, вводимые пользователем. +# Об окончании ввода данных свидетельствует пустая строка. + +my_list = [] +while True: + line = input("Enter anything: ") + if line == '': + print(my_list) + exit() + else: + newline = line + '\n' + my_list.append(newline) + + with open("test_1.txt", "w") as file_obj: + file_obj.writelines(my_list) + diff --git a/lesson05/home_work/hw05-2.py b/lesson05/home_work/hw05-2.py new file mode 100644 index 000000000..353ca2f78 --- /dev/null +++ b/lesson05/home_work/hw05-2.py @@ -0,0 +1,13 @@ +# Задание-1: Создать текстовый файл (не программно), сохранить в нем несколько строк, +# выполнить подсчет количества строк, количества слов в каждой строке +my_list = ['Hello\n', 'Chao\n', 'Hola\n'] +with open("test_2.txt", 'w+') as file_obj: + file_obj.writelines(my_list) +with open("test_2.txt") as file_obj: + lines = 0 + letters = 0 + for line in file_obj: + lines += line.count("\n") + letters = len(line)-1 + print(f"{letters} letters in line") + print(f"String count is {lines}") diff --git a/lesson05/home_work/hw05-4.py b/lesson05/home_work/hw05-4.py new file mode 100644 index 000000000..61d69f643 --- /dev/null +++ b/lesson05/home_work/hw05-4.py @@ -0,0 +1,28 @@ +'''Создать (не программно) текстовый файл со следующим содержимым: One — 1, Two — 2, Three — 3, Four — 4 +Необходимо написать программу, открывающую файл на чтение и считывающую построчно данные. +При этом английские числительные должны заменяться на русские. Новый блок строк должен записываться в новый текстовый файл. +''' +translater = {'One': 'odin', 'Two': 'dva', 'Three': 'tri', 'Four': 'chetyre'} +my_list = [] +result = [] +try: + file_obj = open("test_4_output.txt", 'r') + for line in file_obj: + tokens = line.split(" - ") + print(tokens) + if tokens[0] in translater: + word = translater[tokens[0]] + result.append(word +' - '+ tokens[1]) + print(result) +except IOError: + print("Произошла ошибка ввода-вывода!") +finally: + file_obj.close() + +try: + file_input = open("test_4_input.txt", "w") + file_input.writelines(result) +except IOError: + print("Произошла ошибка ввода-вывода!") +finally: + file_input.close() \ No newline at end of file diff --git a/lesson05/home_work/hw05_easy.py b/lesson05/home_work/hw05_easy.py deleted file mode 100644 index 59252493d..000000000 --- a/lesson05/home_work/hw05_easy.py +++ /dev/null @@ -1,9 +0,0 @@ -# Задача-1: -# Напишите скрипт, создающий директории dir_1 - dir_9 в папке, из которой запущен данный скрипт. -# И второй скрипт, удаляющий эти папки. - -# Задача-2: -# Напишите скрипт, отображающий папки текущей директории. - -# Задача-3: -# Напишите скрипт, создающий копию файла, из которого запущен данный скрипт. diff --git a/lesson05/home_work/hw05_hard.py b/lesson05/home_work/hw05_hard.py deleted file mode 100644 index 5161f162b..000000000 --- a/lesson05/home_work/hw05_hard.py +++ /dev/null @@ -1,14 +0,0 @@ -# Задание-1: -# Доработайте реализацию программы из примера examples/5_with_args.py, -# добавив реализацию следующих команд (переданных в качестве аргументов): -# cp - создает копию указанного файла -# rm - удаляет указанный файл (запросить подтверждение операции) -# cd - меняет текущую директорию на указанную -# ls - отображение полного пути текущей директории -# путь считать абсолютным (full_path) - в Linux начинается с /, в Windows с имени диска -# все остальные пути считать относительными. - -# Важно! Все операции должны выполняться в той директории, в который вы находитесь. Исходной директорией считать ту, -# в которой был запущен скрипт. - -# P.S. По возможности, сделайте кросс-платформенную реализацию. diff --git a/lesson05/home_work/hw05_normal.py b/lesson05/home_work/hw05_normal.py deleted file mode 100644 index 6c0d59d25..000000000 --- a/lesson05/home_work/hw05_normal.py +++ /dev/null @@ -1,12 +0,0 @@ -# Задача-1: -# Напишите небольшую консольную утилиту, позволяющую работать с папками текущей директории. -# Утилита должна иметь меню выбора действия, в котором будут пункты: -# 1. Перейти в папку -# 2. Просмотреть содержимое текущей папки -# 3. Удалить папку -# 4. Создать папку -# При выборе пунктов 1, 3, 4 программа запрашивает название папки -# и выводит результат действия: "Успешно создано/удалено/перешел", "Невозможно создать/удалить/перейти" - -# Для решения данной задачи используйте алгоритмы из задания easy, -# оформленные в виде соответствующих функций, и импортированные в данный файл из easy.py diff --git a/lesson05/home_work/test_2.txt b/lesson05/home_work/test_2.txt new file mode 100644 index 000000000..d4f5e2ea8 --- /dev/null +++ b/lesson05/home_work/test_2.txt @@ -0,0 +1,3 @@ +Hello +Chao +Hola diff --git a/lesson05/home_work/test_3.txt b/lesson05/home_work/test_3.txt new file mode 100644 index 000000000..eb3f04e74 --- /dev/null +++ b/lesson05/home_work/test_3.txt @@ -0,0 +1,4 @@ +Black:170 +Smith:210 +Potter:190 +Green:150 diff --git a/lesson05/home_work/test_4_input.txt b/lesson05/home_work/test_4_input.txt new file mode 100644 index 000000000..42184d9dd --- /dev/null +++ b/lesson05/home_work/test_4_input.txt @@ -0,0 +1,4 @@ +odin - 1 +dva - 2 +tri - 3 +chetyre - 4 diff --git a/lesson05/home_work/test_4_output.txt b/lesson05/home_work/test_4_output.txt new file mode 100644 index 000000000..4e9cc630f --- /dev/null +++ b/lesson05/home_work/test_4_output.txt @@ -0,0 +1,4 @@ +One - 1 +Two - 2 +Three - 3 +Four - 4 diff --git a/lesson06/home_work/hw06-1.py b/lesson06/home_work/hw06-1.py new file mode 100644 index 000000000..b6314a135 --- /dev/null +++ b/lesson06/home_work/hw06-1.py @@ -0,0 +1,22 @@ +# Задача-1: Создать класс TrafficLight (светофор) и определить у него один атрибут color (цвет) и метод running (запуск). +# Атрибут реализовать как приватный. В рамках метода реализовать переключение светофора в режимы: красный, желтый, зеленый. +# Время перехода между режимами должно составлять 7 и 2 секунды. Проверить работу примера, создав экземпляр и вызвав описанный метод. +import time +class TrafficLight: + _color = None + _colors = ['red', 'yellow', 'green'] + + def __init__(self): + self._color = self._colors[0] + + def running(self): + i=0 + while i<5: + for el in TrafficLight._colors : + print(el) + i+=1 + time.sleep(1) + +traffic = TrafficLight() +traffic.running() + diff --git a/lesson06/home_work/hw06-2.py b/lesson06/home_work/hw06-2.py new file mode 100644 index 000000000..bb4a747f6 --- /dev/null +++ b/lesson06/home_work/hw06-2.py @@ -0,0 +1,23 @@ +# Задание-1: Реализовать класс Road (дорога), в котором определить атрибуты: length (длина), width (ширина). +# Значения данных атрибутов должны передаваться при создании экземпляра класса. +# Атрибуты сделать защищенными. Определить метод расчета массы асфальта, необходимого для покрытия всего дорожного полотна. +# Использовать формулу: длина*ширина*масса асфальта для покрытия одного кв метра дороги асфальтом, толщиной в 1 см*число см толщины полотна. +# Проверить работу метода. Например: 20м*5000м*25кг*5см = 12500 т +class Road: + __length = None + __width = None + weigth = None + tickness = None + def __init__(self, length, width): + self.length = length + self.width = width + print('Creat road_to_village object') + + def intake(self): + self.weigth = 25 + self.tickness = 0.05 + intake = self.length * self.width * self.weigth * self.tickness / 1000 + print(f'Need {intake} ton for the building') + +road_to_village = Road(20000, 6) +road_to_village.intake() diff --git a/lesson06/home_work/hw06-3.py b/lesson06/home_work/hw06-3.py new file mode 100644 index 000000000..8fa062b8d --- /dev/null +++ b/lesson06/home_work/hw06-3.py @@ -0,0 +1,30 @@ +'''Реализовать базовый класс Worker (работник), в котором определить атрибуты: name, surname, position (должность), income (доход). +Последний атрибут должен быть защищенным и ссылаться на словарь, содержащий элементы: оклад и премия, например, {"profit": profit, "bonus": bonus}. +Создать класс Position (должность) на базе класса Worker. В классе Position реализовать методы получения полного имени сотрудника (get_full_name) +и дохода с учетом премии (get_full_profit). Проверить работу примера на реальных данных +(создать экземпляры класса Position, передать данные, проверить значения атрибутов, вызвать методы экземпляров).''' +class Worker: + name = None + surname = None + position = None + profit = None + bonus = None + + def __init__(self, name, surname, position, profit, bonus): + self.name = name + self.surname = surname + self.position = position + self.profit = profit + self.bonus = bonus + +class Position(Worker): + def __init__(self, name, surname, position, profit, bonus): + super().__init__(name, surname, position, profit, bonus) + def get_full_name(self): + return self.name + self.surname + def get_full_profit(self): + self.__income = {'profit': self.profit, 'bonus': self.bonus} + return self.__income + +manager = Position('Petr', 'Petrov', 'manager', 500, 100) +print(manager.get_full_name(), manager.get_full_profit()) \ No newline at end of file diff --git a/lesson06/home_work/hw06-4.py b/lesson06/home_work/hw06-4.py new file mode 100644 index 000000000..257331390 --- /dev/null +++ b/lesson06/home_work/hw06-4.py @@ -0,0 +1,46 @@ +'''Опишите несколько классов: TownCar, SportCar, WorkCar, PoliceCar. +У каждого класса должны быть следующие атрибуты: speed, color, name, is_police (булево). +А также несколько методов: go, stop, turn(direction), которые должны сообщать, что машина поехала, остановилась, повернула (куда)''' +class Cars: + name = None + speed = None + color = None + is_police = False + + def __init__(self, name, speed, color, is_police = False): + self.name = name + self.speed = speed + self.color = color + self.is_police = is_police + def go(self): + return "The car went" + def stop(self): + return "The car has stopped" + def turn(self, direction): + return "The car turned to " + direction + +class TownCar(Cars): + family = None + def __init__(self, name, speed, color, family = True): + super().__init__(name, speed, color) + self.family = family + +class SportCar(Cars): + def __init__(self, name, speed, color): + super().__init__(name, speed, color) + +class WorkCar(Cars): + def __init__(self, name, speed, color, is_police): + super().__init__(name, speed, color, is_police) + +class PoliceCar(Cars): + def __init__(self, name, speed, color): + super().__init__(name, speed, color, True) + +ford = TownCar('Ford', 60, 'black') +print(ford.name, ford.color, ford.speed, ford.is_police) +print(ford.go(), ford.turn('City'), ford.stop()) +sport = SportCar('Ford', 180, 'red') +work1 = WorkCar('Ford', 90, 'white', True) +work2 = WorkCar('Audi', 90, 'white', False) +police = PoliceCar('Ford', 180, 'red') diff --git a/lesson06/home_work/hw06-5.py b/lesson06/home_work/hw06-5.py new file mode 100644 index 000000000..635438ad8 --- /dev/null +++ b/lesson06/home_work/hw06-5.py @@ -0,0 +1,25 @@ +# Задание-1: Реализовать класс Stationery (канцелярская принадлежность). +# Определить в нем атрибут title (название) и метод draw (отрисовка). +# Метод выводит сообщение “Запуск отрисовки.” Создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер). +# В каждом из классов реализовать переопределение метода draw. Для каждого из классов методы должен выводить уникальное сообщение. +# Создать экземпляры классов и проверить, что выведет описанный метод для каждого экземпляра. +class Stationery: + atr_title = 'Title' + def draw(self): + print('Запуск отрисовки.') +class Pen(Stationery): + def draw(self): + print('Отрисовка ручкой') +class Pencil(Stationery): + def draw(self): + print('Отрисовка карандашом') +class Handle(Stationery): + def draw(self): + print('Отрисовка маркером') + +my_pen = Pen() +my_pencil = Pencil() +my_handle = Handle() +my_pen.draw() +my_pencil.draw() +my_handle.draw() \ No newline at end of file diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py deleted file mode 100644 index 547617f80..000000000 --- a/lesson06/home_work/hw06_easy.py +++ /dev/null @@ -1,8 +0,0 @@ -# Задача-1: Написать класс для фигуры-треугольника, заданного координатами трех точек. -# Определить методы, позволяющие вычислить: площадь, высоту и периметр фигуры. - - -# Задача-2: Написать Класс "Равнобочная трапеция", заданной координатами 4-х точек. -# Предусмотреть в классе методы: проверка, является ли фигура равнобочной трапецией; -# вычисления: длины сторон, периметр, площадь. - diff --git a/lesson06/home_work/hw06_hard.py b/lesson06/home_work/hw06_hard.py deleted file mode 100644 index 069742ce0..000000000 --- a/lesson06/home_work/hw06_hard.py +++ /dev/null @@ -1,10 +0,0 @@ -# Задание-1: Решите задачу (дублированную ниже): - -# Дана ведомость расчета заработной платы (файл "data/workers"). Рассчитайте зарплату всех работников, -# зная что они получат полный оклад, если отработают норму часов. Если же они отработали меньше нормы, -# то их ЗП уменьшается пропорционально, а за заждый час переработки они получают удвоенную ЗП, -# пропорциональную норме. -# Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" - -# С использованием классов. -# Реализуйте классы сотрудников так, чтобы на вход функции-конструктора каждый работник получал строку из файла diff --git a/lesson06/home_work/hw06_normal.py b/lesson06/home_work/hw06_normal.py deleted file mode 100644 index e5a1581e1..000000000 --- a/lesson06/home_work/hw06_normal.py +++ /dev/null @@ -1,13 +0,0 @@ -# Задание-1: -# Реализуйте описаную ниже задачу, используя парадигмы ООП: -# В школе есть Классы(5А, 7Б и т.д.), в которых учатся Ученики. У каждого ученика есть два Родителя(мама и папа). -# Также в школе преподают Учителя, один учитель может преподавать в неограниченном кол-ве классов -# свой определенный предмет. Т.е. Учитель Иванов может преподавать математику у 5А и 6Б, но больше математику не -# может преподавать никто другой. - -# Выбранная и заполненная данными структура должна решать следующие задачи: -# 1. Получить полный список всех классов школы -# 2. Получить список всех учеников в указанном классе(каждый ученик отображается в формате "Фамилия И.О.") -# 3. Получить список всех предметов указанного ученика (Ученик --> Класс --> Учителя --> Предметы) -# 4. Узнать ФИО родителей указанного ученика -# 5. Получить список всех Учителей, преподающих в указанном классе