某小型收费停车场有50个车位,有一个入口与一个出口,满1小时收费1元,不足1小时不收费,10元封顶,超过1天罚款200元。编写程序实现停车场出入口管理。

某小型收费停车场有50个车位,有一个入口与一个出口,满1小时收费1元,不足1小时不收费,10元封顶,超过1天罚款200元。编写程序实现停车场出入口管理。

要求:

(1)定义出入口类,将车位总数与目前停在停车场的车辆信息(每辆车包括车牌和入场时间)定义为类属性;

(2)定义entering()方法管理车辆进入,当无车位时输出“车位已满”,有车位时记录车辆入场信息;

(3)定义leaving()方法管理车辆离场,当车牌号不在停车场内时输出“错误”,在时计算提车时间,输出应缴纳的停车费,并从停车场车辆信息中删除该车;

(4)入口与出口分别为出入口类的一个实例,使用字符串模拟车辆进入与离场,车辆进入使用“A car ID ******* is coming”,车辆离场使用“A car ID ******* is leaving”模拟。输入“exit”结束程序。

import time

parking_space = []  # 用来储存车辆


class Car:
    def __init__(self):
        self.time = None
        self.id = None

    def show(self, id, time):  # 定义一个show方法,输出车辆的车牌号和时间
        self.id = id
        self.time = time
        print(f'车牌号为{self.id},您的入场时间为{self.time}')

    def entering(self):
        if len(parking_space) == 50:    # 根据列表长度来判断停车场所剩余的车位
            print("车位已满")
        else:
            print(f'剩余车位{50 - len(parking_space)}')
            t = time.strftime('%m-%d %H')  # 获取时间的格式,这里没有获取详细的时间,只是获取了今天的月份和天数,小时
            id = input("请输入您的车牌号")
            if len(parking_space) == 0:  # 当停车场没有车辆的情况下
                print(f'A car ID {id} is coming')
                ojb.show(id, t)
                parking = [id, t]   # 将车牌号和时间存储在列表里
                parking_space.append(parking)
            else:
                for i in parking_space:
                    if id == i[0]:   # 做判断,如果输入重复的车牌号,便不会往parking_space列表里储存信息
                        print("您的车已在停车场")
                        break
                else:       # 如果停车场没有此id,便添加到parking_space列表中
                    print(f'A car ID {id} is coming')
                    ojb.show(id, t)
                    parking = [id, t]
                    parking_space.append(parking)

    def leaving(self):
        t = input()#time.strftime('%m-%d %H') # 获取车辆离开时的时间
        id = input("请输入您的车牌号")  # 根据车牌判断
        if len(parking_space) == 0:  # 如果停车场没有车辆,仍然选择离开的话便提示错误
            print("错误")
        if len(parking_space) > 0:  # 根据列表的长度来判断停车场是否有车辆
            for i in range(len(parking_space)):
                if id == parking_space[i][0]: # 当输入的车牌号和列表的id值相等,便删除该列表元素,用来表示该车辆的离开
                    ojb.money(t, parking_space[i][1])  # 调用money方法用来计算该交多少钱,没有精细计算,只做了粗略的计算(以小时为单位)
                    del parking_space[i]
                    print(f'A car ID {id} is leaving')
                    break
            else:
                print("错误")

    def money(self, start_t, end_t):  # 计算money的方法
        start_y = int(list(start_t)[4])
        end_y = int(list(end_t)[4])
        start_t = list(start_t)[-2] + list(start_t)[-1]
        start_t = int(start_t)
        end_t = list(end_t)[-2] + list(end_t)[-1]
        end_t = int(end_t)
        if start_t < end_t and start_y == end_y:  # 分情况判断
            money = end_t - start_t
            if money > 10:
                print('您的费用为10元')
            else:
                print(f'您的费用为{money}元')
        elif start_t > end_t and start_y < end_y:
            money = end_t + 24 - start_t
            if money > 10:
                print('您的费用为10元')
            else:
                print(f'您的费用为{money}元')
        elif start_t == end_t and start_y == end_y:
            print('您的费用为0元')
        elif start_t > end_t and start_y < end_y:
            print("恁在此停车场已停留1天,请您支付罚款200元")

    def showcar(self): # 展示所有在停车场的车辆
        if len(parking_space) == 0:
            print("当前车辆为0")
        else:
            for i in parking_space:
                ojb.show(i[0], i[1])

    def menu(self):  # 定义菜单
        while True:
            print("=================Welcome to the parking lot=================")
            print("请选择功能:\n1.进入停车\n2.离开\n3.查看所有车辆\nexit:退出")
            n = input()
            if n == '1':
                ojb.entering()
            elif n == '2':
                ojb.leaving()
            elif n == '3':
                ojb.showcar()
            elif n == 'exit':
                print("GOOD BYE")
                return False
            else:
                print("输入错误,请重新输入")


if __name__ == '__main__':
    ojb = Car()
    ojb.menu()

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值