某小型收费停车场有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()