某汽车轮渡口,过江渡船每次能载10辆车过江。过江车辆分为客车类或货车类,上渡船有如下规定: 同类车先到先上船; 客车先于货车上渡船,且每上4辆客车,才允许放上一辆货车; 若等待客车不足4辆,则以货车代替; 若无货车等待,允许客车都上船。 试设计程序模拟渡口管理。
时间: 2024-04-30 21:19:26 浏览: 120
以下是一个简单的 Python 程序,模拟了汽车轮渡口的管理过程:
```
class Ferry:
def __init__(self):
self.passengers = []
self.cargos = []
self.waiting_passengers = []
self.waiting_cargos = []
def add_passenger(self, passenger):
self.waiting_passengers.append(passenger)
def add_cargo(self, cargo):
self.waiting_cargos.append(cargo)
def can_load_cargo(self):
return len(self.passengers) % 4 == 0 and len(self.waiting_cargos) > 0
def load_passenger(self):
if len(self.waiting_passengers) > 0:
passenger = self.waiting_passengers.pop(0)
self.passengers.append(passenger)
def load_cargo(self):
if self.can_load_cargo():
cargo = self.waiting_cargos.pop(0)
self.cargos.append(cargo)
def load(self):
while len(self.passengers) < 10:
self.load_passenger()
if not self.can_load_cargo():
continue
self.load_cargo()
def unload(self):
self.passengers = []
self.cargos = []
class Vehicle:
def __init__(self, vehicle_type):
self.vehicle_type = vehicle_type
class PassengerVehicle(Vehicle):
def __init__(self):
super().__init__('passenger')
class CargoVehicle(Vehicle):
def __init__(self):
super().__init__('cargo')
ferry = Ferry()
vehicles = [
PassengerVehicle(),
PassengerVehicle(),
CargoVehicle(),
PassengerVehicle(),
PassengerVehicle(),
CargoVehicle(),
PassengerVehicle(),
PassengerVehicle(),
CargoVehicle(),
CargoVehicle(),
]
for vehicle in vehicles:
if vehicle.vehicle_type == 'passenger':
ferry.add_passenger(vehicle)
elif vehicle.vehicle_type == 'cargo':
ferry.add_cargo(vehicle)
ferry.load()
print(len(ferry.passengers), len(ferry.cargos))
ferry.unload()
```
首先定义了 `Ferry` 类,表示轮渡口。其中包含了四个列表:已上船乘客、已上船货车、等待上船乘客、等待上船货车。`Ferry` 类包含了以下方法:
- `add_passenger`: 向等待上船乘客列表中添加乘客。
- `add_cargo`: 向等待上船货车列表中添加货车。
- `can_load_cargo`: 判断是否可以上货车。如果已上船乘客数量为4的倍数且等待上船货车数量大于0,则可以上货车。
- `load_passenger`: 上乘客。如果等待上船乘客列表中有乘客,则将其从列表中移除并加入已上船乘客列表中。
- `load_cargo`: 上货车。如果可以上货车,则将等待上船货车列表中的第一个货车加入已上船货车列表中。
- `load`: 上船。循环调用 `load_passenger` 和 `load_cargo` 方法,直到已上船乘客数量达到10辆车。
- `unload`: 卸载。将已上船乘客列表和已上船货车列表清空。
然后定义了 `Vehicle` 类,表示车辆。包含一个属性 `vehicle_type`,表示车辆类型。另外还定义了 `PassengerVehicle` 和 `CargoVehicle` 两个类,分别表示客车和货车。
最后创建了一个 `Ferry` 实例和一个车辆列表,模拟了一些车辆的到达轮渡口的过程。每到达一个车辆就根据类型将其加入等待上船乘客列表或等待上船货车列表中。然后调用 `load` 方法上船,输出已上船乘客数量和已上船货车数量,最后调用 `unload` 方法卸载。