Python基礎練習三超市存包櫃模擬(優化)
阿新 • • 發佈:2018-12-18
ams ati 轉換 rand opp 車輛 輸入 需要 import
題目描述
模擬超市存包櫃的存放物品和取出物品操作,存放物品時選擇空儲物格,然後分配密碼即為存放完成;取出物品時,輸入對應的密碼,打開對應的箱門即為取出物品
題目分析
1.增加私有變量,練習私有變量的使用
2.多處需要進行數據類型轉換,如int(),str()等
3.字符串的拼接和截取,截取使用的是切片的方式
4.密碼采用了隨機密碼+位置碼的方式,這樣既能直接根據密碼定位箱子位置,同時避免了隨機生成的重復密碼問題
代碼
本次主要優化了check_cell()方法、save_goods()方法、get_goods_out()方法,其中get_goods_out()方法改動最大,取消了for循環,提高了查找性能。
#!/usr/bin/python3 #-*- coding:UTF-8 -*- import random ‘‘‘ 模擬超市存包櫃程序,設置100個箱子,存滿即止 每次存放物品之前從第一個箱子檢測是否為空,遇到第一個為空的即可存入物品 ‘‘‘ class Locker(object): def __init__(self): self._cell_num = 100 self._use = 0 self._surplus = self._cell_num self.cell = [0]*100 def show_cell_detail(self): print(f"\n####################################\n總存包格數:總{self._cell_num}格,已用{self._use}格,剩余{self._surplus}格") def get_surplus(self): return self._surplus def check_cell(self): for i in range(0,100): position = "%02d"%(i) #將箱子位置統一格式化成2位數,不足的補0 if self.cell[i] == 0: return position return -1 #存放物品方法,先使用檢查方法檢查是否有空箱子,有空箱子即開門存物 def save_goods(self): self.passwd = random.randint(10000,99999) self.cell_save = self.check_cell() self.passwd = str(self.passwd) + self.cell_save #將箱子位置加入密碼中,密碼最後兩位數代表箱子位置,同時能夠避免重復密碼的問題 self.cell_save = int(self.cell_save) self.cell[self.cell_save] = self.passwd print(self.cell[self.cell_save]) self._use += 1 self._surplus = self._cell_num - self._use print(f"{self.cell_save+1}號箱門已打開,您的密碼是{self.cell[self.cell_save]}") #取出物品方法,輸入密碼,取出物品 def get_goods_out(self,password): password = str(password) i = int(password[5:7]) #直接取密碼最後兩位定位箱子位置,避免循環查找消耗時間 if self.cell[i] == password: print(password) self.cell[i] = 0 self._surplus += 1 self._use = self._cell_num - self._surplus return i return -1 lock = Locker() #lock.check_cell() while True: lock.show_cell_detail() surplus = lock.get_surplus() operation = input("1-存放\n2-取出\n0-退出\n請輸入對應操作:") if operation == "1": if surplus != 0: lock.save_goods() else: print("箱已存滿,謝謝使用") break elif operation == "2": while True: password = input("請輸入取件密碼:") password = int(password) out_result = lock.get_goods_out(password) if out_result != -1: print(f"{out_result+1}號箱門已打開,密碼已失效,請取出物品,關好箱門") break else: print("密碼錯誤,請核對後再輸入!") elif operation == "0": print("歡迎再次光臨!") break else: print("請輸入正確的操作!") continue
阿裏雲時間
12月大促:4核8G5M僅需2090
1888券:點我吧
購物車1000減5:裝載車輛
Python基礎練習三超市存包櫃模擬(優化)