Đ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