Python basic exercise three supermarket storage cabinet simulation (optimization)

Title Description

Simulate the operation of storing and taking out the items in the supermarket's storage cabinet. When storing the items, select the empty storage box, and then assign the password to complete the storage. When taking out the items, input the corresponding password, and open the corresponding door to take out the items

Title Analysis

1. Add private variables and practice the use of private variables
2. Many data types need to be converted, such as int(),str(), etc
3. String splicing and truncation. Slicing is used for truncation
4. The way of random password + location code is adopted in the password, which can locate the location of the box directly according to the password and avoid the problem of repeated passwords generated randomly


This time, we mainly optimized the check ﹐ cell() method, save ﹐ goods() method and get ﹐ goods ﹐ out() method. The get ﹐ goods ﹐ out() method changed the most, cancelled the for loop, and improved the search performance.

#-*- coding:UTF-8 -*-

import random

//Simulate the supermarket storage cabinet program, set up 100 boxes, and store them when they are full
//Before each storage, check whether the first box is empty. If the first box is empty, the items can be stored
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 total number of packets: total {self. 「 cell 」 num} lattice, used {self. 「 use} lattice, remaining {self. 「 surplus} lattice ")
    def get_surplus(self):
        return self._surplus

    def check_cell(self):
        for i in range(0,100):
            position = "%02d"%(i)  #Format the box position into 2 digits, and fill in 0 for the insufficient ones
            if self.cell[i] == 0:
                return position
        return -1

#Storage method: first use the inspection method to check whether there is an empty box, and then open the door for storage
    def save_goods(self):
        self.passwd = random.randint(10000,99999)
        self.cell_save = self.check_cell()
        self.passwd = str(self.passwd) + self.cell_save #The last two digits of the password represent the location of the box. At the same time, the problem of repeated password can be avoided
        self.cell_save = int(self.cell_save)
        self.cell[self.cell_save] = self.passwd
        self._use += 1
        self._surplus = self._cell_num - self._use
        print(f"{self.cell_save+1}The door of No. 1 box has been opened. Your password is{self.cell[self.cell_save]}")

#Method of taking out items, input password and take out items    
    def get_goods_out(self,password):
        password = str(password)
        i = int(password[5:7])          #Directly take the last two digits of the password to locate the location of the box to avoid the time consumption of cyclic search
        if self.cell[i] == password:
            self.cell[i] = 0
            self._surplus += 1
            self._use = self._cell_num - self._surplus
            return i
        return -1

lock = Locker()
while True:
    surplus = lock.get_surplus()
    operation = input("1-Deposit\n2-take out\n0-Sign out\n Please enter the corresponding operation:")
    if operation == "1":
        if surplus != 0:
            print("Thank you for using")
    elif operation == "2":
        while True:
            password = input("Please enter the access code:")
            password = int(password)
            out_result = lock.get_goods_out(password)
            if out_result != -1:
                print(f"{out_result+1}The No. box door has been opened and the password has expired. Please take out the goods and close the box door")
                print("The password is wrong. Please check it before entering!")
    elif operation == "0":
        print("Looking forward to your next visit!")
        print("Please input the correct operation!")

Tags: Python

Posted on Tue, 03 Dec 2019 12:47:22 -0500 by hdpt00