2016-04-26 1 views
1

sur python 3Ajoutant à un panier, et en prenant l'équivalent du stock

Salut, j'ai un stock de produits (comme un dictionnaire. Où chaque clé est le numéro d'identification et chaque valeur est un dictionnaire de information). Le programme prend un numéro d'identification (produit désiré) et le montant désiré. Ensuite, le code est censé ajouter les informations sur le produit dans un panier vide, modifier le nombre en stock à l'original moins le montant entré. et éditez le montant dans le panier au montant désiré.

Cependant, le code continue de rendre nulle la quantité de produit dans la sortie de stock. Et la quantité de produit dans le panier pour sortir zéro aussi.

via la commande d'impression Je pense avoir localisé le problème. quelque part dans la déclaration if ci-dessous.

mais il semble si simple Je ne sais pas où je vais mal!

Merci beaucoup d'avance. le stock et une fonction d'impression « jolie » sont en haut du code, pour vous aider à visualiser la situation

  stock = { 
       '10005' : { 
         'name' : 'Conference Pears Loose', 
         'price' : 2.00, 
         'unit' : 'kg', 
         'promotion' : None, 
         'group' : None, 
         'amount' : 1.550 
       }, 
       '10013' : { 
         'name' : 'Emmental Slices 250G', 
         'price' : 1.75, 
         'unit' : 'pieces', 
         'promotion' : 'get2pay1', 
         'group' : None, 
         'amount' : 9 
       }, 
       '10015' : { 
         'name' : 'Diced Beef 400G', 
         'price' : 4.50, 
         'unit' : 'pieces', 
         'promotion': 'get4pay3', 
         'group' : 4, 
         'amount' : 14 
       }} 

      def listitems(dct): 
       """ 
       inputs dictionary of stock and prints a lovely table showing all the items with info 
       """ 
       print("\n") 
       print(" {0:^5} | {1:<38} | {2:^7} | {3:^11} ".format("Ident", "Product", "Price", "Amount")) 
       print("-" *7 + "+" + "-" * 40 + "+" + "-" * 9 + "+" + "-"*12 + "+") 
       for key in sorted(dct): 
        print(" {:^5} | {name:<38} | {price:>5.2f} £ | {amount:>} {unit:<14}".format(key, **dct[key])) 
       return 


      #main code of function 



      basket = dict() 
      quantity = input("Number of items? ") 
      #amount = 6 
      ident = input("Indentification number? ") 
      #ident = "10011" 

      listitems(stock) 


      try: 
       quantity = int(quantity) 
      except ValueError: 
       try: 
        quantity = float(quantity) 
       except ValueError: 
        print("You have entered a invalid amount")  

      try: 
       ident = str(ident) 
      except ValueError: 
       print("you have entered a invalid indent.") 


      #print("amount is ", quantity) 
      #print("amount in stock ", stock[ident]["amount"]) 



      if quantity > 0: 
       if quantity < stock[ident]["amount"]: 

        basket[ident] = stock[ident] #adding the product tp the basket. 

        basket[ident]["amount"] = quantity 

        stock[ident]["amount"] = stock[ident]["amount"] - quantity 





      listitems(stock) 
      listitems(basket) 


      print("amount is ", quantity) 
      print("amount in stock ", stock[ident]["amount"]) 
      print("amount in basket", basket[ident]["amount"]) 

Répondre

1
basket[ident] = stock[ident] 

C'est votre problème, il y a des types mutables, donc cela ne fait pas deux identiques choses mais une chose avec deux noms différents.

basket[ident]["amount"] = quantity # ok with that 
# since basket[ident] and stock[ident] are now the same you just subtract the amount you just set to itself 
stock[ident]["amount"] = stock[ident]["amount"] - quantity 

Pour faire ce que vous voulez que vous devez faire explicitement que dire que vous voulez une copie:

basket[ident] = stock[ident].copy() 
+0

Merci beaucoup! m'avait dérangé pendant deux heures maintenant. Ayez toujours foi en stackoverflow –