
Григорьев ЛР / 7 / тп7
.docxГУАП
КАФЕДРА № 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 Вывод
Я создал классы кошелек, машина и парковка, овладел навыками ООП и использования исключений.