计算超市的账单

时间:2012-10-17 01:23:25

标签: python python-2.7 python-2.x python-2.4

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

我相信苹果的价值应该是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)

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分:1)

我将自行回​​答这个问题并提出建议,因为您的computeBill功能的规格似乎没有明确定义。

如果这些项目没有库存,并且您的教师说在这种情况下返回0是不可接受的,那么您的其他选项是引发异常,或者是指示错误状态的标记值。< / p>

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

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

答案 2 :(得分:0)

package com.brr.uet.robo;

import com.google.devtools.simple.runtime.components.Component;
import com.google.devtools.simple.runtime.components.HandlesEventDispatching;
import com.google.devtools.simple.runtime.components.android.ActivityStarter;
import com.google.devtools.simple.runtime.components.android.Button;
import com.google.devtools.simple.runtime.components.android.Form;
import com.google.devtools.simple.runtime.components.android.HorizontalArrangement;
import com.google.devtools.simple.runtime.components.android.Label;
import com.google.devtools.simple.runtime.components.android.Notifier;
import com.google.devtools.simple.runtime.events.EventDispatcher;

public class MainActivity extends Form implements HandlesEventDispatching {      
private Label touchZombieLabel;
private HorizontalArrangement horizontalArrangement1;
private Button zombieButton;
private AccelerometerSensor accelerometerSensor1;
}