2017-10-18 1 views
0

J'ai un panier de base. Je pensais que cela fonctionnait mais j'ai depuis découvert que même s'il fonctionne sans erreur, il ne fait pas une chose que je pensais devoir faire et j'ai de la difficulté à résoudre le problème.Nombre d'achats pas à jour

Si j'instancier un élément une seconde fois, comme ceci:

item1 = Item(1, "Cucumbers", 1., 1, 'kg') 
    item2 = Item(2, "Tissues", 2., 2, 'dozen') 
    item3 = Item(3, "Tomatoes", 3., 5, 'pound') 
    # item4 = Item(4, "Toothpaste", 1., 5, 'box') 
    item4 = Item(4, "Cucumbers", 1., 2, 'kg') 

Ce que je veux pour la quantité de concombres au point 1 augmenter à « 3 » et pour le point 4 être automatique supprimé

Je pensais que cela fait ce que je voulais, mais ce n'est pas:

  elif k == 'name': 
       total_qty = v.qty + item.qty 
       if total_qty: 
        v.qty = total_qty 
        continue 
       self.remove_item(k) 
      else: 
       v[k] = item[k] 

Le code fonctionne sans erreur, mais je me retrouve avec deux instances distinctes de concombre.

code complet:

class Item(object): 
    def __init__(self, unq_id, name, price, qty, measure): 
     self.unq_id = unq_id 
     self.product_name = name 
     self.price = price 
     self.qty = qty 
     self.measure = measure 


class Cart(object): 
    def __init__(self): 
     self.content = dict() 

    def __format__(self, format_type): 
     if format_type == 'short': 
      return ', '.join(item.product_name for item in self.content.values()) 

     elif format_type == 'long': 
      return '\n'.join(f'\t\t{item.qty:2} {item.measure:7} {item.product_name:12} @ ' 
          f'${item.price:1.2f} ... ${item.qty * item.price:1.2f}' 
          for item in self.content.values()) 

    def add(self, item): 
     if item.unq_id not in self.content: 
      self.content.update({item.unq_id: item}) 
      return 
     for k, v in self.content.get(item.unq_id).items(): 
      if k == 'unq_id': 
       continue 
      elif k == 'name': 
       total_qty = v.qty + item.qty 
       if total_qty: 
        v.qty = total_qty 
        continue 
       self.remove_item(k) 
      else: 
       v[k] = item[k] 

    def get_total(self): 
     return sum([v.price * v.qty for _, v in self.content.items()]) 

    def get_num_items(self): 
     return sum([v.qty for _, v in self.content.items()]) 

    def remove_item(self, key): 
     self.content.pop(key) 


if __name__ == '__main__': 
    item1 = Item(1, "Cucumbers", 1., 1, 'kg') 
    item2 = Item(2, "Tissues", 2., 2, 'dozen') 
    item3 = Item(3, "Tomatoes", 3., 5, 'pound') 
    # item4 = Item(4, "Toothpaste", 1., 5, 'box') 
    item4 = Item(4, "Cucumbers", 1., 2, 'kg') 
    cart = Cart() 
    cart.add(item1) 
    cart.add(item2) 
    cart.add(item3) 
    cart.add(item4) 
    print("Your cart contains: {0:short}".format(cart)) 
    # cart.remove_item(1) 
    print() 
    print("Your cart contains: \n {0:long}".format(cart)) 
    print() 
    print("The total number of items in your cart is: ", cart.get_num_items()) 
    print() 
    print("The total cost of the items in your cart is: ", cart.get_total()) 
    print() 
    cart.remove_item(3) 
    print("Your cart contains: {0:short}".format(cart)) 
    print() 
    print("Your cart contains: \n {0:long}".format(cart)) 
    print() 
    print("The total number of items in your cart is: ", cart.get_num_items()) 
    print() 
    print("The total cost of the items in your cart is: ", cart.get_total()) 

Répondre

0

Le correctif est:

def add(self, item): 
    if item.unq_id not in self.content: 
     self.content.update({item.unq_id: item}) 
     return 
    else: 
     self.content[item.unq_id].qty = self.content[item.unq_id].qty + item.qty