Python 如果选择==item.get('item'): 所选=项目 price=已选择。获取('price') 而cim

Python 如果选择==item.get('item'): 所选=项目 price=已选择。获取('price') 而cim,python,while-loop,infinite-loop,Python,While Loop,Infinite Loop,另外,我认为这是一个引入面向对象编程的好例子。它允许您拥有更好的结构化代码,并让您专注于希望开发的逻辑。下面是一个可能的实现: class Item: def __init__(self, name, price, stock): self.name = name self.price = price self.stock = stock def updateStock(self, stock): self.sto

另外,我认为这是一个引入面向对象编程的好例子。它允许您拥有更好的结构化代码,并让您专注于希望开发的逻辑。下面是一个可能的实现:

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()
类项目:
定义初始(自身、名称、价格、股票):
self.name=名称
self.price=价格
self.stock=股票
def updateStock(自身、库存):
self.stock=股票
def buyFromStock(自我):
如果self.stock==0:
#不引发项目异常
通过
self.stock-=1
自动售货机类别:
定义初始化(自):
self.amount=0
self.items=[]
def附加项(自身,项目):
self.items.append(项目)
def显示项目(自身):
打印(“\n项可用\n****************”)
对于self.items中的项目:
如果item.stock==0:
self.items.remove(项目)
对于self.items中的项目:
打印(项目名称、项目价格)
打印('******************\n')
def addCash(自我、金钱):
self.amount=self.amount+money
def buyItem(自我,项目):
如果自身金额<项目价格:
打印('您不能删除此项目。请插入更多硬币')
其他:
self.amount-=项目价格
项目.buyFromStock()
打印('您得到'+项目名称)
打印('剩余现金:'+str(自身金额))
def containsItem(自身,需要):
ret=假
对于self.items中的项目:
如果item.name==需要:
ret=真
打破
回程网
def getItem(自身,需要):
ret=无
对于self.items中的项目:
如果item.name==需要:
ret=项目
打破
回程网
def insertAmountForItem(自身,项目):
价格=项目价格
而self.amount0:
打印(自我金额+退款)
self.amount=0
打印('谢谢,祝您愉快!\n')
def vend():
机器=自动售货机()
项目1=项目('choc',1.5,2)
项目2=项目('pop',1.75,1)
项目3=项目(“芯片”,2.0,3)
项目4=项目('gum',0.50,1)
项目5=项目('mints',0.75,3)
机器附件(第1项)
机器附件(第2项)
机器附件(第3项)
机器附件(第4项)
机器附件(第5项)
打印(“欢迎使用自动售货机!\n****************”)
继续购买=正确
当continueToBuy==True时:
machine.showItems()
选择=输入('选择项:')
如果选择了machine.containsItem:
item=machine.getItem(已选择)
机器。insertAmountForItem(项目)
机器购买项目(项目)
a=输入('购买其他东西?(y/n):')
如果a=='n':
继续购买=错误
machine.checkreturn()
其他:
持续
其他:
打印('项目不可用。请选择其他项目')
持续
文德()

有关OOP的更多信息,请参见。

您只需添加一个布尔变量,如果用户的答案是
n
,则将该变量设置为false。还请注意,代码中有一个问题,您没有以正确的方式更新
cim
的值。你必须考虑一个人需要输入一个以上的硬币,所以你必须累积总硬币插入:

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()
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}
项目=[a、b、c、d、e]
cim=0#收银机
打印(“欢迎使用自动售货机!\n**************”)
#展示物品、价格
def显示(项目):
打印(“\n项可用\n****************”)
对于项目中的项目:
如果item.get('stock')==0:
项目。删除(项目)
对于项目中的项目:
打印(item.get('item')、item.get('price'))
打印('******************\n')
继续购买=正确
#让用户选择项目
当continueToBuy==True时:
显示(项目)
选择=输入('选择项:')
对于项目中的项目:
如果选择==item.get('item'):
所选=项目
price=已选择。获取('price')
而cim<价格:
cim=cim+float(输入('insert'+str(price-cim)+':'))
打印('you got'+selected.get('item'))
所选['stock']-=1
cim-=价格
打印('剩余现金:'+str(cim))
a=输入('购买其他东西?(y/n):')
如果a=='n':
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()
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()