Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Python 2 / Лаба 5 / Лабораторная №5

.docx
Скачиваний:
0
Добавлен:
10.05.2024
Размер:
232.41 Кб
Скачать

Лабораторная работа №5

Цель работы: Ознакомление и практическое использование классов Python.

Задание на работу:

Решить задачи по варианту, учитывая требования к программе. Для задач номер варианта соответствует номеру в списке группы, если вариант превышает количество имеющихся задач, отсчет начать заново.

Ход работы

Задание:

14) Создать класс OnlineStoreItem (элемент интернет-магазина) с приватными полями: название товара, цена, количество на складе. Реализовать функцию для определения товара с наибольшим количеством единиц на складе, а также функцию для расчета общей стоимости всех товаров в магазине.

Блок-схемы программы

Рисунок 1 – Основная программа

Рисунок 2 – Метод addProduct

Рисунок 3 – Метод maxCount

Рисунок 4 – Метод sumPrice

Рисунок 5 – Метод write_summary

Рисунок 6 – Метод write_to_file

Пример работы программы:

Рисунок 7 – Пример результатов выполнения методов

Рисунок 8 – Примеры результатов записи в файл

Листинг программы:

class OnlineStoreItem:

def __init__(self, productName, price, countInStock):

self.__productName = productName

self.__price = price

self.__countInStock = countInStock

# Метод-геттер для получения названия товара

def get_product_name(self):

return self.__productName

# Метод-сеттер для установки названия товара

def set_product_name(self, name):

if isinstance(name, str):

self.__productName = name

else:

print("Недопустимое название")

# Метод-геттер для получения цены

def get_price(self):

return self.__price

# Метод-сеттер для установки цены

def set_price(self, price):

if isinstance(price, (int, float)):

self.__price = price

else:

print("Недопустимое значение")

# Метод-геттер для получения количества на складе

def get_count_in_stock(self):

return self.__countInStock

# Метод-сеттер для установки количества на складе

def set_count_in_stock(self, count):

if isinstance(count, int):

self.__countInStock = count

else:

print("Недопустимое значение")

@staticmethod

def sort_name(objects):

result = sorted(objects, key=lambda x: x.get_product_name()) # Сортировка по названию товара

for product in result:

print(product.get_product_name())

@staticmethod

def max_count(objects):

max_item = max(objects, key=lambda x: x.get_count_in_stock())

print("Товар с наибольшим количеством на складе:", max_item.get_product_name(), max_item.get_count_in_stock())

@staticmethod

def sum_price(objects,filename):

total_price = 0

for product in objects:

total_price += product.get_price() * product.get_count_in_stock()

print("Общая стоимость всех товаров в магазине:", total_price)

summary = ""

summary += f"Общая стоимость всех товаров в магазине: {str(total_price)}\n"

OnlineStoreItem.write_to_file(summary, filename)

@staticmethod

def add_product(objects, product_name, price, count_in_stock):

new_product = OnlineStoreItem(product_name, price, count_in_stock)

objects.append(new_product)

print("Новый продукт", product_name, "добавлен в магазин.")

@staticmethod

def write_to_file(content, filename):

with open(filename, 'a+') as file:

file.write(content)

print("Данные записаны в файл", filename)

@staticmethod

def write_summary(objects, filename):

summary = ""

for product in objects:

summary += f"Товар: {product.get_product_name()}, Цена: {product.get_price()}, Количество: {product.get_count_in_stock()}\n"

OnlineStoreItem.write_to_file(summary, filename)

# Вызов статических методов

objects = [

OnlineStoreItem('Phone', 300, 45),

OnlineStoreItem('Tomato', 45, 132),

OnlineStoreItem('Keyboard', 155, 73)

]

OnlineStoreItem.add_product(objects, 'Potato', 50, 120)

OnlineStoreItem.max_count(objects)

OnlineStoreItem.sum_price(objects,"price_summary.txt")

OnlineStoreItem.write_summary(objects, "product_summary.txt")

Вывод: в ходе лабораторной работы ознакомились и практически использовали классами в Python.