方法remove_item需要與add_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
訪問如上圖所示
'.keys'和'.items'返回一個* view *。使用'list'來獲得一個獨立的可迭代對象。 –
錯誤是因爲您在迭代期間修改字典(刪除項目)。在迭代過程中嘗試將密鑰存儲到臨時列表中,例如「keys_to_delete」(在for循環中)並稍後刪除。 請參閱https://stackoverflow.com/questions/10665591/how-to-remove-list-elements-in-a-for-loop-in-python – Akshay
juanpa.arrivillaga說什麼。順便說一句,'del'不是一個函數,所以不要把它寫成函數。擺脫這些括號。 –