add_itemと同様の引数を必要とするメソッドremove_item。ショッピングカートに追加されたアイテムは削除する必要がありません。このメソッドは、現在の合計からこれらのアイテムのコストを差し引いて、そのアイテムを更新します。削除するアイテムの数量がカート内の現在の数量を超えている場合は、そのアイテムのすべてのエントリを削除するものとします。pythonはdicの削除を繰り返しながら修正します
class ShoppingCart(object):
#constructor
def __init__(self):
self.total = 0
self.items = {}
#method to add items in the shoping cart
def add_item(self,item_name, quantity, price):
self.total += (price * quantity)
self.items[item_name] = quantity
#method to remove items
def remove_item(self,item_name, quantity, price):
keys = self.items.keys()
for keys,v in self.items.items():
if keys == item_name and quantity > self.items[keys]: #if item_name equals iterated item
self.total -= (price * quantity)
del(self.items[keys])
del(self.items[keys])
self.total -= (quantity * price)
そして
def test_add_item_hidden(self):
self.cart.add_item('Mango', 3, 10)
self.cart.add_item('Orange', 16, 10)
self.assertEqual(self.cart.total, 190, msg='Cart total not correct after adding items')
self.assertEqual(self.cart.items['Orange'], 16, msg='Quantity of items not correct after adding item')
方法remove_item
がdictionary changed size during iteration
も
'.keys'と' .items'は* view *を返します。独立したiterableオブジェクトを得るには 'list'を使います。 –
エラーは、反復中に辞書を変更している(アイテムを削除している)ためです。反復中(forループ内)に "keys_to_delete"のような一時的なリストにキーを格納し、後で削除してください。 を参照してください。https://stackoverflow.com/questions/10665591/how-to-remove-list-elements-in-a-for-loop-in-python – Akshay
juanpa.arrivillagaが言ったこと。ところで、 'del'は関数ではないので、関数のように書く必要はありません。それらのかっこを取り除く。 –