2016-07-12 13 views
-1

Ich habe eine Funktion in meinem Artikel Bestellsystem, wo das Ziel Summen, wie viele Elemente zu halten wurden die einzelnen Elemente bestellt und drucken und den Betrag, den siePython zu halten Anzahl der Summen basierend auf Benutzereingaben

bestellt wurden
class Totals(object): 

def __init__(self, total): 
    self.total = total 

def total(order_amount, coffee_id): 
    count = 0 
    print("Coffee Type\t\tAmount of Times ordered")      
    print("-----------\t\t-----------------------") 
    for coffee in coffee_available: 

     if coffee.coffee_id == coffee_id: 
      count = order_amount 
      coffee_id = order_coffee 

      print("{}\t- - -\t {} ".format(coffee.coffee_type, count)) 

Damit kann ich nur ein Element drucken und es zeigt, wie viele dieser Einzelteil bestellt wird aber wieder tut es dies nur ein Element

Die Funktion auf Benutzereingaben basiert und die Einzelteile sind

coffee_available=[Coffee(1, "1: Flat White", 3.50), 
        Coffee(2, "2: Long Black", 3.50), 
        Coffee(3, "3: Cappuccino", 4.00), 
        Coffee(4, "4: Espresso", 3.25), 
        Coffee(5, "5: Latte", 3.50)] 

Wie ändere ich die Funktion, so dass sie alle Elemente druckt und die Menge der bestellten Objekte bei jedem Aufruf verfolgt, so dass nach dem mehrfachen Durchlaufen meines Codes immer noch jedes Element und die Anzahl der Male angezeigt wird bestellt


Ok, jetzt habe ich eine Methode, die jede der verschiedenen Arten von Kaffee druckt aber druckt die Menge Kaffee für 1 Stück, um alle der bestellten Artikel und die Menge an Kaffee für jeden Artikel bestellt nicht behalten als

class Order(object): 

def __init__(self): 
    self.total = {} 

def order(self, order_amount, coffee_id): 
    if coffee_id not in self.total.keys(): 
     self.total[coffee_id] = 0 
    self.total[coffee_id] += order_amount 


def print_order(self, coffee_id): 
    print(" ") 
    print("Coffee Type\t\tAmount of Times ordered")      
    print("-----------\t\t-----------------------") 
    for coffee in coffee_available: 
     print("{}\t- - -\t {} ".format(coffee.coffee_type, self.total[coffee_id])) 

benötigt wird, und das ist, wie ich es nennen

 new_order = Order() 
     new_order.order(order_amount, coffee_available[order_coffee - 1]) 
     new_order.print_order(coffee_available[order_coffee - 1]) 

würden irgendwelche Vorschläge groß sein

+0

Das Problem ist mehr Ihre Funktion sieht aus wie es entworfen wurde, um nur eine Art von Kaffee zu drucken. Sie sollten stattdessen die tatsächliche Reihenfolge als Parameter übergeben. ZB eine Liste von Kaffee-Objekten, die ausgewählt wurden. order_amount und coffee_id sehen nur ganze Zahlen aus, die dich nicht sehr weit bringen. –

+0

Bitte folgen Sie https://www.youtube.com/watch?v=o9pEzgHorH0 –

Antwort

2

Sie sollten ein Wörterbuch speichern, die Menge der Aufträge, um es von der Kaffee-ID Karte und es bei jeder Bestellung aktualisieren.

class Totals(object): 

    def __init__(self): 
     self.total = {} 

    def order(self, order_amount, coffee_id): 
     if coffee_id not in self.total.keys(): 
      self.total[coffee_id] = 0 
     self.total[coffee_id] += order_amount 

Für den Druck sollten Sie eine Druckfunktion, die self.total drucken hinzufügen, wie Sie es wünschen.

+0

, also verstehe ich diesen Code so, dass Sie eine Funktion definieren, die die Parameter order_amount und coffee_id akzeptiert. Sie durchlaufen das Array "coffee_available" und stimmen coffee_id mit dem überein, was der Benutzer eingibt. Dann sagst du, wenn coffee_id in self.total.keys() nichts ergibt, machst du self.total [coffee_id] = 0, sonst hast du nur + = order_amount. Worüber ich etwas verwirrt bin, ist, was das self.total = {} am Anfang ist und warum Sie + = order_amount an self.total [coffee_id]. Ich möchte nur sicherstellen, dass ich das vollständig verstehe. – killerstick1

+0

@ killerstick1 self.total ist ein Wörterbuch, das Kaffee auf die Menge der Bestellungen abbildet. Zu Beginn ist das Diktat leer, daher die Initialisierung von "self.total = {}". Wenn noch keine Bestellung dieser coffee_id platziert wurde, fügen Sie sie durch 'self.total [coffee_id] = 0 'ein und dann auch (** nicht anders **) aktualisieren Sie den Betrag um die aktuelle Bestellung –

+0

Die Zeilen' für Kaffee in Kaffee_verfügbar: ' und 'wenn coffee.coffee_id == coffee_id:' machen hier nicht viel. Sie entsprechen ungefähr "wenn es einen Kaffee mit dieser ID gibt". Brauchst du das, oder ist das an anderer Stelle bereits vorher gesäubert? (Ich merke, dass sie vom ursprünglichen Codebeispiel übernommen wurden, nur um zu hinterfragen, ob wir sie ablegen können). – nimasmi

0

Das ist persönlich, wie ich glaube, dass Sie die bestellten Artikel verwalten sollten. Dieses Beispiel enthält ein Wörterbuch, in dem ein Coffee-Objekt der Anzahl der Bestellungen zugeordnet wird.

class Order(object): 
    ID = 0 
    def __init__(self): 
     self._orders = {} 
     self._order_id = Order.ID 
     Order.ID += 1 

    def add_item(self, coffee): 
     # Gets the current quantity for the coffee 
     # If no previous order qty defaults to 1 
     qty = self._orders.get(coffee, 1) 
     # Add/update dict with coffee object and qty 
     self._orders[coffee] = qty 

    def display_order(self): 
     print("Coffee Type\t\tAmount of Times ordered")      
     print("-----------\t\t-----------------------") 
     # For each coffee object ordered | sorted by coffee id 
     for coffee in sorted(self._orders, key = lambda item: item.coffee_id): 
      print("{:<10}\t- - -\t {} ".format(coffee.coffee_type, 
               coffee.price * self._orders[coffee])) 
+0

Ich bin irgendwie verwirrt, was ich in den Parameter von Order.add_item() eingeben, wenn ich es aufrufen möchte? und muss ich irgendwelche Parameter für Order.display_order eingeben? – killerstick1

+0

Ich sehe es so, dass jedes Order-Objekt Coffee-Objekte enthält, die vom Benutzer ausgewählt wurden, zB 'o = Order(); o.add_item (coffee_available [0]) 'um ein flaches Weiß hinzuzufügen. 'o.display_order()' wäre alles was Sie brauchen, um die Informationen anzuzeigen. Sie brauchen es vielleicht nicht als Klasse, aber es hängt vom Rest Ihres Codes ab. Dies war mehr meine Interpretation der Verwaltung der Elemente, ohne all Ihren Code zu sehen. –

Verwandte Themen