Giải pháp xếp hạng máy bán hàng tự động bằng Python

Điều bạn cần chỉ là thêm một biến boolean mà bạn đặt thành false nếu câu trả lời của người dùng là n. Cũng xin lưu ý rằng đã xảy ra sự cố trong mã, bạn không cập nhật giá trị của cim theo cách thích hợp. Bạn phải cân nhắc rằng một người có thể cần nhập nhiều hơn một đồng xu, vì vậy bạn phải tích lũy tổng số đồng xu đã nhập

def vend[]:

    a = {'item': 'choc', 'price': 1.5, 'stock': 2}
    b = {'item': 'pop', 'price': 1.75, 'stock': 1}
    c = {'item': 'chips', 'price': 2.0, 'stock': 3}
    d = {'item': 'gum', 'price': 0.50, 'stock': 1}
    e = {'item': 'mints', 'price': 0.75, 'stock': 3}
    items = [a, b, c, d, e]
    cim = 0 # cash in machine

    print['welcome to vending machine! \n***************']

    # show items, prices
    def show[items]:
        print['\nitems available \n***************']

        for item in items:      
            if item.get['stock'] == 0:
                items.remove[item]
        for item in items:
            print[item.get['item'], item.get['price']]

        print['***************\n']
    continueToBuy = True
    # have user choose item
    while continueToBuy == True:
        show[items]
        selected = input['select item: ']
        for item in items:
            if selected == item.get['item']:
                selected = item               
                price = selected.get['price']
                while cim < price:
                    cim = cim + float[input['insert ' + str[price - cim] + ': ']]   

                print['you got ' + selected.get['item']]
                selected['stock'] -= 1
                cim -= price
                print['cash remaining: ' + str[cim]]
                a = input['buy something else? [y/n]: ']
                if a == 'n':
                    continueToBuy = False

                    if cim != 0:
                        print[str[cim] + ' refunded']
                        cim = 0
                        print['thank you, have a nice day!\n']
                        break                        
                    else:
                        print['thank you, have a nice day!\n']
                        break  
                else:
                    continue



vend[]

Ngoài ra, tôi nghĩ rằng đây là một ví dụ tốt để giới thiệu lập trình hướng đối tượng. Nó cho phép bạn có mã có cấu trúc tốt hơn và cho phép bạn tập trung vào logic của mong muốn mà bạn muốn phát triển. Đây là một thực hiện có thể

class Item:
    def __init__[self, name, price, stock]:
        self.name = name
        self.price = price
        self.stock = stock

    def updateStock[self, stock]:
        self.stock = stock

    def buyFromStock[self]:
        if self.stock == 0:
            # raise not item exception
            pass
        self.stock -= 1

class VendingMachine:
    def __init__[self]:
        self.amount = 0
        self.items = []

    def addItem[self, item]:
        self.items.append[item]

    def showItems[self]:
        print['\nitems available \n***************']

        for item in self.items:      
            if item.stock == 0:
                self.items.remove[item]
        for item in self.items:
            print[item.name, item.price]

        print['***************\n']

    def addCash[self, money]:
        self.amount = self.amount + money

    def buyItem[self, item]:
        if self.amount < item.price:
            print['You can\'t but this item. Insert more coins.']
        else:
            self.amount -= item.price
            item.buyFromStock[]
            print['You got ' +item.name]
            print['Cash remaining: ' + str[self.amount]]

    def containsItem[self, wanted]:
        ret = False
        for item in self.items:
            if item.name == wanted:
                ret = True
                break
        return ret

    def getItem[self, wanted]:
        ret = None
        for item in self.items:
            if item.name == wanted:
                ret = item
                break
        return ret

    def insertAmountForItem[self, item]:
        price = item.price
        while self.amount < price:
                self.amount = self.amount + float[input['insert ' + str[price - self.amount] + ': ']]

    def checkRefund[self]:
        if self.amount > 0:
            print[self.amount + " refunded."]
            self.amount = 0

        print['Thank you, have a nice day!\n']


def vend[]:

    machine = VendingMachine[]
    item1 = Item['choc',  1.5,  2]
    item2 = Item['pop', 1.75,  1]
    item3 = Item['chips',  2.0,  3]
    item4 = Item['gum',  0.50, 1]
    item5 = Item['mints',0.75,  3]
    machine.addItem[item1]
    machine.addItem[item2]
    machine.addItem[item3]
    machine.addItem[item4]
    machine.addItem[item5]

    print['Welcome to the vending machine!\n***************']

    continueToBuy = True
    while continueToBuy == True:
        machine.showItems[]
        selected = input['select item: ']
        if machine.containsItem[selected]:
            item = machine.getItem[selected]

            machine.insertAmountForItem[item]
            machine.buyItem[item]

            a = input['buy something else? [y/n]: ']
            if a == 'n':
                continueToBuy = False
                machine.checkRefund[]
            else:
                continue

        else:
            print['Item not available. Select another item.']
            continue

vend[]

Để biết thêm thông tin về OOP, hãy xem tài nguyên như thế này

Chủ Đề