Задача ООП Python. Посадить человека в автобус
Имеется следующая задача:
Создайте класс человек.
Создайте класс Ребенок с наследованием от класса Человек.
Создайте класс "автобус". В автобусе должно содержаться несколько детей - например вlist
.Для класса автобус напишите методы добавления ребенка в автобус, удаления ребенка из автобуса.
У автобуса сделайте метод - при вызове которого будет меняться местоположение у всех детей, кто в нём находится на заданное (новое положение передавать в метод изменения положения).У каждого ребенка сделайте хранение его текущего местоположения и методы для его изменения/отображения.
Я не могу понять, как мне одним методом в классе *Человек*
одновременно обозначить, что человек находится в автобусе, и внести его в список пассажиров в экземпляре класса *Автобус*
.
Вот все что смог написать сам:
class Human:
name: str
age: int
def __init__(self, h_name, h_age):
self.name = h_name
self.age = h_age
def info(self):
print(f'Name {str(self.name)}')
print(f'Age {str(self.age)}')
class Child(Human):
bus_num: int
in_bus: bool
def __init__(self, h_name, h_age):
super().__init__(h_name, h_age)
self.bus_num = 0
self.in_bus = False
def info(self):
super().info()
print(f'In bus {str(self.in_bus)}')
def get_in(self):
self.in_bus = True
def bus_out(self):
self.in_bus = False
class Bus:
capacity: int
passengers: list
def __init__(self, capacity):
self.capacity = capacity
self.passengers = [None] * capacity
Ответы (1 шт):
Я увидел вашу задачу так, смотрим ниже.
Обратите внимание, что реализовано не все, закончите самостоятельно и не забудьте сделать контроль чтобы количество пассажиров не превышало количества мест.
import random
class Human:
name: str
age: int
def __init__(self, h_name, h_age):
self.name = h_name
self.age = h_age
def info(self):
print(f'\nName: {str(self.name)}')
print(f'Age: {str(self.age)}')
class Child(Human):
bus_num: int
in_bus: bool
def __init__(self, h_name, h_age):
super().__init__(h_name, h_age)
self.bus_num = 0
self.in_bus = False
# +
self.name = h_name # +
self.age = h_age # +
self.info() # +
def info(self):
super().info()
print(f'In bus: {str(self.in_bus)}; {self.bus_num}\n')
def get_in(self):
self.in_bus = True
def bus_out(self):
self.in_bus = False
class Bus:
capacity: int
passengers: list
def __init__(self, capacity):
self.capacity = capacity
self.passengers = [None] * capacity
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
def add_child(self, name, age):
child = Child(name, age)
for i, passenger in enumerate(self.passengers):
if not passenger:
self.passengers[i] = child
child.get_in()
child.bus_num = i+1
break
def del_child(self, name, age):
pass
def shuffle_child(self):
random.shuffle(self.passengers)
for i, passenger in enumerate(self.passengers):
if passenger:
passenger.bus_num = i+1
bus = Bus(12)
print(f'passengers: {bus.passengers}')
bus.add_child("Name1", 11)
bus.add_child("Name2", 12)
bus.add_child("Name3", 13)
print(* bus.passengers, sep='\n')
print('-'*12, 'меняем местоположение у всех детей --------\n')
bus.shuffle_child() # меняем местоположение у всех детей
print(* bus.passengers, sep='\n')
print('-'*40, ' добавляем 3-х детей ---\n')
bus.add_child("Name4", 14)
bus.add_child("Name5", 15)
bus.add_child("Name6", 16)
print(* bus.passengers, sep='\n')
print('-'*40, ' дети в автобусе и их места --- \n')
for passenger in bus.passengers:
if passenger:
print(f'name: {passenger.name}; '\
f'age: {passenger.age}; '\
f'bus_num: {passenger.bus_num}') #
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^