From 844f4c537fe472706ead3abfb95ec791db47ce6f Mon Sep 17 00:00:00 2001 From: Artem Viznyuk Date: Tue, 9 Mar 2021 18:51:45 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=83=D1=80=D0=BE=D0=BA=D0=B0=206?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson6_1.py | 38 +++++++++++++++++++++++ lesson6_2.py | 23 ++++++++++++++ lesson6_3.py | 42 ++++++++++++++++++++++++++ lesson6_4.py | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lesson6_5.py | 47 +++++++++++++++++++++++++++++ 5 files changed, 235 insertions(+) create mode 100644 lesson6_1.py create mode 100644 lesson6_2.py create mode 100644 lesson6_3.py create mode 100644 lesson6_4.py create mode 100644 lesson6_5.py diff --git a/lesson6_1.py b/lesson6_1.py new file mode 100644 index 0000000..bc3f900 --- /dev/null +++ b/lesson6_1.py @@ -0,0 +1,38 @@ +# 1. Создать класс TrafficLight (светофор) и определить у него один атрибут color (цвет) и метод running (запуск). +# Атрибут реализовать как приватный. +# В рамках метода реализовать переключение светофора в режимы: красный, желтый, зеленый. +# Продолжительность первого состояния (красный) составляет 7 секунд, +# второго (желтый) — 2 секунды, третьего (зеленый) — на ваше усмотрение. +# Переключение между режимами должно осуществляться только в указанном порядке +# (красный, желтый, зеленый). Проверить работу примера, создав экземпляр и вызвав описанный метод. + + +import time + + +# Класс светофор. Цикл работы запускается методом running +class TrafficLight: + __color = "red" + + def running(self): + __color__ = "red" + print("red") + time.sleep(7) + __color__ = "yellow" + print("yellow") + time.sleep(2) + __color__ = "green" + print("green") + time.sleep(10) + + +tl = TrafficLight() + +while True: + action = input("Запустить сфетовор y/n? ") + if action.upper() == "Y": + { + tl.running() + } + else: + break diff --git a/lesson6_2.py b/lesson6_2.py new file mode 100644 index 0000000..66f1b71 --- /dev/null +++ b/lesson6_2.py @@ -0,0 +1,23 @@ +# 2. Реализовать класс Road (дорога), в котором определить атрибуты: +# length (длина), width (ширина). Значения данных атрибутов должны передаваться при создании экземпляра класса. +# Атрибуты сделать защищенными. +# Определить метод расчета массы асфальта, необходимого для покрытия всего дорожного полотна. +# Использовать формулу: длина * ширина * масса асфальта для покрытия одного кв метра дороги асфальтом, +# толщиной в 1 см * чи сло см толщины полотна. +# Проверить работу метода. +# Например: 20м * 5000м * 25кг * 5см = 12500 т + +class Road: + _lenght: int + _width: int + + def __init__(self, lenght, width): + self._lenght = lenght + self._width = width + + def calc_asphalt_mass(self, density, thick): + return self._lenght * self._width * density * thick + + +my_road = Road(5000, 20) +print(my_road.calc_asphalt_mass(25, 5)) \ No newline at end of file diff --git a/lesson6_3.py b/lesson6_3.py new file mode 100644 index 0000000..cc72125 --- /dev/null +++ b/lesson6_3.py @@ -0,0 +1,42 @@ +# 3. Реализовать базовый класс Worker (работник), в котором определить атрибуты: +# name, surname, position (должность), income (доход). +# Последний атрибут должен быть защищенным и ссылаться на словарь, содержащий элементы: +# оклад и премия, например, {"wage": wage, "bonus": bonus}. +# Создать класс Position (должность) на базе класса Worker. +# В классе Position реализовать методы получения полного имени сотрудника (get_full_name) и дохода +# с учетом премии (get_total_income). +# Проверить работу примера на реальных данных +# (создать экземпляры класса Position, передать данные, проверить значения атрибутов, вызвать методы экземпляров). + + +class Worker: + name: str + surname: str + position: str + _income = {} + + def __init__(self, new_name, new_surname, new_position, new_income): + self.name = new_name + self.surname = new_surname + self.position = new_position + self._income = new_income + + def get_income(self): + return int(self._income["wage"]) + int(self._income["bonus"]) + + +class Positon(Worker): + + def __init__(self, new_name, new_surname, new_position, new_income): + super().__init__(new_name, new_surname, new_position, new_income) + + def get_full_name(self): + return f"{self.name} {self.surname}" + + def get_total_income(self): + return self.get_income() + + +engineer = Positon("Иван", "Иванов", "Инженер", {"wage": 100000, "bonus": 50000}) +print(engineer.get_full_name()) +print(engineer.get_total_income()) diff --git a/lesson6_4.py b/lesson6_4.py new file mode 100644 index 0000000..15c95dc --- /dev/null +++ b/lesson6_4.py @@ -0,0 +1,85 @@ +# 4. Реализуйте базовый класс Car. У данного класса должны быть следующие атрибуты: +# speed, color, name, is_police (булево). А также методы: go, stop, turn(direction), +# которые должны сообщать, что машина поехала, остановилась, повернула (куда). +# Опишите несколько дочерних классов: TownCar, SportCar, WorkCar, PoliceCar. +# Добавьте в базовый класс метод show_speed, который должен показывать текущую скорость автомобиля. +# Для классов TownCar и WorkCar переопределите метод show_speed. +# При значении скорости свыше 60 (TownCar) и 40 (WorkCar) должно выводиться сообщение о превышении скорости. +# Создайте экземпляры классов, передайте значения атрибутов. +# Выполните доступ к атрибутам, выведите результат. +# Выполните вызов методов и также покажите результат. + +class Car: + speed: int + color: str + name: str + is_police: bool + + def go(self): + print("Машина поехала") + + def stop(self): + print("Машина остановилась") + + def turn(self, direction): + print(f"Машина повернула {direction}") + + def show_speed(self, speed): + self.speed = speed + print(f"Скорость машины {speed} км/ч") + + +class TownCar(Car): + def __init__(self, speed, color, name, is_police = False): + self.speed = speed + self.color = color + self.name = name + self.is_police = is_police + + def show_speed(self, speed): + self.speed = speed + if self.speed > 60: + print(f"Внимание: скорость превышена") + else: + print(f"Скорость машины {self.speed} км/ч") + + +class SportCar(Car): + def __init__(self, speed, color, name, is_police = False): + self.speed = speed + self.color = color + self.name = name + self.is_police = is_police + + +class WorkCar(Car): + def __init__(self, speed, color, name, is_police = False): + self.speed = speed + self.color = color + self.name = name + self.is_police = is_police + + def show_speed(self, speed): + self.speed = speed + if self.speed > 40: + print(f"Внимание: скорость превышена") + else: + print(f"Скорость машины {self.speed} км/ч") + + +class PoliceCar(Car): + def __init__(self, speed, color, name, is_police = True): + self.speed = speed + self.color = color + self.name = name + self.is_police = is_police + + +car1 = TownCar(40, "white", "Ford") +car1.go() +car1.show_speed(61) +car1.turn("направо") +car1.show_speed(59) + +print(f"цвет машины {car1.color}") +print(f"марка машины {car1.name}") \ No newline at end of file diff --git a/lesson6_5.py b/lesson6_5.py new file mode 100644 index 0000000..540d655 --- /dev/null +++ b/lesson6_5.py @@ -0,0 +1,47 @@ +# 5. Реализовать класс Stationery (канцелярская принадлежность). +# Определить в нем атрибут title (название) и метод draw (отрисовка). +# Метод выводит сообщение “Запуск отрисовки.” +# Создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер). +# В каждом из классов реализовать переопределение метода draw. +# Для каждого из классов методы должен выводить уникальное сообщение. +# Создать экземпляры классов и проверить, что выведет описанный метод для каждого экземпляра. + + +class Stationery: + title: str + + def draw(self): + print("Запуск отрисовки") + + +class Pen(Stationery): + def __init__(self): + self.title = "Ручка" + + def draw(self): + print("Рисуем ручкой") + + +class Pencil(Stationery): + def __init__(self): + self.title = "Карандаш" + + def draw(self): + print("Рисуем карандашом") + + +class Handle(Stationery): + def __init__(self): + self.title = "Маркер" + + def draw(self): + print("Рисуем маркером") + + +stat1 = Pencil() +print(stat1.title) +stat1.draw() + +stat2 = Handle() +print(stat2.title) +stat2.draw() From 4fcf91e381a5985a3293bdaefdff693bf52afba7 Mon Sep 17 00:00:00 2001 From: Artem Viznyuk Date: Mon, 22 Mar 2021 10:11:15 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=83=D1=80=D0=BE=D0=BA=D0=B0=208?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson8_1.py | 47 +++++++++++++++ lesson8_2.py | 36 +++++++++++ lesson8_3.py | 45 ++++++++++++++ lesson8_4.py | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++ lesson8_7.py | 38 ++++++++++++ 5 files changed, 333 insertions(+) create mode 100644 lesson8_1.py create mode 100644 lesson8_2.py create mode 100644 lesson8_3.py create mode 100644 lesson8_4.py create mode 100644 lesson8_7.py diff --git a/lesson8_1.py b/lesson8_1.py new file mode 100644 index 0000000..9f3c56f --- /dev/null +++ b/lesson8_1.py @@ -0,0 +1,47 @@ +# Реализовать класс «Дата», функция-конструктор которого должна принимать дату в виде строки формата +# «день-месяц-год». В рамках класса реализовать два метода. +# Первый, с декоратором @classmethod, должен извлекать число, месяц, год и преобразовывать их тип к типу «Число». +# Второй, с декоратором @staticmethod, должен проводить валидацию числа, +# месяца и года (например, месяц — от 1 до 12). Проверить работу полученной структуры на реальных данных. + +class Date: + + monthly_max = (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) + + def __init__(self, date_string): + self.date_string = date_string + + @classmethod + def get_ddmmyy(cls, date_string: str): + order_tuple = ("день", "месяц", "год") + string_list = date_string.split("-") + int_list = [] + for i in range(0, len(string_list)): + int_list.append(int(string_list[i])) + print(f"{order_tuple[i]}: {int_list[i]}") + return int_list + + + # проверка на високосный год(век) не осуществляется, в феврале макисмум 29 дней + @staticmethod + def is_valid_date(date_string: str): + local_date = Date(date_string) + date_list = local_date.get_ddmmyy(date_string) + print(date_list) + if not(1 <= date_list[1] <= 12): + print(f"в строке {date_string} неверно указан месяц") + return False + if date_list[0] < 1: + print(f"в строке {date_string} день месяца не может быть меньше 1") + return False + if date_list[0] > Date(date_string).monthly_max[date_list[1]]: + print(f"в строке {date_string} слишком много дней в месяце") + return False + return True + + + + +data = Date("11-05-1983") +#print(Date.get_ddmmyy("12-05-2017")) +print(Date.is_valid_date("32-01-2017")) \ No newline at end of file diff --git a/lesson8_2.py b/lesson8_2.py new file mode 100644 index 0000000..285c1f1 --- /dev/null +++ b/lesson8_2.py @@ -0,0 +1,36 @@ +# 2. Создайте собственный класс-исключение, обрабатывающий ситуацию деления на нуль. +# Проверьте его работу на данных, вводимых пользователем. +# При вводе пользователем нуля в качестве делителя программа должна +# корректно обработать эту ситуацию и не завершиться с ошибкой. + +class DivByZero(Exception): + def __init__(self, txt): + self.txt = txt + +while True: + inp_data = input("Введите делимое (q для выхода): ") + if inp_data == "q": + break + try: + delimoe = int(inp_data) + except ValueError: + print("Вы ввели не число") + continue + + inp_data = input("Введите делитель (q для выхода): ") + if inp_data == "q": + break + try: + delitel = int(inp_data) + except ValueError: + print("Вы ввели не число") + continue + + try: + if (delitel == 0): + raise DivByZero("Деление на ноль запрещено") + except DivByZero as err: + print(err) + continue + + print(f"Результат: {delimoe/delitel}") \ No newline at end of file diff --git a/lesson8_3.py b/lesson8_3.py new file mode 100644 index 0000000..692629a --- /dev/null +++ b/lesson8_3.py @@ -0,0 +1,45 @@ +# 3. Создайте собственный класс-исключение, который должен проверять содержимое списка на наличие +# только чисел. Проверить работу исключения на реальном примере. +# Необходимо запрашивать у пользователя данные и заполнять список. +# Класс-исключение должен контролировать типы данных элементов списка. +# Примечание: длина списка не фиксирована. Элементы запрашиваются бесконечно, пока пользователь +# сам не остановит работу скрипта, введя, например, команду “stop”. При этом скрипт завершается, +# сформированный список выводится на экран. +# Подсказка: для данного задания примем, что пользователь может вводить только числа и строки. +# При вводе пользователем очередного элемента необходимо реализовать проверку типа элемента и +# вносить его в список, только если введено число. Класс-исключение должен не позволить пользователю +# ввести текст (не число) и отобразить соответствующее сообщение. +# При этом работа скрипта не должна завершаться. + +def is_digit(string): + if string.isdigit(): + return True + else: + try: + float(string) + return True + except ValueError: + return False + + +class NotValidNum(Exception): + def __init__(self, txt): + self.txt = txt + + +number_list = [] +while True: + inp_data = input("Введите число (stop для выхода): ") + if inp_data == "stop": + break + try: + if not is_digit(inp_data): + raise NotValidNum("Ошибка при вводе числа") + number = float(inp_data) + number_list.append(number) + except NotValidNum as err: + print(err) + break + + +print(f"Результат: {number_list}") diff --git a/lesson8_4.py b/lesson8_4.py new file mode 100644 index 0000000..9bdec14 --- /dev/null +++ b/lesson8_4.py @@ -0,0 +1,167 @@ +# 4. Начните работу над проектом «Склад оргтехники». +# Создайте класс, описывающий склад. А также класс «Оргтехника», который будет базовым для классов-наследников. +# Эти классы — конкретные типы оргтехники (принтер, сканер, ксерокс). +# В базовом классе определить параметры, общие для приведенных типов. +# В классах-наследниках реализовать параметры, уникальные для каждого типа оргтехники. + +# 5. Продолжить работу над первым заданием. Разработать методы, отвечающие за приём оргтехники на склад +# и передачу в определенное подразделение компании. +# Для хранения данных о наименовании и количестве единиц оргтехники, а также других данных, +# можно использовать любую подходящую структуру, например словарь. + +# 6. Продолжить работу над вторым заданием. Реализуйте механизм валидации вводимых пользователем данных. +# Например, для указания количества принтеров, отправленных на склад, нельзя использовать строковый тип данных. +# Подсказка: постарайтесь по возможности реализовать в проекте «Склад оргтехники» максимум возможностей, +# изученных на уроках по ООП. + + +class Store: + + store_base = {} # device:quantity + + def __init__(self, str_address): + self.address = str_address + + def to_store(self, device, quantity): + current = self.store_base.get(device) + if current is None: # добавляем новую запись в книге + self.store_base[device] = quantity + print(f"Товар {device} доставлен на склад, было 0 стало {quantity}") + else: # добаляем единицы для данной позиции + self.store_base[device] = current + quantity + print(f"Товар {device} добавлен на склад, было {current} стало {current + quantity}") + + def from_store(self, device, quantity): + current = self.store_base.get(device) + if current is None: + print(f"Товар {device} отсутствует на складе") + elif current < quantity: + print(f"Товара {device} недостаточно для выдачи") + else: + self.store_base[device] = current - quantity + print(f"Товар {device} выдан в размере {quantity} ед.") + if self.store_base[device] == 0: + self.store_base.pop(device) + print(f"Товар {device} закончился") + +class Device: + brand: str + model: str + art: str + + def __init__(self, str_brand, str_model, str_art): + self.brand = str_brand + self.model = str_model + self.art = str_art + + +class Printer(Device): + type: str + dpi: str + paper_size: str + color: bool + + def __init__(self, str_brand, str_model, str_art, str_type, str_dpi, str_paper_size, str_color="True"): + self.brand = str_brand + self.model = str_model + self.art = str_art + self.type = str_type + self.dpi = str_dpi + self.paper_size = str_paper_size + self.color = bool(str_color) + + +class Scanner(Device): + type: str + dpi: str + paper_size: str + + def __init__(self, str_brand, str_model, str_art, str_type, str_dpi, str_paper_size): + self.brand = str_brand + self.model = str_model + self.art = str_art + self.type = str_type + self.dpi = str_dpi + self.paper_size = str_paper_size + + +class Xerox(Device): + type: str + paper_size: str + + def __init__(self, str_brand, str_model, str_art, str_type, str_paper_size): + self.brand = str_brand + self.model = str_model + self.art = str_art + self.type = str_type + self.paper_size = str_paper_size + + +class NotValidNum(Exception): + def __init__(self, txt): + self.txt = txt + + +xerox1 = Xerox("HP", "5501", "x1", "laser", "A4") +printer1 = Printer("Dell", "D401", "p1", "laser", "1080","A4") + +store = Store("Москва") + + +store.to_store(xerox1.art, 3) +print(store.store_base) + +store.to_store(xerox1.art, 2) +print(store.store_base) + +store.from_store(xerox1.art, 6) +print(store.store_base) + +store.from_store(printer1.art, 5) +print(store.store_base) + + +while True: + input_str = input('выберете действие: "+" - внести товар, "-" - изъять товар, "q" - выйти: ') + if input_str == "q": + break + if input_str == "+": # внесение на склад + device_str = input('ведите тип товара: принтер, ксерокс, сканер: ') + if device_str not in ["принтер", "ксерокс", "сканер"]: + print("Указан недопустимый вид товара") + continue + art_str = input('ведите артикул: ') + quantity_str = input('ведите количество: ') + new_device = Device("not defined", "not defined", art_str) + + try: + if not quantity_str.isdigit(): + raise NotValidNum("Ошибка при вводе числа") + quantity_int = int(quantity_str) + store.to_store(new_device.art, quantity_int) + print(store.store_base) + except NotValidNum as err: + print(err) + break + + if input_str == "-": # расход со склада + device_str = input('ведите тип товара: принтер, ксерокс, сканер: ') + if device_str not in ["принтер", "ксерокс", "сканер"]: + print("Указан недопустимый вид товара") + continue + art_str = input('ведите артикул: ') + quantity_str = input('ведите количество: ') + + try: + if not quantity_str.isdigit(): + raise NotValidNum("Ошибка при вводе числа") + quantity_int = int(quantity_str) + store.from_store(art_str, quantity_int) + print(store.store_base) + except NotValidNum as err: + print(err) + break + + +print(store.store_base) + diff --git a/lesson8_7.py b/lesson8_7.py new file mode 100644 index 0000000..f5c90d3 --- /dev/null +++ b/lesson8_7.py @@ -0,0 +1,38 @@ +# 7. Реализовать проект «Операции с комплексными числами». +# Создайте класс «Комплексное число», реализуйте перегрузку методов сложения и умножения комплексных чисел. +# Проверьте работу проекта, создав экземпляры класса (комплексные числа) и выполнив сложение и умножение +# созданных экземпляров. Проверьте корректность полученного результата. + +class Complex: + real: float + img: float + + def __init__(self, real, img): + self.real = real + self.img = img + + def __str__(self): + return (f"{self.real} + {self.img}i") + + def __add__(self, other): + return Complex(self.real + other.real, self.img + other.img) + + def __sub__(self, other): + return Complex(self.real - other.real, self.img - other.img) + + def __mul__(self, other): + real = self.real * other.real - self.img * other.img + img = self.img * other.real + self.real * other.img + return Complex(real, img) + + +c1 = Complex(2.0, 3.0) +print(c1) +c2 = Complex(1.0, 2.0) +print(c2) +c3 = c1 + c2 +print(c3) +c4 = c3 - c2 +print(c4) +c5 = c1 * c2 +print(c5) \ No newline at end of file From 7c6f54cf543c19c2344c9438cf571771474aff42 Mon Sep 17 00:00:00 2001 From: Artem Viznyuk Date: Sat, 17 Apr 2021 15:16:07 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=B2=20=D0=BD=D0=BE=D0=B2=D1=83=D1=8E=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=82=D0=BA=D1=83=20=D0=B4=D1=83=D0=B1=D0=BB=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=83=D1=80=D0=BE=D0=BA=D0=B0=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- step_3-copy.py | 113 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 step_3-copy.py diff --git a/step_3-copy.py b/step_3-copy.py new file mode 100644 index 0000000..c1286a2 --- /dev/null +++ b/step_3-copy.py @@ -0,0 +1,113 @@ +""" Функция для выполнения операции деления. """ + + +def f_division(delimoe, delitel): + if delitel == 0: + return None + return delimoe/delitel + + +""" Функция для вывода данных о пользователе. """ + + +def f_user_data(first_name, last_name, birth_year, city, email): + return (f"Mr./Mrs. {first_name} {last_name} born in {birth_year} from {city}. Write him/her at {email}") + + +""" Функция принимает три аргумента и возвращает сумму двух наибольших.""" + + +def f_sum_of_two(arg1, arg2, arg3): + arg_list = [arg1, arg2, arg3] + arg_list.sort() + return arg_list[1] + arg_list[2] + + +""" Функция принимает два аргумента a и b, возводит а в степень b. + + Известно, что b<0 """ + + +def f_minus_power(a, b): + if a <= 0: + return None + if b >= 0: + return None + result = 1.0 + for i in range(0, abs(b)): + result = result / a + + return result + + +""" Функция принимает слово, первую букву преобразует в большую.""" + + +def f_int(arg): + if len(arg) == 0: + return "no value in string" + elif len(arg) == 1: + return arg[0].upper() + else: + return arg[0].upper() + arg[1:] + + +# Деление с использованием функции +print("Деление с использованием функции") +value1 = int(input(f"Введите делимое : ")) +value2 = int(input(f"введите делитель : ")) +print(f"Результат : {f_division(value1, value2)}") +print() + +# Вывод данных о пользователе +print("Вывод данных о пользователе") +print(f_user_data(first_name="Ivan", last_name="Petrov", birth_year="2000", city="Boston", email="Ivan.Petrov@www.ru")) +print() + +# Вызов функции трех аргументов +print("Вызов функции трех аргументов") +value1 = int(input(f"Введите аргумент 1 : ")) +value2 = int(input(f"Введите аргумент 2 : ")) +value3 = int(input(f"Введите аргумент 3 : ")) +print(f"Результат : {f_sum_of_two(value1, value2, value3)}") +print() + +# возведение в степень +print("возведение в степень") +value1 = float(input(f"Введите вещественное положительное число : ")) +value2 = int(input(f"Введите целое отрицательное число : ")) +print(f"Результат : {f_minus_power(value1, value2)}") +print() + +# суммирование введенных чисел +sum = 0 +is_exit = False +while True: + if is_exit: break + str = input(f'Введите сроку чисел, q - для выхода, текущая сумма {sum} : ') + values_list = str.split() + for i in range(0, len(values_list)): + if values_list[i] == 'q': + is_exit = True + break + elif values_list[i].isdigit(): + try: + value = float(values_list[i]) + sum += value + except ValueError: + continue + +print(f"Результат : {sum}") +print() + +# первая буква - большая +str = input('Введите строку из слов, разделенных пробелами: ') +str_list = str.split() +str_result = "" +for i in range(0, len(str_list)): + str_result += f_int(str_list[i]) + " " + +str_result = str_result[0: -1] # убираем последний пробел +print(f"Результат : {str_result}") +print() +