2016-04-26 12 views
1

auf Python 3Hinzufügen zu einem Warenkorb, und nimmt das äquivalent aus dem Bestand

Hallo, ich habe einen Vorrat an Produkten (wie ein Wörterbuch. Wo jede Taste ist die Identifikationsnummer und jeder Wert ist ein Wörterbuch von Information). Das Programm erfasst eine Identifikationsnummer (Produkt gesucht) und die gewünschte Menge. Dann soll der Code die Produktinfo in einen leeren Warenkorb hinzufügen, bearbeiten Sie die Nummer auf dem Original abzüglich der eingegebenen Menge. und bearbeiten Sie den Betrag im Warenkorb auf die gewünschte Menge.

aber der Code hält die Menge des Produkts in der Lagerausgabe Null. Und die Menge des Produktes im Korb, um auch Null auszugeben.

über den Druckbefehl Ich denke, ich habe das Problem lokalisiert. irgendwo in der if-Anweisung unten.

aber es sieht so einfach aus Ich weiß nicht, wo ich falsch liege!

Vielen Dank im Voraus. die Lager und eine ‚ziemlich‘ Druckfunktion an der Spitze des Codes sind, um Ihnen zu helfen, die 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"]) 

Antwort

1
basket[ident] = stock[ident] 

zu visualisieren, dass Ihr Problem ist, gibt es änderbare Typen, so dass diese nicht zwei identische machen Dinge, aber eine Sache mit zwei verschiedenen Namen.

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 

zu tun, was Sie wollen, Sie explizit zu tun haben, sagen, dass Sie eine Kopie anfertigen möchten:

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

Thank you so much! Ich hatte mich jetzt schon zwei Stunden lang geärgert. Stets Vertrauen in den Stackoverflow –