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 に答える