Python駐車管理システム

19941 ワード

要件:
駐車管理システムの設計:
# 1. 基本バージョン:
#プロパティ:
#駐車場の最大駐車数;max_car;
#現在の駐車数;cur_car;
#現在の駐車リスト;car_list = []
#メソッド:
#駐車:park()
#             1). 最大駐車数に達していない場合は、駐車を許可します.
              2). 最大駐車数に達していない場合は、駐車を許可します.
#出駐車場:exit()
              1). 車が入っているかどうかを判断し、入っていればcarを削除するリストに関連する情報;
              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)は問題を解決した