要求:
停车管理系统设计:
# 1. 基础版本:
# 属性:
# 停车场最多停车数; max_car;
# 当前停车数;cur_car;
# 当前停车列表; car_list = [] # 方法:
# 停车:park()
# 1). 如果没有达到最多停车数,则允许停车;
2). 如果没有达到最多停车数,则允许停车; # 出停车场:exit()
1). 判断该汽车是否进入,如果进入,则删除car_list里面相关的信息;
2). 如果该汽车从未进入, 则通知联系管理员;
# 2. 升级版本 1). 每辆汽车都有其属性, 包含: 车牌号,车主, 联系方式, 余额, 进入停车场时间, 出停车场时间;
2). 车主实现刷卡计时收费, 停车收费5元/小时;
代码:
#!/usr/bin/env python # coding:utf-8 import time max_car = 5 cur_car = 0 car_lst = [] class car(): def __init__(self, platenumber, owner, contantway, balance=20, time1=0, time2=0): self.platenumber = platenumber self.owner = owner self.contantway = contantway self.balance = balance self.time1 = time1 self.time2 = time2 def park(self): if len(car_lst) < max_car: self.time1 = time.time() car_lst.append(self) print('停车成功.') else: print('车库已满.') def exit(self): a = len(car_lst) - 1 if len(car_lst) == max_car else len(car_lst) for i in range(0, a): if car_lst[i].platenumber == self.platenumber: carex = car_lst[i] car_lst.remove(car_lst[i]) carex.time2 = time.time() tt = float((carex.time2 - carex.time1) / 3600) print('停车时间%f小时,停车费用%f元.' % (tt, float(tt / 5))) else: if i == len(car_lst) - 1: print('该汽车从未进入, 请联系管理员.') while True: cho = input( ''' 请选择功能: 1.停车 2.出车 3.退出系统 ''' ) if cho == '3': break elif cho == '1': if len(car_lst) >= max_car: print('车库已满.') else: pla = input('输入车牌号:') own = input('输入车主名:') cw = input('输入联系方式:') c = car(pla, own, cw) c.park() elif cho == '2': if len(car_lst) == 0: print('车库为空, 请联系管理员.') else: pl = input('输入车牌号:') carr = car(pl, 0, 0) carr.exit() else: print('输入错误,请重新选择.') time.sleep(2) continue
这是一个可以停5辆车的车库。受题目要求限制,代码写得较为混乱,例如车库为空或车库已满这类特殊情况下,为了避免多余输入需要在方法外进行判断,导致代码可读性下降。
比较有意思的是exit方法中一开始我写的是:for i in range(0 , len(car_lst)-1)
如果车库里只有1辆车的话就是range(0,0),这样的话I会为空。
而如果用for i in range(0 , len(car_lst)),在车库停满时会提示超出范围。max_car = 5 ,range(0,5) 输出为0到4,不知道为什么会超出范围。好在解决办法简单,加入判断赋值语句a = len(car_lst) – 1 if len(car_lst) == max_car else len(car_lst)解决了问题