Скачиваний:
2
Добавлен:
03.06.2024
Размер:
24.69 Кб
Скачать

ГУАП

КАФЕДРА № 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

ассистент

Е.К. Григорьев

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 7

ООП

по курсу: ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

подпись, дата

инициалы, фамилия

Санкт-Петербург 2023

1 Цель работы

Познакомиться с классами, их методами и элементами, реализовать классы согласно варианту индивидуального задания.

2 Ход работы

Вариант: 16

5. Реализовать класс «Кошелек» куда могут добавляться экземпляры классов денежных валют (рубль, евро, доллар) различного номинала. Кошелек должен иметь возможность возвращать полную сумму денег всех валют в задаваемой валюте, количество денег конкретной валюты и уметь конвертировать с задаваемым коэффициентом деньги из одной валюты в другую, возвращать количество денег задаваемого номинала определенной валюты в кошельке. Требуется реализовать возможность вывода текущих состояний объектов в терминал.

Код программы:

from typing import Dict

class Wallet:

def __init__(self):

self._wallet: Dict[str, Dict[int, float]] = {

'RUB': {}, 'USD': {}, 'EUR': {}}

self._exchange_rates = {

'RUB': {'USD': 0.014, 'EUR': 0.012},

'USD': {'RUB': 70.21, 'EUR': 0.84},

'EUR': {'RUB': 81.09, 'USD': 1.20}

}

def add_money(self, currency: str, denomination: int, amount: float):

if denomination not in self._wallet[currency]:

self._wallet[currency][denomination] = 0

self._wallet[currency][denomination] += amount

def get_total(self, currency: str) -> float:

total = 0

for curr, denominations in self._wallet.items():

for denom, amount in denominations.items():

if curr == currency:

total += denom * amount

else:

total += self.convert(curr, currency, denom, amount)

return total

def get_amount(self, currency: str, denomination: int) -> float:

return self._wallet[currency].get(denomination, 0)

def get_currency_total(self, currency: str):

currency_total=0

for curr, denominations in self._wallet.items():

if curr == currency:

for denom, amount in denominations.items():

currency_total += denom * amount

return currency_total

def convert(self, from_currency: str, to_currency: str, denom: int, amount: float) -> float:

if from_currency == to_currency:

return amount

rate = self._exchange_rates[from_currency][to_currency]

return denom * amount * rate

def get_currency_totals(self) -> str:

return str(self._wallet)

def get_exchange_rates(self) -> str:

return str(self._exchange_rates)

def tests():

wallet = Wallet()

wallet.add_money('RUB', 10, 50)

wallet.add_money('RUB', 100, 20)

wallet.add_money('USD', 1, 10)

wallet.add_money('EUR', 5, 15)

assert wallet.get_total('RUB') == 9283.85

assert wallet.get_amount('USD', 2) == 0

assert wallet.convert('EUR', 'RUB', 5, 100) == 40545

assert wallet.convert('USD', 'EUR', 5, 100) == 420

print ("Деньги в кошельке:",wallet.get_currency_totals())

print ("Курсы обмена:",wallet.get_exchange_rates())

print ("Рублей в кошельке:",wallet.get_currency_total('RUB'))

try:

wallet.convert('BYN', 'RUB', 1, 1)

except KeyError:

print("Такой валюты нет в кошельке")

tests()

8. Напишите класс «Парковка», в который можно добавлять (и удалять) экземпляры класса «Автомобили». В конструктор «Парковки» следует передавать параметр максимального количества автомобилей на парковке. Класс «Автомобили» должен содержать параметры: производитель, модель, гос. номер. У класса «Парковка» должны быть следующие методы: поиск автомобиля по гос. номеру, количество автомобилей на парковке. При этом если добавляемый автомобиль превышает максимальное количество автомобилей на парковке, он не добавляется в неё. Требуется реализовать возможность вывода текущих состояний объектов в терминал.

Код программы:

from typing import List

class Car:

def __init__(self, manufacturer: str, model: str, license_plate: str):

self.manufacturer = manufacturer

self.model = model

self.license_plate = license_plate

class ParkingLot:

def __init__(self, max_cars: int):

self.max_cars = max_cars

self.cars_in_lot: List[Car] = []

def add_car(self, car: Car) -> bool:

if len(self.cars_in_lot) < self.max_cars:

self.cars_in_lot.append(car)

return True

else:

return False

def remove_car(self, car: Car) -> bool:

if car in self.cars_in_lot:

self.cars_in_lot.remove(car)

return True

else:

return False

def remove_manufacturer(self, manuf: str):

if not any(car.manufacturer == manuf for car in self.cars_in_lot):

print("Марки",manuf,"нет на парковке")

return False

new_cars_in_lot = []

for car in self.cars_in_lot:

if car.manufacturer != manuf:

new_cars_in_lot.append(car)

self.cars_in_lot = new_cars_in_lot

if len(self.cars_in_lot) != len(new_cars_in_lot):

return True

def search_car_by_license_plate(self, license_plate: str) -> Car:

for car in self.cars_in_lot:

if car.license_plate == license_plate:

return car

return None

def num_of_cars(self) -> int:

return len(self.cars_in_lot)

def cars_print(self):

print("Максимальная вместимость:",self.max_cars)

print("Машины на парковке:")

for car in self.cars_in_lot:

print(car.manufacturer, car.model, car.license_plate)

def testing():

parking_lot = ParkingLot(2)

car_1 = Car("Toyota", "Corolla", "а111аа")

parking_lot.add_car(car_1)

car_2 = Car("Honda", "Civic", "б222бб")

parking_lot.add_car(car_2)

car_3 = Car("BMW", "X5", "в333вв")

assert parking_lot.add_car(car_3) == False

assert parking_lot.search_car_by_license_plate("а111аа") == car_1

assert parking_lot.search_car_by_license_plate("д322дд") == None

assert parking_lot.remove_car(car_2) == True

assert parking_lot.remove_car(car_2) == False

assert parking_lot.num_of_cars() == 1

try:

print(parking_lot.cars_in_lot[2])

except IndexError:

print("Парковка заполнена!")

parking_lot.cars_print()

testing()

print("///")

def remove_manufacturer_test():

parking_lot = ParkingLot(5)

car_1 = Car("Toyota", "Corolla", "а111аа")

car_2 = Car("Toyota", "Corolla2", "а222аа")

car_3 = Car("Honda", "Civic", "б222бб")

parking_lot.add_car(car_1)

parking_lot.add_car(car_2)

parking_lot.add_car(car_3)

parking_lot.cars_print()

print("///")

parking_lot.remove_manufacturer("Toyot")

parking_lot.cars_print()

remove_manufacturer_test()

3 Вывод

Я создал классы кошелек, машина и парковка, овладел навыками ООП и использования исключений.

Соседние файлы в папке 7