
1 / кр2
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
КАФЕДРА №41
|
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
Доцент, к.т.н |
|
|
|
С. А. Чернышев |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
КОНТРОЛЬНАЯ РАБОТА №2
|
по дисциплине: Технологии программирования |
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
Z0411 |
|
24.01.23 |
|
М. В. Карелина |
|
номер группы |
|
подпись, дата |
|
инициалы, фамилия |
Студенческий билет № |
2020/3477 |
|
|
|
Санкт-Петербург
2023
Вариант 10
Напишите классы «Холодильник» и «Морозильная камера», в которые можно добавлять (и удалять) экземпляры класса «Продукты». В конструктор «Холодильника» и «Морозильной камеры» следует передавать параметр их текущей рабочей температуры. Класс «Продукты» должен содержать параметры «Наименование продукта», «максимальная температура хранения» и «минимальная температура хранения». У классов «Холодильник» и «Морозильная камера» должны быть реализованы методы: поиск продукта по наименованию, подсчёт общего хранящегося количества продуктов. При добавлении продуктов в «Холодильник» (или «Морозильную камеру») требуется сравнить допустимый диапазон хранения продукта с текущей температурой «Холодильника» (или «Морозильной камеры») в случае, если текущая температура «Холодильника» (или «Морозильной камеры») не входит в диапазон, то продукт не добавляется в «Холодильник» или «Морозильную камеру». Требуется реализовать возможность вывода текущих состояний объектов в терминал.
Код программы:
class Product: def __init__(self, name: str, min_temp: float, max_temp: float): self.name = name #наименование продукта self.min_temp = min_temp #минимальная температура хранения self.max_temp = max_temp #максимальная температура хранения def __str__(self): text = f'\n Name {self.name}, \n Min temperature {self.min_temp}, \n Max temperature {self.max_temp}.' return text def main(): prod1 = Product('Fish', -2, 0) prod2 = Product('Cheese', 5, 10) print('Product 1:', prod1) print('Product 2:', prod2) if __name__ == "__main__": main()
from product import Product from typing import List #холодильник class Refrigerator: #метод инициализации холодильника #temperature - задаёт текущубю рабочую температуру #products - необязательный параметр, задаёт список продуктов def __init__(self, temperature: float, products: List[Product] = []): self.temperature = temperature #текущая рабочая температура холодильника self.products = [] #продукты в холодильнике for it in products: self.add(it) #метод для добавления продукта в холодильник def add(self, product: Product): #добавляем продукт только в случае, когда рабочая температура холодильника #совпадает с диапазонами хранения if self.temperature >= product.min_temp and self.temperature <= product.max_temp: self.products.append(product) else: print(f'{product} \n !could not add!') #не могу добавить продукт #метод поиска продукта по наименованию #если продукт найден, возвращает его #иначе возвращает None def find(self, name: str): for it in self.products: if it.name == name: return it return None #метод возвращает кол-во хранящихся продуктов в холодильнике def count(self): return len(self.products) #печать текущего состояния холодильника и #список продуктов в нём def print(self): print(f'Current temperature: {self.temperature}') i = 1 #счётчик продуктов for it in self.products: print(f'Product {i}: ', it) print() i+=1 def main(): ref = Refrigerator(6.0) #создаём холодильник с температурой 6 градусов prod1 = Product('Fish', -2, 0) #рыба prod2 = Product('Cheese', 5, 10) #сыр prod3 = Product('Sausage', 4, 6) #сосиски prod4 = Product('Ice Cream', -30, -20) #мороженое ref.add(prod1) #пробуем добавить рыбу (будет напечатана ошибка) ref.add(prod2) #пробуем добавить сыр ref.add(prod3) #пробуем добавить сосиски ref.add(prod4) #пробуем добавить мороженое print() ref.print() #печатаем состояние холодильника print(f'Num of products: {ref.count()}') #печатаем кол-во продуктов в холодильнике pr = ref.find('Cheese') #пытаемся найти сыр в холодильнике if pr is not None: #если он найден, выводим в терминал print('\nResult of search: ', pr) else: print('Could not find Cheese') if __name__ == "__main__": main()
from product import Product from refrigerator import Refrigerator from typing import List #холодильная камера class Freezer(Refrigerator): pass def main(): fr = Freezer(-25) #создаём холодильную камеру с температурой -25 градус prod1 = Product('Fish', -2, 0) #рыба prod2 = Product('Cheese', 5, 10) #сыр prod3 = Product('Sausage', 4, 6) #сосиски prod4 = Product('Ice Cream', -30, -20) #мороженое fr.add(prod1) #пробуем добавить рыбу (будет напечатана ошибка) fr.add(prod2) #пробуем добавить сыр fr.add(prod3) #пробуем добавить сосиски fr.add(prod4) #пробуем добавить мороженое print() fr.print() #печатаем состояние холодильника print(f'Num of products: {fr.count()}') #печатаем кол-во продуктов в холодильной камере pr = fr.find('Cheese') #пытаемся найти сыр в холодильной камере if pr is not None: #если он найден, выводим в терминал print('\nResult of search: ', pr) else: print('Could not find Cheese') if __name__ == "__main__": main()
Код тестов:
from product import Product from refrigerator import Refrigerator from freezer import Freezer import unittest class ProdTest(unittest.TestCase): def test_add(self): ref = Refrigerator(6.0) #создаём холодильник с температурой 6 градусов fr = Freezer(-24) #создаём холодильную камеру с температурой -24 градуса prod1 = Product('Fish', -2, 0) #рыба prod2 = Product('Cheese', 5, 10) #сыр prod3 = Product('Sausage', 4, 6) #сосиски prod4 = Product('Ice Cream', -30, -20) #мороженое ref.add(prod1) ref.add(prod2) ref.add(prod3) ref.add(prod4) fr.add(prod1) fr.add(prod2) fr.add(prod3) fr.add(prod4) self.assertEqual(ref.products, [prod2, prod3]) self.assertEqual(fr.products, [prod4]) def test_count(self): ref = Refrigerator(6.0) #создаём холодильник с температурой 6 градусов fr = Freezer(-24) #создаём холодильную камеру с температурой -24 градуса prod1 = Product('Fish', -2, 0) #рыба prod2 = Product('Cheese', 5, 10) #сыр prod3 = Product('Sausage', 4, 6) #сосиски prod4 = Product('Ice Cream', -30, -20) #мороженое ref.add(prod1) ref.add(prod2) ref.add(prod3) ref.add(prod4) fr.add(prod1) fr.add(prod2) fr.add(prod3) fr.add(prod4) self.assertEqual(ref.count(), 2) self.assertEqual(fr.count(), 1) def test_find(self): ref = Refrigerator(6.0) #создаём холодильник с температурой 6 градусов fr = Freezer(-24) #создаём холодильную камеру с температурой -24 градуса prod1 = Product('Fish', -2, 0) #рыба prod2 = Product('Cheese', 5, 10) #сыр prod3 = Product('Sausage', 4, 6) #сосиски prod4 = Product('Ice Cream', -30, -20) #мороженое ref.add(prod1) ref.add(prod2) ref.add(prod3) ref.add(prod4) fr.add(prod1) fr.add(prod2) fr.add(prod3) fr.add(prod4) self.assertEqual(ref.find('Cheese'), prod2) self.assertEqual(ref.find('Ice Cream'), None) self.assertEqual(fr.find('Cheese'), None) self.assertEqual(fr.find('Ice Cream'), prod4) if __name__ == '__main__': unittest.main()
Скриншоты выполнения
Скриншот выполнения тестов
Вывод
Я ознакомилась с основными способами объявления и
использования функций, аннотаций типов и классов в Python.