0

下面是计算超市账单的代码。一切都很好,但问题是我被告知如果输入只是苹果,这个解决方案将不起作用。

我确实相信苹果的价值应该是 0,因为苹果不在库存中,但我仍然相信有些事情我做的不对。请帮忙。

groceries = ["apple","banana", "orange",]

stock = {"banana": 6,
    "apple": 0,
    "orange": 32,
    "pear": 15
    }

prices = {"banana": 4,
    "apple": 2,
    "orange": 1.5,
    "pear": 3
    }

def computeBill(food):
    total = 0
    for item in food:
        tot = prices[item] * stock[item]
        print item, tot
        total += tot
    return total

computeBill(groceries)
4

3 回答 3

1

我不知道为什么这行不通。如果您的输入是['apple'],则会发生这种情况:

computeBill(['apple'])
total = 0
item = 'apple'
tot = price['apple'] * stock['apple']
tot = 2 * 0
print 'apple',0
total += 0
return total
return 0

除非他们希望能够传入单个项目而不将其包装在列表中,否则调用 `computeBill('apple')。在这种情况下,您必须在函数开始时进行类型检查。这可能看起来像这样

if type(food) is not list:
    food = [food]
于 2012-10-17T01:33:38.183 回答
1

我将自己提出这个答案并提出建议,因为您的computeBill功能规范似乎没有明确定义。

如果物品没有库存,并且您的讲师说在这种情况下退货是不可接受的0,那么您的其他选择是引发异常或指示错误状态的标记值。

def computeBill(food):
    total = 0
    for item in food:
        stock_count = stock[item]
        if stock_count == 0:
            raise ValueError("item %s is out of stock" % item)
        tot = prices[item] * stock_count
        print item, tot
        total += tot
    return total

或者,如果您不想引发异常,-1如果您觉得这不是一个有效的总数,您可以返回:

        if stock_count == 0:
            return -1

该函数在计算列表与库存的方式方面还有一些其他问题,但您说您现在并不关心这些问题。

于 2012-10-17T01:33:38.230 回答
0
def compute_bill(food):
  total=0
  for item in food:
    if stock[item]>0:
      tot=prices[item]
      total+=tot
      stock[item]-=1
  return total  
于 2016-02-27T07:00:15.527 回答