Methode remove_item, die ähnliche Argumente wie add_item erfordert. Es sollte Artikel entfernen, die dem Warenkorb hinzugefügt wurden und nicht benötigt werden. Diese Methode sollte die Kosten dieser Artikel von der aktuellen Summe abziehen und auch die Artikel dict entsprechend aktualisieren. Wenn die Menge der zu entfernenden Artikel die aktuelle Menge im Einkaufswagen übersteigt, nehmen Sie an, dass alle Einträge dieses Artikels entfernt werden sollen.Python modifizieren dic Löschung während der Iteration
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)
Und es gibt Testeinheiten
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')
Verfahren zu überprüfen remove_item
gibt einen Fehler, dass dictionary changed size during iteration
auch nach dem Versuch, über keys
zuzugreifen, wie oben
'.keys' und' .items' geben eine * Ansicht * zurück. Verwenden Sie 'list', um ein unabhängiges iterierbares Objekt zu erhalten. –
Fehler liegt daran, dass Sie das Wörterbuch (Elemente löschen) während der Iteration ändern. Versuchen Sie, während der Iteration (in for loop) Schlüssel zur temporären Liste wie "keys_to_delete" zu speichern und später zu löschen. Refer https://stackoverflow.com/questions/10665591/how-to-remove-list-elements-in-a-for-loop-in-python – Akshay
Was juanpa.arrivillaga sagte. BTW, 'del' ist keine Funktion, also schreibe es nicht wie eine Funktion. Befreien Sie sich von diesen Klammern. –