美文网首页
设计一个停车场

设计一个停车场

作者: MontyOak | 来源:发表于2018-07-22 10:45 被阅读12次

原文链接

作为演示代码,做了以下的简化处理:

  • 支持三种车辆:摩托车,轿车,巴士
  • 每个车种占地不同,各有各自的停车位
from abc import ABCMeta, abstractmethod


class VehicleSize(Enum):

    MOTORCYCLE = 0
    COMPACT = 1
    LARGE = 2


class Vehicle(metaclass=ABCMeta):

    def __init__(self, vehicle_size, license_plate, spot_size):
        self.vehicle_size = vehicle_size
        self.license_plate = license_plate
        self.spot_size = spot_size
        self.spots_taken = []

    def clear_spots(self):
        for spot in self.spots_taken:
            spot.remove_vehicle(self)
        self.spots_taken = []

    def take_spot(self, spot):
        self.spots_taken.append(spot)

    @abstractmethod
    def can_fit_in_spot(self, spot):
        pass


class Motorcycle(Vehicle):

    def __init__(self, license_plate):
        super(Motorcycle, self).__init__(VehicleSize.MOTORCYCLE, license_plate, spot_size=1)

    def can_fit_in_spot(self, spot):
        return True


class Car(Vehicle):

    def __init__(self, license_plate):
        super(Car, self).__init__(VehicleSize.COMPACT, license_plate, spot_size=1)

    def can_fit_in_spot(self, spot):
        return True if (spot.size == LARGE or spot.size == COMPACT) else False


class Bus(Vehicle):

    def __init__(self, license_plate):
        super(Bus, self).__init__(VehicleSize.LARGE, license_plate, spot_size=5)

    def can_fit_in_spot(self, spot):
        return True if spot.size == LARGE else False


class ParkingLot(object):

    def __init__(self, num_levels):
        self.num_levels = num_levels
        self.levels = []

    def park_vehicle(self, vehicle):
        for level in levels:
            if level.park_vehicle(vehicle):
                return True
        return False


class Level(object):

    SPOTS_PER_ROW = 10

    def __init__(self, floor, total_spots):
        self.floor = floor
        self.num_spots = total_spots
        self.available_spots = 0
        self.parking_spots = []

    def spot_freed(self):
        self.available_spots += 1

    def park_vehicle(self, vehicle):
        spot = self._find_available_spot(vehicle)
        if spot is None:
            return None
        else:
            spot.park_vehicle(vehicle)
            return spot

    def _find_available_spot(self, vehicle):
        """Find an available spot where vehicle can fit, or return None"""
        # ...

    def _park_starting_at_spot(self, spot, vehicle):
        """Occupy starting at spot.spot_number to vehicle.spot_size."""
        # ...


class ParkingSpot(object):

    def __init__(self, level, row, spot_number, spot_size, vehicle_size):
        self.level = level
        self.row = row
        self.spot_number = spot_number
        self.spot_size = spot_size
        self.vehicle_size = vehicle_size
        self.vehicle = None

    def is_available(self):
        return True if self.vehicle is None else False

    def can_fit_vehicle(self, vehicle):
        if self.vehicle is not None:
            return False
        return vehicle.can_fit_in_spot(self)

    def park_vehicle(self, vehicle):  # ...
    def remove_vehicle(self):  # ...

相关文章

  • 设计一个停车场

    原文链接 作为演示代码,做了以下的简化处理: 支持三种车辆:摩托车,轿车,巴士 每个车种占地不同,各有各自的停车位

  • 停车场设计展示!

  • 设计停车场系统

    1、前言 停车场系统也是一个经典的管理系统,主体是停车场系统,input 是车辆,output 是车位。所以有一个...

  • 力扣-[简单]1603.设计一个停车系统

    题面: 请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位...

  • IOS 算法(基础篇) ----- 设计停车系统

    请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。请你实...

  • LeetCode 设计停车系统

    请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。 请你...

  • 车库防火

    《汽车库、修车库、停车场设计防火规范》GB50067-2014,9.0.7 除敞开式汽车库、屋面停车场外,下列汽车...

  • 车库防火

    《汽车库、修车库、停车场设计防火规范》GB50067-2014,9.0.7 除敞开式汽车库、屋面停车场外,下列汽车...

  • 停车场设计的要点

    随着经济的高速发展,近年来,我国汽车保有量急剧增长,很多城市出现了“停车难”问题。为了满足日益增长的停车需求...

  • 从停车场设计角度看女性停车场

    前段时间,一则关于某大学教授建议把“女性停车位”改名为“新手停车位”的新闻,再次引起大家对女性车位问题的热议。 其...

网友评论

      本文标题:设计一个停车场

      本文链接:https://www.haomeiwen.com/subject/tydlmftx.html