From b2e8eccf7d5ba27981b43d9617ee72aff531a73b Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Wed, 8 Dec 2021 21:43:28 +0300 Subject: [PATCH 01/13] Initial commit --- 1_1.py | 16 ++++++++++++++++ 1_2.py | 11 +++++++++++ 1_3.py | 13 +++++++++++++ 1_4.py | 13 +++++++++++++ 1_5.py | 12 ++++++++++++ 1_6.py | 13 +++++++++++++ 6 files changed, 78 insertions(+) create mode 100644 1_1.py create mode 100644 1_2.py create mode 100644 1_3.py create mode 100644 1_4.py create mode 100644 1_5.py create mode 100644 1_6.py diff --git a/1_1.py b/1_1.py new file mode 100644 index 0000000..f7d6061 --- /dev/null +++ b/1_1.py @@ -0,0 +1,16 @@ +a = 1 +print(a) + +b = 1.1 +print(b) + +c = "Привет" +print(c) + +a = int(input("Введи свое целое число a: ")) +b = float(input("Введи свое вещественное число b: ")) +c = str(input("Введи свое выражение c: ")) + +print(a) +print(b) +print(c) \ No newline at end of file diff --git a/1_2.py b/1_2.py new file mode 100644 index 0000000..6c228a0 --- /dev/null +++ b/1_2.py @@ -0,0 +1,11 @@ +# Предлагаем ввести пользователю время в секундах +sec = int(input("Введи время в секундах: ")) + +# Вычисляем количество часов в секундах +hh = sec // 3600 +# Вычисляем количество минут в секундах +mm = (sec - hh * 3600) // 60 +# Вычисляем оставшееся количество секунд +ss = sec - mm * 60 - hh * 3600 +# Выводим количество секунд в формате чч:мм:сс +print(f"Количество секунд в формате чч::мм:сс - {hh}:{mm}:{ss}.") \ No newline at end of file diff --git a/1_3.py b/1_3.py new file mode 100644 index 0000000..d0adb5a --- /dev/null +++ b/1_3.py @@ -0,0 +1,13 @@ +# Предлагаем ввести пользователю число +number = input("Введи целое число n: ") + +# Переводим число n в целочисленное значение +n = int(number) +# Находим число nn и переводим в целочисленное значение +nn = int(f"{n}{n}") +# Находим число nnn и переводим в целочисленное значение +nnn = int(f"{n}{n}{n}") +# Вычисляем результат выражения по заданию +result = n + nn + nnn +# Выводим результат +print(f"Результат выражения: n + nn + nnn будет равен - {result}") \ No newline at end of file diff --git a/1_4.py b/1_4.py new file mode 100644 index 0000000..29b250f --- /dev/null +++ b/1_4.py @@ -0,0 +1,13 @@ +# Предлагаем ввести пользователю число +n = int(input("Введи целое положительное число n - ")) +# Вычисляем остаток деления от 10 +n1 = n % 10 +# Вычисляем целочисленное значение в результате деления на 10 +n = n // 10 +# Пока значение больше 0, выполняем условие +while n > 0: + # Если результат вычисления остатка больше предыдущего результата вычисления остатка, то вычисляем еще раз остаток + if n % 10 > n1: + n1 = n % 10 + n = n // 10 +print(f"Максимальная цифра введенного числа - {n1}") \ No newline at end of file diff --git a/1_5.py b/1_5.py new file mode 100644 index 0000000..46ef0b9 --- /dev/null +++ b/1_5.py @@ -0,0 +1,12 @@ +# Запрос у пользователя значения выручки и издержек фирмы +proceeds = int(input("Выручка фирмы: ")) +cost = int(input("Издержки производства: ")) + +if proceeds > cost: + # Подсчет рентабельности + profit = proceeds/cost + # Запрос количества сотрудников фирмы для подсчета прибыли на одного сотрудника + number = int(input(f"У вас прибыльная фирма с рентабельностью {profit}. Введите количество сотрудников: ")) + print(f"Прибыль фирмы в расчете на одного сотрудника составляет - {(proceeds-cost)/number}") +else: + print("У вас убыточная фирма") diff --git a/1_6.py b/1_6.py new file mode 100644 index 0000000..bba3083 --- /dev/null +++ b/1_6.py @@ -0,0 +1,13 @@ +# Спортсмен занимается ежедневными пробежками. В первый день его результат составил a километров. +# Каждый день спортсмен увеличивал результат на 10 % относительно предыдущего. +# Требуется определить номер дня, на который общий результат спортсмена составит не менее b километров. +# Программа должна принимать значения параметров a и b и выводить одно натуральное число — номер дня. + +a = int(input("Расстояние в первый день: ")) +b = int(input("Максимальное расстояние: ")) +count = 1 + +while a < b: + count += 1 + a = a + a * 0.1 +print(f"На {count}-ой день спортсмен достиг результата не менее {b} км.") \ No newline at end of file From 9f6486f80d119a132419de9cd8bbe8ffd06d767d Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Wed, 8 Dec 2021 21:52:49 +0300 Subject: [PATCH 02/13] Initial commit --- 1_1.py | 2 +- 1_2.py | 2 +- 1_3.py | 2 +- 1_4.py | 2 +- 1_6.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/1_1.py b/1_1.py index f7d6061..1776413 100644 --- a/1_1.py +++ b/1_1.py @@ -13,4 +13,4 @@ print(a) print(b) -print(c) \ No newline at end of file +print(c) diff --git a/1_2.py b/1_2.py index 6c228a0..3515029 100644 --- a/1_2.py +++ b/1_2.py @@ -8,4 +8,4 @@ # Вычисляем оставшееся количество секунд ss = sec - mm * 60 - hh * 3600 # Выводим количество секунд в формате чч:мм:сс -print(f"Количество секунд в формате чч::мм:сс - {hh}:{mm}:{ss}.") \ No newline at end of file +print(f"Количество секунд в формате чч::мм:сс - {hh}:{mm}:{ss}.") diff --git a/1_3.py b/1_3.py index d0adb5a..91db7af 100644 --- a/1_3.py +++ b/1_3.py @@ -10,4 +10,4 @@ # Вычисляем результат выражения по заданию result = n + nn + nnn # Выводим результат -print(f"Результат выражения: n + nn + nnn будет равен - {result}") \ No newline at end of file +print(f"Результат выражения: n + nn + nnn будет равен - {result}") diff --git a/1_4.py b/1_4.py index 29b250f..9b42de8 100644 --- a/1_4.py +++ b/1_4.py @@ -10,4 +10,4 @@ if n % 10 > n1: n1 = n % 10 n = n // 10 -print(f"Максимальная цифра введенного числа - {n1}") \ No newline at end of file +print(f"Максимальная цифра введенного числа - {n1}") diff --git a/1_6.py b/1_6.py index bba3083..371b9eb 100644 --- a/1_6.py +++ b/1_6.py @@ -10,4 +10,4 @@ while a < b: count += 1 a = a + a * 0.1 -print(f"На {count}-ой день спортсмен достиг результата не менее {b} км.") \ No newline at end of file +print(f"На {count}-ой день спортсмен достиг результата не менее {b} км.") From 3b3d4a2eb1de3d631b2f89332cd95c183cbd9f3e Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Thu, 9 Dec 2021 14:10:32 +0300 Subject: [PATCH 03/13] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83=20=D0=B2?= =?UTF-8?q?=D0=BE=20=D0=B2=D1=82=D0=BE=D1=80=D0=BE=D0=BC=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1_2.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/1_2.py b/1_2.py index 3515029..8e3af6e 100644 --- a/1_2.py +++ b/1_2.py @@ -2,10 +2,16 @@ sec = int(input("Введи время в секундах: ")) # Вычисляем количество часов в секундах -hh = sec // 3600 +h = sec // 3600 +# Переводим формат значения в чч +hh = "%.2d" % h # Вычисляем количество минут в секундах -mm = (sec - hh * 3600) // 60 +m = (sec - h * 3600) // 60 +# Переводим формат значения в мм +mm = "%.2d" % m # Вычисляем оставшееся количество секунд -ss = sec - mm * 60 - hh * 3600 +s = sec - m * 60 - h * 3600 +# Переводим формат значения в сс +ss = "%.2d" % s # Выводим количество секунд в формате чч:мм:сс print(f"Количество секунд в формате чч::мм:сс - {hh}:{mm}:{ss}.") From ce2944a2264e960aa2a04290112b8b6911d931cf Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Tue, 14 Dec 2021 23:38:25 +0300 Subject: [PATCH 04/13] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D1=87?= =?UTF-8?q?=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=81=D0=BE=20=D0=B2=D1=82=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=83=D1=80=D0=BE=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2_1.py | 11 +++++++++++ 2_2.py | 23 +++++++++++++++++++++++ 2_3.py | 12 ++++++++++++ 2_4.py | 8 ++++++++ 2_5.py | 21 +++++++++++++++++++++ 5 files changed, 75 insertions(+) create mode 100644 2_1.py create mode 100644 2_2.py create mode 100644 2_3.py create mode 100644 2_4.py create mode 100644 2_5.py diff --git a/2_1.py b/2_1.py new file mode 100644 index 0000000..48c893c --- /dev/null +++ b/2_1.py @@ -0,0 +1,11 @@ +# Создать список и заполнить его элементами различных типов данных. Реализовать скрипт +# проверки типа данных каждого элемента. Использовать функцию type() для проверки типа. +# Элементы списка можно не запрашивать у пользователя, а указать явно, в программе. + +list1 = [True, 5, 5.5, 'строка', None] +print(list1) +i = 0 + +while list1[i]: + i += 1 + print(f"{i}-й элемент списка - {type(list1[i])}") diff --git a/2_2.py b/2_2.py new file mode 100644 index 0000000..e04bc6f --- /dev/null +++ b/2_2.py @@ -0,0 +1,23 @@ +# Для списка реализовать обмен значений соседних элементов. Значениями обмениваются +# элементы с индексами 0 и 1, 2 и 3 и т. д. При нечётном количестве элементов последний +# сохранить на своём месте. Для заполнения списка элементов нужно использовать функцию +# input(). + +# Создаем пустой список +list1 = [] +# Определяем переменную для цикла заполнения элементов списка +x = 0 +# Запрашиваем у пользователя, какое количество элементов добавить в список +count = int(input("Сколько элементов добавить в список? --> ")) +# Заполняем список элементами +while x < count: + element = input(f"Заполни {x+1}-й элемент - ") + list1.append(element) + x += 1 +# Показываем список +print("Вот ваш список: ", list1) +# Применяем функцию range с циклом for для перезаписи объявленного списка +for i in range(1, len(list1), 2): + list1[i - 1], list1[i] = list1[i], list1[i - 1] + +print(f"Список после форматирования по заданию: {list1}") diff --git a/2_3.py b/2_3.py new file mode 100644 index 0000000..cfa558e --- /dev/null +++ b/2_3.py @@ -0,0 +1,12 @@ +# Пользователь вводит месяц в виде целого числа от 1 до 12. Сообщить, к какому времени года +# относится месяц (зима, весна, лето, осень). Напишите решения через list и dict. + +month = int(input("Введи номер месяца: ")) + +dict1 = {"Зима": [1, 2, 12], "Весна": [3, 4, 5], "Лето": [6, 7, 8], "Осень": [9, 10, 11]} + +if month in sum(dict1.values(), []): + for i in dict1.items(): + if month in i[1]: + print(i[0]) + break diff --git a/2_4.py b/2_4.py new file mode 100644 index 0000000..f255ccd --- /dev/null +++ b/2_4.py @@ -0,0 +1,8 @@ +# Пользователь вводит строку из нескольких слов, разделённых пробелами. Вывести каждое +# слово с новой строки. Строки нужно пронумеровать. Если слово длинное, выводить только +# первые 10 букв в слове. + +text = input("Введи текст: ").split() + +for n, i in enumerate(text, 1): + print(f"{n} - {i:.10}") diff --git a/2_5.py b/2_5.py new file mode 100644 index 0000000..2aeb266 --- /dev/null +++ b/2_5.py @@ -0,0 +1,21 @@ +# Реализовать структуру «Рейтинг», представляющую собой набор натуральных чисел, который +# не возрастает. У пользователя нужно запрашивать новый элемент рейтинга. Если в рейтинге +# существуют элементы с одинаковыми значениями, то новый элемент с тем же значением +# должен разместиться после них. +# Подсказка. Например, набор натуральных чисел: 7, 5, 3, 3, 2. +# Пользователь ввёл число 3. Результат: 7, 5, 3, 3, 3, 2. +# Пользователь ввёл число 8. Результат: 8, 7, 5, 3, 3, 2. +# Пользователь ввёл число 1. Результат: 7, 5, 3, 3, 2, 1. +# Набор натуральных чисел можно задать сразу в коде, например, my_list = [7, 5, 3, 3, 2]. + +list1 = [7, 5, 3, 3, 2] +number = int(input(f"Введи новый элемент рейтинга {list1}: ")) +i = 0 +for n in list1: + if number <= n: + i += 1 + else: + break + +list1.insert(i, number) +print(f"В результате рейтинг изменился - {list1}") \ No newline at end of file From c9d57ef3b7644ecf9f9d32b79b321bfe5c5daaa5 Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Tue, 14 Dec 2021 23:40:47 +0300 Subject: [PATCH 05/13] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20PEP8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2_5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2_5.py b/2_5.py index 2aeb266..f04df53 100644 --- a/2_5.py +++ b/2_5.py @@ -18,4 +18,4 @@ break list1.insert(i, number) -print(f"В результате рейтинг изменился - {list1}") \ No newline at end of file +print(f"В результате рейтинг изменился - {list1}") From 56acffc50e3b262138d6aee4778a46c679d50c28 Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Mon, 20 Dec 2021 02:05:58 +0300 Subject: [PATCH 06/13] =?UTF-8?q?=D0=94=D0=97=20=D0=BA=20=D1=83=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D1=83=20=E2=84=963?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3_1.py | 25 +++++++++++++++++++++++++ 3_2.py | 22 ++++++++++++++++++++++ 3_3.py | 17 +++++++++++++++++ 3_4.py | 30 ++++++++++++++++++++++++++++++ 3_5.py | 34 ++++++++++++++++++++++++++++++++++ 3_6.py | 25 +++++++++++++++++++++++++ 6 files changed, 153 insertions(+) create mode 100644 3_1.py create mode 100644 3_2.py create mode 100644 3_3.py create mode 100644 3_4.py create mode 100644 3_5.py create mode 100644 3_6.py diff --git a/3_1.py b/3_1.py new file mode 100644 index 0000000..3d3116a --- /dev/null +++ b/3_1.py @@ -0,0 +1,25 @@ +# Реализовать функцию, принимающую два числа (позиционные аргументы) и выполняющую их деление. +# Числа запрашивать у пользователя, предусмотреть обработку ситуации деления на ноль. + + +# Добавить функцию деления чисел +def func1(*args): + """Возвращает результат деления двух целых чисел. + + Именованные параметры: + number1 -- делимое + number2 -- делитель + + """ + number1 = int(input("Введи первый аргумент: ")) + number2 = int(input("Введи второй аргумент: ")) + try: + result = number1 / number2 + return print(result) + except ZeroDivisionError: + print("Деление на ноль запрещено!") + pass + + +# Вызываем функцию позиционными аргументами +func1() diff --git a/3_2.py b/3_2.py new file mode 100644 index 0000000..d7c1e48 --- /dev/null +++ b/3_2.py @@ -0,0 +1,22 @@ +# Выполнить функцию, которая принимает несколько параметров, описывающих данные +# пользователя: имя, фамилия, год рождения, город проживания, email, телефон. Функция +# должна принимать параметры как именованные аргументы. Осуществить вывод данных о +# пользователе одной строкой. + +# Запрос данных о пользователе +name_val = input("Введи имя: ") +surname_val = input("Введи фамилию: ") +year_val = input("Введи год рождения: ") +city_val = input("Введи город проживания: ") +e_mail_val = input("Введи адрес электронной почты: ") +tel_number_val = input("Введи номер телефона: ") + + +# Добавить функцию объединения вводимх аргументов в строку +def str1(name, surname, year, city, e_mail, tel_number): + result = f"{name} {surname}, {year} г.р., проживает в г.{city}, можно связаться по электронной почте - {e_mail} или позвонить по телефону - {tel_number}" + print(result) + + +# Вызываем функцию именованными аргументами +str1(name=name_val, surname=surname_val, year=year_val, city=city_val, e_mail=e_mail_val, tel_number=tel_number_val) diff --git a/3_3.py b/3_3.py new file mode 100644 index 0000000..0fe0221 --- /dev/null +++ b/3_3.py @@ -0,0 +1,17 @@ +# 3. Реализовать функцию my_func(), которая принимает три позиционных аргумента и +# возвращает сумму наибольших двух аргументов. + + +def my_func(*args): + num1 = int(input("Введи первый аргумент: ")) + num2 = int(input("Введи второй аргумент: ")) + num3 = int(input("Введи третий аргумент: ")) + # Определяем список для удаления минимального значения + result = [num1, num2, num3] + # Удаляем минимальное значения из списка + result.remove(min(result)) + # Вывод суммы оставшихся наибольших аргументов списка через lambda-функцию + return print((lambda list1: sum(list1))(result)) + + +my_func() diff --git a/3_4.py b/3_4.py new file mode 100644 index 0000000..c5725ad --- /dev/null +++ b/3_4.py @@ -0,0 +1,30 @@ +# Программа принимает действительное положительное число x и целое отрицательное число +# y. Выполните возведение числа x в степень y. Задание реализуйте в виде функции +# my_func(x, y). При решении задания нужно обойтись без встроенной функции возведения +# числа в степень. +# Подсказка: попробуйте решить задачу двумя способами. Первый — возведение в степень с +# помощью оператора **. Второй — более сложная реализация без оператора **, +# предусматривающая использование цикла. + +# Определяем функцию возвдения в степень +def my_func(x, y): + result = x ** y + return round(result, 2) + + +try: + # Определяем первый аргумент + num1 = float(input("Введи действительное положительное число: ")) + # Проверка ввода положительного числа + if num1 < 0: + num1 = float(input("Введено отрицательное число! Введи действительное положительное число: ")) + # Определяем второй аргумент + num2 = int(input("Введи целое отрицательное число: ")) + # Проверка ввода отрицательного числа + if num2 > 0: + num2 = int(input("Введено положительное число! Введи целое отрицательное число: ")) + # Вывод результата + print(f"Результат возведения числа {num1} в степень {num2}: {my_func(num1, num2)}") +except ValueError: + # Вывод сообщения об ошибке ввода + print("Ошибка формата! Необходимо ввести число.") diff --git a/3_5.py b/3_5.py new file mode 100644 index 0000000..bc872c1 --- /dev/null +++ b/3_5.py @@ -0,0 +1,34 @@ +"""Программа запрашивает у пользователя строку чисел, разделённых пробелом. При нажатии +Enter должна выводиться сумма чисел. Пользователь может продолжить ввод чисел, +разделённых пробелом и снова нажать Enter. Сумма вновь введённых чисел будет +добавляться к уже подсчитанной сумме. +Но если вместо числа вводится специальный символ, выполнение программы завершается. +Если специальный символ введён после нескольких чисел, то вначале нужно добавить сумму +этих чисел к полученной ранее сумме и после этого завершить программу.""" + + +# Определяем функцию +def func_sum(*args): + # Инициализируем переменную x + x = 0 + while True: + # Просьба пользователя ввести числа или выйти из программы + list1 = input("Введи числа через пробел. (Для выхода из программы нажми q): ").split() + # Цикл обработки условий + for num in list1: + # Специальный символ для выхода из программы в самом начале + if num == 'q': + return x + else: + try: + # Суммирование всех введенных значений + x += int(num) + except ValueError: + # Вывод сообщения при неккоректном вводе значения + print("Введено некорректное входное значение. Вводить строго целые числа!") + # Вывод результата + print(f"Результат суммирования значений: {x}") + + +# Вызов функции +func_sum() diff --git a/3_6.py b/3_6.py new file mode 100644 index 0000000..8705213 --- /dev/null +++ b/3_6.py @@ -0,0 +1,25 @@ +# Реализовать функцию int_func(), принимающую слова из маленьких латинских букв и +# возвращающую их же, но с прописной первой буквой. Например, print(int_func(‘text’)) -> Text. +# Продолжить работу над заданием. В программу должна попадать строка из слов, разделённых +# пробелом. Каждое слово состоит из латинских букв в нижнем регистре. Нужно сделать вывод +# исходной строки, но каждое слово должно начинаться с заглавной буквы. Используйте +# написанную ранее функцию int_func(). + +# Определяем функцию +def int_func(): + # Просьба пользователя о вводе слова или слов, разделенных пробелом с последующим форматирования строки + str1 = input("Введи слово или слова, разделенные пробелом: ").split() + # Определяем новую строку для записи форматированных значений + str2 = [] + # Цикл для форматирования каждого слова в списке + for n in str1: + # Форматирование слова + word = n.title() + # Добавление каждого слова в новый список + str2.append(word) + # Вывод отформатированного списка и преобразование списка в строку + print(f"Преобразовано по заданию: {' '.join(str2)}") + return + +# Вызов функции +int_func() From 29525aa9e76aed089222c476b1e8d8c934f4f675 Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Mon, 20 Dec 2021 14:53:24 +0300 Subject: [PATCH 07/13] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=BA=20?= =?UTF-8?q?=D0=94=D0=97=20=E2=84=963?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3_1.py | 15 ++++++--------- 3_3.py | 9 ++++----- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/3_1.py b/3_1.py index 3d3116a..d043381 100644 --- a/3_1.py +++ b/3_1.py @@ -3,23 +3,20 @@ # Добавить функцию деления чисел -def func1(*args): +def func1(num1, num2): """Возвращает результат деления двух целых чисел. Именованные параметры: - number1 -- делимое - number2 -- делитель + num1 -- делимое + num2 -- делитель """ - number1 = int(input("Введи первый аргумент: ")) - number2 = int(input("Введи второй аргумент: ")) try: - result = number1 / number2 + result = num1 / num2 return print(result) except ZeroDivisionError: print("Деление на ноль запрещено!") - pass -# Вызываем функцию позиционными аргументами -func1() +# Вызываем функцию двумя позиционными аргументами +func1(int(input("Введи первый аргумент: ")), int(input("Введи второй аргумент: "))) diff --git a/3_3.py b/3_3.py index 0fe0221..aa23786 100644 --- a/3_3.py +++ b/3_3.py @@ -2,10 +2,7 @@ # возвращает сумму наибольших двух аргументов. -def my_func(*args): - num1 = int(input("Введи первый аргумент: ")) - num2 = int(input("Введи второй аргумент: ")) - num3 = int(input("Введи третий аргумент: ")) +def my_func(num1, num2, num3): # Определяем список для удаления минимального значения result = [num1, num2, num3] # Удаляем минимальное значения из списка @@ -14,4 +11,6 @@ def my_func(*args): return print((lambda list1: sum(list1))(result)) -my_func() +# Вызов функции, которая принимает три позиционных аргумента +my_func(int(input("Введи первый аргумент: ")), int(input("Введи второй аргумент: ")), int(input("Введи третий " + "аргумент: "))) From efa02ea12c4131a50682fd6c82092ef39fdb56ea Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Thu, 23 Dec 2021 14:41:19 +0300 Subject: [PATCH 08/13] =?UTF-8?q?=D0=94=D0=97=20=D0=BA=20=D1=83=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D1=83=20=E2=84=964?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4_1.py | 15 +++++++++++++++ 4_2.py | 14 ++++++++++++++ 4_3.py | 4 ++++ 4_4.py | 16 ++++++++++++++++ 4_5.py | 16 ++++++++++++++++ 4_6.py | 33 +++++++++++++++++++++++++++++++++ 4_7.py | 32 ++++++++++++++++++++++++++++++++ 7 files changed, 130 insertions(+) create mode 100644 4_1.py create mode 100644 4_2.py create mode 100644 4_3.py create mode 100644 4_4.py create mode 100644 4_5.py create mode 100644 4_6.py create mode 100644 4_7.py diff --git a/4_1.py b/4_1.py new file mode 100644 index 0000000..50e71d0 --- /dev/null +++ b/4_1.py @@ -0,0 +1,15 @@ +# 1. Реализовать скрипт, в котором должна быть предусмотрена функция расчёта заработной +# платы сотрудника. Используйте в нём формулу: (выработка в часах*ставка в час) + премия. Во +# время выполнения расчёта для конкретных значений необходимо запускать скрипт с +# параметрами. + +from sys import argv +script_name, time_work, rate_hour, bonus = argv + +print("Выработка в часах: ", time_work) +print("Ставка в час:", rate_hour) +print("Премия: ", bonus) + +salary = (float(time_work) * float(rate_hour)) + float(bonus) + +print(f"Ваша зарплата: {salary}") diff --git a/4_2.py b/4_2.py new file mode 100644 index 0000000..209d1b2 --- /dev/null +++ b/4_2.py @@ -0,0 +1,14 @@ +# Представлен список чисел. Необходимо вывести элементы исходного списка, значения +# которых больше предыдущего элемента. + +# Импорт функции randint для генерации чисел для формирования списка +from random import randint +# Создание пустого списка +list1 = [] +# Цикл для заполнения списка случайными значениями в заданном диапазоне +for i in range(13): + list1.append(randint(0, 100)) +# Вывод сформированного списка +print(f"Исходный список из случайных чисел: {list1}") +# Форматирование по заданию и вывод списка +print(f"Результат форматирования списка: {[list1[n] for n in range(1, len(list1)) if list1[n] > list1[n - 1]]}") diff --git a/4_3.py b/4_3.py new file mode 100644 index 0000000..895c88d --- /dev/null +++ b/4_3.py @@ -0,0 +1,4 @@ +# Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. Решите задание в одну +# строку. Подсказка: используйте функцию range() и генератор. + +print([n for n in list(range(20, 240)) if (n % 20 == 0) or (n % 21 == 0)]) diff --git a/4_4.py b/4_4.py new file mode 100644 index 0000000..43b151a --- /dev/null +++ b/4_4.py @@ -0,0 +1,16 @@ +# Представлен список чисел. Определите элементы списка, не имеющие повторений. +# Сформируйте итоговый массив чисел, соответствующих требованию. Элементы выведите в +# порядке их следования в исходном списке. Для выполнения задания обязательно используйте генератор. +# Пример исходного списка: [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11]. +# Результат: [23, 1, 3, 10, 4, 11] + +list1 = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] +# Формируем словарь для определения списка без повторяющихся значений +dict1 = {el: 0 for el in list1} + +# Определяем количество каждого элемента в словаре +for n in list1: + dict1[n] += 1 +# print(dict1) +# Выводим список, при условии единичного элемента в словаре +print(f"Начальный список: {list1}. Отформатированный по заданию список: ", [i for i in dict1 if dict1[i] == 1]) diff --git a/4_5.py b/4_5.py new file mode 100644 index 0000000..0db685a --- /dev/null +++ b/4_5.py @@ -0,0 +1,16 @@ +# Реализовать формирование списка, используя функцию range() и возможности генератора. В +# список должны войти чётные числа от 100 до 1000 (включая границы). Нужно получить +# результат вычисления произведения всех элементов списка. +# Подсказка: использовать функцию reduce(). + +# Импорт функции reduce() +from functools import reduce + + +# Определяем функцию произведения всех элементов списка +def func1(prev_el, el): + return prev_el * el + + +# Использование функции reduce() и генератора и вывод результата выполнения +print(f"Результат произведения всех элементов списка от 100 до 1000 (включая границы): \n {reduce(func1, [n for n in (range(100, 1002, 2))])}") diff --git a/4_6.py b/4_6.py new file mode 100644 index 0000000..41c86f6 --- /dev/null +++ b/4_6.py @@ -0,0 +1,33 @@ +# Реализовать два небольших скрипта: +# ● итератор, генерирующий целые числа, начиная с указанного; +# ● итератор, повторяющий элементы некоторого списка, определённого заранее. +# Подсказка: используйте функцию count() и cycle() модуля itertools. Обратите внимание, что +# создаваемый цикл не должен быть бесконечным. Предусмотрите условие его завершения. +# Например, в первом задании выводим целые числа, начиная с 3. При достижении числа 10 — +# завершаем цикл. Вторым пунктом необходимо предусмотреть условие, при котором +# повторение элементов списка прекратится. + +# Импорт функции count и cycle +from itertools import count, cycle + +# Первый скрипт +# Ввод числа, с которого необходимо генерировать числа +number = int(input("Введи целое число, с которого необходимо генерировать числа: ")) +# Цикл с использованием count для вывода итерируемых чисел с условием завершения цикл. Для примера максимальное число 10 +for el in count(number): + if el > 10: + break + else: + print(el) + +# Второй скрипт +# Определяем список +list1 = ["int", "float", "string", "bool", "None"] +print(f"Дан список: {list1}. Вывод каждого элемента: ") +# Определяем переменную для формирования бесконечного цикла набора значения +n = cycle(list1) +# Условие, при котором повторяется вызов функции next столько раз, сколько элементов в списке +x = 0 +while x < len(list1): + print(next(n)) + x += 1 diff --git a/4_7.py b/4_7.py new file mode 100644 index 0000000..53110a5 --- /dev/null +++ b/4_7.py @@ -0,0 +1,32 @@ +# Реализовать генератор с помощью функции с ключевым словом yield, создающим очередное +# значение. При вызове функции должен создаваться объект-генератор. Функция вызывается +# следующим образом: for el in fact(n). Она отвечает за получение факториала числа. В цикле +# нужно выводить только первые n чисел, начиная с 1! и до n!. +# Подсказка: факториал числа n — произведение чисел от 1 до n. Например, факториал +# четырёх 4! = 1 * 2 * 3 * 4 = 24. + +from itertools import count +from functools import reduce + +n = int(input("Факториал числа: ")) +list1 = [] + + +def fact(number): + for el in count(1): + if el > n: + break + else: + yield list1.append(el) + + +# Формирование списка значений для вычисления факториала +for el in fact(n): + pass + +# Добавление условия вычисления факториала числа 0 +if n == 0: + print(f"Факториал числа {n} равен: 1") +else: + # Вычисление произведения всех элементов списка (факториал) и вывод результата + print(f"Факториал числа {n} равен: {reduce(lambda x, y: x * y, list1)}") From 822cdc87cc45f234a7bfd195a7cb9b77eea61f57 Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Mon, 10 Jan 2022 21:05:22 +0300 Subject: [PATCH 09/13] =?UTF-8?q?=D0=94=D0=97=20=D0=BA=20=D1=83=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D1=83=20=E2=84=965?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 5_1.py | 12 ++++++++++++ 5_2.py | 15 +++++++++++++++ 5_3.py | 22 ++++++++++++++++++++++ 5_4.py | 14 ++++++++++++++ 5_5.py | 10 ++++++++++ 5_6.py | 19 +++++++++++++++++++ 5_7.py | 22 ++++++++++++++++++++++ new_text_4.txt | 4 ++++ test.txt | 1 + text_1.txt | 3 +++ text_3.txt | 10 ++++++++++ text_4.txt | 4 ++++ text_6.txt | 7 +++++++ text_7.txt | 5 +++++ text_77.json | 12 ++++++++++++ 15 files changed, 160 insertions(+) create mode 100644 5_1.py create mode 100644 5_2.py create mode 100644 5_3.py create mode 100644 5_4.py create mode 100644 5_5.py create mode 100644 5_6.py create mode 100644 5_7.py create mode 100644 new_text_4.txt create mode 100644 test.txt create mode 100644 text_1.txt create mode 100644 text_3.txt create mode 100644 text_4.txt create mode 100644 text_6.txt create mode 100644 text_7.txt create mode 100644 text_77.json diff --git a/5_1.py b/5_1.py new file mode 100644 index 0000000..36e43ff --- /dev/null +++ b/5_1.py @@ -0,0 +1,12 @@ +# Создать программный файл в текстовом формате, записать в него построчно данные, +# вводимые пользователем. Об окончании ввода данных будет свидетельствовать пустая +# строка. + +with open("text_1.txt", "w", encoding='utf-8') as f_obj: + word = "" + while word != " ": + word = input("Введи что-нибудь: ") + if word == " ": + break + else: + f_obj.write(f"{word}\n") diff --git a/5_2.py b/5_2.py new file mode 100644 index 0000000..7fa14cb --- /dev/null +++ b/5_2.py @@ -0,0 +1,15 @@ +# Создать текстовый файл (не программно), сохранить в нём несколько строк, выполнить +# подсчёт строк и слов в каждой строке. + +# Подсчет строк в файле +with open("text_1.txt", encoding='utf-8') as f_obj: + count = 0 + for line in f_obj: + count = count + 1 + print(f"Количество строк в файле: {count}") + +# Подсчет слов в файле +file = open("text_1.txt") +data = file.read() +print(f"Количество слов в файле: {len(data.split())}") +file.close() \ No newline at end of file diff --git a/5_3.py b/5_3.py new file mode 100644 index 0000000..d1dc732 --- /dev/null +++ b/5_3.py @@ -0,0 +1,22 @@ +# Создать текстовый файл (не программно). Построчно записать фамилии сотрудников и +# величину их окладов (не менее 10 строк). Определить, кто из сотрудников имеет оклад менее +# 20 тысяч, вывести фамилии этих сотрудников. Выполнить подсчёт средней величины дохода +# сотрудников. +# Пример файла: +# Иванов 23543.12 +# Петров 13749.32 + + +def salary(): + dict1 = {} + with open("text_3.txt", "r", encoding="utf-8") as f_obj: + for line in f_obj: + dict1[line.split()[0]] = float(line.split()[1]) + print("ЗП меньше 20 000 рублей получают: ") + for name, el in dict1.items(): + if el < 20000: + print(name) + print(f"Средняя величина дохода - {sum(dict1.values()) / len(dict1)}") + + +salary() diff --git a/5_4.py b/5_4.py new file mode 100644 index 0000000..570060a --- /dev/null +++ b/5_4.py @@ -0,0 +1,14 @@ +# Создать (не программно) текстовый файл со следующим содержимым: +# One — 1 +# Two — 2 +# Three — 3 +# Four — 4 +# Напишите программу, открывающую файл на чтение и считывающую построчно данные. При +# этом английские числительные должны заменяться на русские. Новый блок строк должен +# записываться в новый текстовый файл. + +dict1 = {"One": "Один", "Two": "Два", "Three": "Три", "Four": "Четыре"} + +with open("new_text_4.txt", "w", encoding="utf-8") as f_obj: + with open("text_4.txt", encoding="utf-8") as f_obj1: + f_obj.writelines([line.replace(line.split()[0], dict1.get(line.split()[0])) for line in f_obj1]) diff --git a/5_5.py b/5_5.py new file mode 100644 index 0000000..2e2e6c0 --- /dev/null +++ b/5_5.py @@ -0,0 +1,10 @@ +# Создать (программно) текстовый файл, записать в него программно набор чисел, разделённых +# пробелами. Программа должна подсчитывать сумму чисел в файле и выводить её на экран. + +from random import randint + +with open("test.txt", "w", encoding="utf-8") as f_obj: + list1 = [randint(1, 10) for _ in range(10)] + f_obj.write(" ".join(map(str, list1))) + +print(f'Сумма случайного набора чисел - {sum(list1)}') diff --git a/5_6.py b/5_6.py new file mode 100644 index 0000000..fa8665f --- /dev/null +++ b/5_6.py @@ -0,0 +1,19 @@ +# Сформировать (не программно) текстовый файл. В нём каждая строка должна описывать +# учебный предмет и наличие лекционных, практических и лабораторных занятий по предмету. +# Сюда должно входить и количество занятий. Необязательно, чтобы для каждого предмета +# были все типы занятий. +# Сформировать словарь, содержащий название предмета и общее количество занятий по +# нему. Вывести его на экран. +# Примеры строк файла: Информатика: 100(л) 50(пр) 20(лаб). +# Физика: 30(л) — 10(лаб) +# Физкультура: — 30(пр) — +# Пример словаря: {“Информатика”: 170, “Физика”: 40, “Физкультура”: 30} + +dict1 = {} +nums = "1234567890 " + +with open("text_6.txt", encoding="utf-8") as f_obj: + for line in f_obj: + head, hours = line.split(":") + dict1[head] = sum(map(int, "".join([num for num in hours if num in nums]).split())) +print(dict1) \ No newline at end of file diff --git a/5_7.py b/5_7.py new file mode 100644 index 0000000..5206aa4 --- /dev/null +++ b/5_7.py @@ -0,0 +1,22 @@ +# Создать вручную и заполнить несколькими строками текстовый файл, в котором каждая +# строка будет содержать данные о фирме: название, форма собственности, выручка, издержки. +# Пример строки файла: firm_1 ООО 10000 5000. +# Необходимо построчно прочитать файл, вычислить прибыль каждой компании, а также +# среднюю прибыль. Если фирма получила убытки, в расчёт средней прибыли её не включать. +# Далее реализовать список. Он должен содержать словарь с фирмами и их прибылями, а +# также словарь со средней прибылью. Если фирма получила убытки, также добавить её в +# словарь (со значением убытков). +# Пример списка: [{“firm_1”: 5000, “firm_2”: 3000, “firm_3”: 1000}, {“average_profit”: 2000}]. +# Итоговый список сохранить в виде json-объекта в соответствующий файл. +# Пример json-объекта: +# [{"firm_1": 5000, "firm_2": 3000, "firm_3": 1000}, {"average_profit": 2000}] +# Подсказка: использовать менеджер контекста. + +import json + +with open("text_77.json", "w", encoding="utf-8") as f_obj: + with open("text_7.txt", encoding="utf-8") as f_obj1: + profit = {line.split()[0]: int(line.split()[2]) - int(line.split()[3]) for line in f_obj1} + result = [profit, {"average_profit": round(sum([int(i) for i in profit.values() if int(i) > 0]) / + len([int(i) for i in profit.values() if int(i) > 0]))}] + json.dump(result, f_obj, ensure_ascii=False, indent=4) diff --git a/new_text_4.txt b/new_text_4.txt new file mode 100644 index 0000000..3fc3169 --- /dev/null +++ b/new_text_4.txt @@ -0,0 +1,4 @@ +Один - 1 +Два - 2 +Три - 3 +Четыре - 4 \ No newline at end of file diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..2676838 --- /dev/null +++ b/test.txt @@ -0,0 +1 @@ +3 1 9 9 5 5 4 6 9 8 \ No newline at end of file diff --git a/text_1.txt b/text_1.txt new file mode 100644 index 0000000..3e47821 --- /dev/null +++ b/text_1.txt @@ -0,0 +1,3 @@ +12 +1234 +йцук diff --git a/text_3.txt b/text_3.txt new file mode 100644 index 0000000..9edd785 --- /dev/null +++ b/text_3.txt @@ -0,0 +1,10 @@ +Иванов 10000.0 +Петров 15000.0 +Сидоров 25000.1 +Иванова 15000.7 +Петрова 19000.9 +Сидорова 26000.1 +Октябрьский 30000.5 +Петровский 26000.4 +Знаменский 12000.0 +Корецкий 31000.9 \ No newline at end of file diff --git a/text_4.txt b/text_4.txt new file mode 100644 index 0000000..48de98b --- /dev/null +++ b/text_4.txt @@ -0,0 +1,4 @@ +One - 1 +Two - 2 +Three - 3 +Four - 4 \ No newline at end of file diff --git a/text_6.txt b/text_6.txt new file mode 100644 index 0000000..65f0079 --- /dev/null +++ b/text_6.txt @@ -0,0 +1,7 @@ +Fizra: - 30(пр) - +Math: 10(л) 50(пр) - +History: 50(л) - - +Physics: 70(л) 20(пр) 18(лаб) +Informatics: 40(л) 12(пр) 20(лаб) +Literature: 10(л) - 8(лаб) +Russian: - - 90(лаб) \ No newline at end of file diff --git a/text_7.txt b/text_7.txt new file mode 100644 index 0000000..f2bacc1 --- /dev/null +++ b/text_7.txt @@ -0,0 +1,5 @@ +Brooms ПАО 2500000 500000 +Tandoor АО 1245000 1880000 +Honey-cake ЗАО 5250000 455000 +Matrioshka OOO 4770000 511000 +Сказка ИП 10500000 5000000 \ No newline at end of file diff --git a/text_77.json b/text_77.json new file mode 100644 index 0000000..a19baab --- /dev/null +++ b/text_77.json @@ -0,0 +1,12 @@ +[ + { + "Brooms": 2000000, + "Tandoor": -635000, + "Honey-cake": 4795000, + "Matrioshka": 4259000, + "Сказка": 5500000 + }, + { + "average_profit": 4138500 + } +] \ No newline at end of file From 35dc175bfcfdac10cb33e3a22ae6b1a5a45e63eb Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Tue, 11 Jan 2022 11:12:18 +0300 Subject: [PATCH 10/13] =?UTF-8?q?=D0=94=D0=97=20=D0=BA=20=D1=83=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D1=83=20=E2=84=966?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 6_1.py | 32 +++++++++++++++++++++++++ 6_2.py | 21 +++++++++++++++++ 6_3.py | 31 ++++++++++++++++++++++++ 6_4.py | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6_5.py | 42 +++++++++++++++++++++++++++++++++ 5 files changed, 200 insertions(+) create mode 100644 6_1.py create mode 100644 6_2.py create mode 100644 6_3.py create mode 100644 6_4.py create mode 100644 6_5.py diff --git a/6_1.py b/6_1.py new file mode 100644 index 0000000..1cce84d --- /dev/null +++ b/6_1.py @@ -0,0 +1,32 @@ +# Создать класс TrafficLight (светофор). +# ● определить у него один атрибут color (цвет) и метод running (запуск); +# ● атрибут реализовать как приватный; +# ● в рамках метода реализовать переключение светофора в режимы: красный, жёлтый, +# зелёный; +# ● продолжительность первого состояния (красный) составляет 7 секунд, второго +# (жёлтый) — 2 секунды, третьего (зелёный) — на ваше усмотрение; +# переключение между режимами должно осуществляться только в указанном порядке +# (красный, жёлтый, зелёный); +# ● проверить работу примера, создав экземпляр и вызвав описанный метод. +# Задачу можно усложнить, реализовав проверку порядка режимов. При его нарушении +# выводить соответствующее сообщение и завершать скрипт. + +from time import sleep + + +class TrafficLight: + + def run(self): + while True: + print("Красный") + sleep(7) + print("Желтый") + sleep(2) + print("Зеленый") + sleep(4) + print("Желтый") + sleep(2) + + +TL = TrafficLight() +TL.run() diff --git a/6_2.py b/6_2.py new file mode 100644 index 0000000..dbe912c --- /dev/null +++ b/6_2.py @@ -0,0 +1,21 @@ +# Реализовать класс Road (дорога). +# ● определить атрибуты: length (длина), width (ширина); +# ● значения атрибутов должны передаваться при создании экземпляра класса; +# ● атрибуты сделать защищёнными; +# ● определить метод расчёта массы асфальта, необходимого для покрытия всей дороги; +# ● использовать формулу: длина*ширина*масса асфальта для покрытия одного кв. метра +# дороги асфальтом, толщиной в 1 см*число см толщины полотна; +# ● проверить работу метода. +# Например: 20 м*5000 м*25 кг*5 см = 12500 т. + +class Road: + def __init__(self, length, width): + self._length = length + self._width = width + + def result(self, weigth=25, thickness = 5): + return f"{self._width} м * {self._length} м * {weigth} кг * {thickness} см = "\ + f"{(self._length * self._width * weigth * thickness) / 1000} т" + +Road1 = Road(5000, 20) +print(Road1.result()) diff --git a/6_3.py b/6_3.py new file mode 100644 index 0000000..aba9899 --- /dev/null +++ b/6_3.py @@ -0,0 +1,31 @@ +# Реализовать базовый класс Worker (работник). +# ● определить атрибуты: name, surname, position (должность), income (доход); +# ● последний атрибут должен быть защищённым и ссылаться на словарь, содержащий +# элементы: оклад и премия, например, {"wage": wage, "bonus": bonus}; +# ● создать класс Position (должность) на базе класса Worker; +# ● в классе Position реализовать методы получения полного имени сотрудника +# (get_full_name) и дохода с учётом премии (get_total_income); +# ● проверить работу примера на реальных данных: создать экземпляры класса Position, +# передать данные, проверить значения атрибутов, вызвать методы экземпляров. + +# Базовый класс Worker +class Worker: + def __init__(self, name, surname, position, wage, bonus): + self.name = name + self.surname = surname + self.position = position + self.income = {"profit": wage, "bonus": bonus} + + +class Position(Worker): + def get_full_name(self): + return f"{self.name} {self.surname}" + + def get_total_income(self): + return f"{sum(self.income.values())}" + + +worker = Position("Nate", "Diaz", "Engineer", 65000, 19500) +print(worker.get_full_name()) +print(worker.position) +print(worker.get_total_income()) \ No newline at end of file diff --git a/6_4.py b/6_4.py new file mode 100644 index 0000000..eca1214 --- /dev/null +++ b/6_4.py @@ -0,0 +1,74 @@ +# Реализуйте базовый класс Car. +# ● у класса должны быть следующие атрибуты: speed, color, name, is_police (булево). А +# также методы: go, stop, turn(direction), которые должны сообщать, что машина +# поехала, остановилась, повернула (куда); +# ● опишите несколько дочерних классов: TownCar, SportCar, WorkCar, PoliceCar; +# ● добавьте в базовый класс метод show_speed, который должен показывать текущую +# скорость автомобиля; +# ● для классов TownCar и WorkCar переопределите метод show_speed. При значении +# скорости свыше 60 (TownCar) и 40 (WorkCar) должно выводиться сообщение о +# превышении скорости. +# Создайте экземпляры классов, передайте значения атрибутов. Выполните доступ к атрибутам, +# выведите результат. Вызовите методы и покажите результат. + +from random import choice + + +class Car: + direction = ["север", "запад", "юг", "восток"] + + def __init__(self, name, color, speed, is_police=False): + self.name = name + self.color = color + self.speed = speed + self.is_police = is_police + print(f"{color} автомобиль {name} полицеский? {is_police}") + + def go(self): + print(f"{self.name} автомобиль поехал") + + def stop(self): + print(f"{self.name} автомобиль остановился") + + def turn(self): + print(f"{self.name} автомобиль повернул на {choice(self.direction)}") + + def speed_(self): + return f"{self.name} автомобиль едет со скоростью {self.speed}" + + +class TownCar(Car): + + def speed_(self): + return f"{self.name} скорость автомобиля - {self.speed}. Скорость превышена" if self.speed > 60 else super().speed_() + + +class WorkCar(Car): + + def speed_(self): + return f"{self.name} скорость автомобиля - {self.speed}. Скорость превышена" if self.speed > 40 else super().speed_() + +class SportCar(Car): + """Спорткар""" + + +class PoliceCar(Car): + """Полицейская машина""" + + def __init__(self, name, color, speed): + super().__init__(name, color, speed, is_police=True) + + +police = PoliceCar('"Полицейская машина"', "черный", 80) +work = WorkCar("Рабочая машина", "синий", 40) +sport = SportCar("Спорткар", "красный", 150) +town = TownCar("Городская машина", "белый", 70) + +list1 = [police, work, sport, town] + +for i in list1: + i.go() + print(i.speed_()) + i.turn() + i.stop() + print() diff --git a/6_5.py b/6_5.py new file mode 100644 index 0000000..e8f89a0 --- /dev/null +++ b/6_5.py @@ -0,0 +1,42 @@ +# Реализовать класс Stationery (канцелярская принадлежность). +# ● определить в нём атрибут title (название) и метод draw (отрисовка). Метод выводит +# сообщение «Запуск отрисовки»; +# ● создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер); +# ● в каждом классе реализовать переопределение метода draw. Для каждого класса +# метод должен выводить уникальное сообщение; +# ● создать экземпляры классов и проверить, что выведет описанный метод для каждого +# экземпляра. + +class Stationery: + def __init__(self, title="Запуск отрисовки"): + self.title = title + + def draw(self): + print({self.title}) + + +# Создание дочерних классов: Pen (ручка), Pencil (карандаш), Handle (маркер) +class Pen(Stationery): + def draw(self): + print(f"Начало отрисовки с помощью {self.title}") + + +class Pencil(Stationery): + def draw(self): + print(f"Начало отрисовки с помощью {self.title}") + + +class Marker(Stationery): + def draw(self): + print(f"Начало отрисовки с помощью {self.title}") + + +stat = Stationery() +pen = Pen("ручки") +pencil = Pencil("карандаша") +marker = Marker("маркера") + +list1 = [stat, pen, pencil, marker] +# Проверка метода для каждого экземпляра +for i in list1: + i.draw() From 080164e234d89189596cb5ec5fa9d1a35273bb64 Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Wed, 12 Jan 2022 14:33:51 +0300 Subject: [PATCH 11/13] =?UTF-8?q?=D0=94=D0=97=20=D0=BA=20=D1=83=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D1=83=20=E2=84=967?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 7_1.py | 37 +++++++++++++++++++++++++++++++++++++ 7_2.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 7_3.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 7_1.py create mode 100644 7_2.py create mode 100644 7_3.py diff --git a/7_1.py b/7_1.py new file mode 100644 index 0000000..fb6705a --- /dev/null +++ b/7_1.py @@ -0,0 +1,37 @@ +# Реализовать класс Matrix (матрица). Обеспечить перегрузку конструктора класса (метод +# __init__()), который должен принимать данные (список списков) для формирования матрицы. +# Подсказка: матрица — система некоторых математических величин, расположенных в виде +# прямоугольной схемы. +# Примеры матриц: 3 на 2, 3 на 3, 2 на 4. +# Следующий шаг — реализовать перегрузку метода __str__() для вывода матрицы в +# привычном виде. +# Далее реализовать перегрузку метода __add__() для реализации операции сложения двух +# объектов класса Matrix (двух матриц). Результатом сложения должна быть новая матрица. +# Подсказка: сложение элементов матриц выполнять поэлементно — первый элемент первой +# строки первой матрицы складываем с первым элементом первой строки второй матрицы и т.д. + +a = [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]] +b = [[4, 4, 4, 4], [5, 5, 5, 5], [6, 6, 6, 6]] + + +class Matrix: + def __init__(self, list1): + self.list1 = list1 + + def __str__(self): + return '\n'.join(map(str, self.list1)) + + def __add__(self, other): + c = [] + for i in range(len(self.list1)): + c.append([]) + for j in range(len(self.list1[0])): + c[i].append(self.list1[i][j] + other.list1[i][j]) + return '\n'.join(map(str, c)) + + +matrix1 = Matrix(a) +matrix2 = Matrix(b) +print(f"Матрица №1\n{matrix1}\n{'-' * 20}") +print(f"Матрица №2\n{matrix2}\n{'-' * 20}") +print(f"Матрица №1 + Матрица №2\n{matrix1 + matrix2}") diff --git a/7_2.py b/7_2.py new file mode 100644 index 0000000..962c22a --- /dev/null +++ b/7_2.py @@ -0,0 +1,49 @@ +# Реализовать проект расчета суммарного расхода ткани на производство одежды. Основная +# сущность (класс) этого проекта — одежда, которая может иметь определенное название. К +# типам одежды в этом проекте относятся пальто и костюм. У этих типов одежды существуют +# параметры: размер (для пальто) и рост (для костюма). Это могут быть обычные числа: V и +# H, соответственно. +# Для определения расхода ткани по каждому типу одежды использовать формулы: для пальто +# (V/6.5 + 0.5), для костюма (2*H + 0.3). Проверить работу этих методов на реальных данных. +# Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке +# знания: реализовать абстрактные классы для основных классов проекта, проверить на +# практике работу декоратора @property. + +from abc import ABC, abstractmethod + + +class Clothe(ABC): + result = 0 + + def __init__(self, param): + self.param = param + + @property + @abstractmethod + def consumption(self): + pass + + def __add__(self, other): + Clothe.result += self.consumption + other.consumption + return Costume(0) + + def __str__(self): + res = Clothe.result + Clothe.result = 0 + return f"{res}" + + +class Coat(Clothe): + @property + def consumption(self): + return round(self.param / 6.5) + 0.5 + + +class Costume(Clothe): + @property + def consumption(self): + return round((2 * self.param + 0.3) / 100) + +coat = Coat(42) +costume = Costume(170) +print(f"Расход ткани по каждому типу одежды - {coat + costume}") diff --git a/7_3.py b/7_3.py new file mode 100644 index 0000000..c0e206d --- /dev/null +++ b/7_3.py @@ -0,0 +1,42 @@ +# Реализовать программу работы с органическими клетками, состоящими из ячеек. Необходимо +# создать класс Клетка. В его конструкторе инициализировать параметр, соответствующий +# количеству ячеек клетки (целое число). В классе должны быть реализованы методы +# перегрузки арифметических операторов: сложение (__add__()), вычитание (__sub__()), +# умножение (__mul__()), деление (__truediv__()). Данные методы должны применяться только +# к клеткам и выполнять увеличение, уменьшение, умножение и целочисленное (с округлением +# до целого) деление клеток, соответственно. + +class Cell: + def __init__(self, num): + self.num = num + + def make_order(self, rows): + return '\n'.join(['@' * rows for _ in range(self.num // rows)]) + '\n' + '@' * (self.num % rows) + + def __str__(self): + return f"{self.num}" + + def __add__(self, other): + print("Сумма - ") + return Cell(self.num + other.num) + + def __sub__(self, other): + print("Вычитание - ") + return Cell(self.num - other.nums) if self.num - other.num > 0 else "Вычитание невозможно" + + def __mul__(self, other): + print("Умножение - ") + return Cell(self.num * other.num) + + def __floordiv__(self, other): + print("Целочисленное деление - ") + return Cell(self.num // other.num) + + +cell_1 = Cell(15) +cell_2 = Cell(24) +print(cell_1 + cell_2) +print(cell_1 - cell_2) +print(cell_1 * cell_2) +print(cell_1 // cell_2) +print(cell_2.make_order(7)) \ No newline at end of file From e51b9d1d6006e1f66bf0b77fc2602533ad0be2d3 Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Fri, 14 Jan 2022 23:54:57 +0300 Subject: [PATCH 12/13] =?UTF-8?q?=D0=94=D0=97=20=D0=BA=20=D1=83=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D1=83=20=E2=84=968?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 8_2.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 8_2.py diff --git a/8_2.py b/8_2.py new file mode 100644 index 0000000..cd90498 --- /dev/null +++ b/8_2.py @@ -0,0 +1,23 @@ +# Создайте собственный класс-исключение, обрабатывающий ситуацию деления на ноль. +# Проверьте его работу на данных, вводимых пользователем. При вводе нуля в качестве +# делителя программа должна корректно обработать эту ситуацию и не завершиться с ошибкой. + +class myZeroDivisionError(Exception): + def __init__(self, txt): + self.txt = txt + + +inp_data_1 = input("Введите числитель: ") +inp_data_2 = input("Введите знаменатель: ") + +try: + inp_data_1 = int(inp_data_1) + inp_data_2 = int(inp_data_2) + if inp_data_2 == 0: + raise myZeroDivisionError("Деление на ноль запрещено!") +except ValueError: + print("Вы ввели не число") +except myZeroDivisionError as err: + print(err) +else: + print(f"Результат деления равен: {inp_data_1 / inp_data_2}") From 2e0882d6b6232ea612ba7b029a9cfdcd7546f159 Mon Sep 17 00:00:00 2001 From: KALMYKOV Date: Wed, 19 Jan 2022 00:25:41 +0300 Subject: [PATCH 13/13] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=201=20=D0=B8=203=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BA=20=D1=83=D1=80=D0=BE=D0=BA=D1=83=20=E2=84=968?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 8_1.py | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 8_3.py | 47 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 8_1.py create mode 100644 8_3.py diff --git a/8_1.py b/8_1.py new file mode 100644 index 0000000..deee86a --- /dev/null +++ b/8_1.py @@ -0,0 +1,71 @@ +# Реализовать класс «Дата», функция-конструктор которого должна принимать дату в виде +# строки формата «день-месяц-год». В рамках класса реализовать два метода. Первый, с +# декоратором @classmethod. Он должен извлекать число, месяц, год и преобразовывать их тип +# к типу «Число». Второй, с декоратором @staticmethod, должен проводить валидацию числа, +# месяца и года (например, месяц — от 1 до 12). Проверить работу полученной структуры на +# реальных данных. + +class Data: + data = [] + + def __init__(self, day, month, year): + self.day = day + self.month = month + self.year = year + + @classmethod + def set(cls, data1): + Data.data = input(f"Введи дату в формате день-месяц-год: ").split('-') + d = int(Data.data[0]) + m = int(Data.data[1]) + y = int(Data.data[2]) + return cls(d, m, y) + + # Валидация месяца + @staticmethod + def validation_month(obj): + if 0 < obj.month < 12: + print("Месяц принят") + else: + print("Неправильный ввод месяца") + + # Валидация дня + @staticmethod + def validation_day(obj): + # Создаем списки месяцев с одинаковыми числами в 2022 году + list1 = [1, 3, 5, 7, 8, 10, 12] + list2 = [4, 6, 9, 11] + list3 = [2] + # Проверка первого списка месяцев + for mon in list1: + if obj.month == mon: + if 1 <= obj.day <= 31: + print("Число принято") + else: + print("Такого числа нет") + # Проверка второго списка месяцев + for mon in list2: + if obj.month == mon: + if 1 <= obj.day <= 30: + print("Число принято") + else: + print("Такого числа нет") + # Проверка третьего списка месяцев + for mon in list3: + if obj.month == mon: + if 1 <= obj.day <= 28: + print("Число принято") + else: + print("Такого числа нет") + + # Валидация года + @staticmethod + def validation_year(obj): + if 0 <= obj.year <= 2022: + print("Год принят") + else: + print("В будущее не стоит смотреть") + + +x = Data.set(Data.data) +Data.validation_day(x), Data.validation_month(x), Data.validation_year(x) diff --git a/8_3.py b/8_3.py new file mode 100644 index 0000000..e2fc87e --- /dev/null +++ b/8_3.py @@ -0,0 +1,47 @@ +# Создайте собственный класс-исключение, который должен проверять содержимое списка на +# наличие только чисел. Проверить работу исключения на реальном примере. Запрашивать у +# пользователя данные и заполнять список необходимо только числами. Класс-исключение +# должен контролировать типы данных элементов списка. +# Примечание: длина списка не фиксирована. Элементы запрашиваются бесконечно, пока +# пользователь сам не остановит работу скрипта, введя, например, команду «stop». При этом +# скрипт завершается, сформированный список с числами выводится на экран. + +class Only_nums(Exception): + def __init__(self, txt): + self.txt = txt + + # Метод проверки вводного значения на число + @staticmethod + def is_digit(string): + if string.isdigit(): + return True + else: + try: + float(string) + return True + except ValueError: + return False + + # Определяем функцию + def func_sum(*args): + my_list = [] + while True: + # Просьба пользователя ввести числа или выйти из программы + list1 = input("Введи число. (Для выхода из программы введи stop): ").split() + # Цикл обработки условий + for num in list1: + # Специальный символ для выхода из программы + if num == 'stop': + print(f"Вот список твоих чисел - {my_list}") + return + else: + try: + if not Only_nums.is_digit(num): + raise Only_nums("Введи число!") + except Only_nums as err: + print(err) + else: + my_list.append(num) + + +Only_nums.func_sum()