2016-11-30 14 views
0

Ich bin ein einfaches Online-Shopping-Cart-Programm und als ich versuchte, es auszuführen, war das Endergebnis leer. Ich verstehe das Konzept von Klassen und Objekten, aber ich brauche wirklich Hilfe. Es soll wie folgt aussehen:Klasse und Objekte in Python

Item 1 
Enter the item name: Chocolate Chips 
Enter the item price: 3 
Enter the item quantity: 1 

Item 2 
Enter the item name: Bottled Water 
Enter the item price: 1 
Enter the item quantity: 10 

TOTAL COST 
Chocolate Chips 1 @ $3 = $3 
Bottled Water 10 @ $1 = $10 

Total: $13 

Hier ist, was ich bisher geschrieben habe:

class ItemsToPurchase : 

    def __init__(self, item_name = "none", item_price = 0, item_quantity = 0): 
     self.item_name = item_name 
     self.item_price = item_price 
     self.item_quantity = item_quantity 

    def print_item_cost(self): 
     total = item_quantity * item_price 
     print('%s %d @ $%f = $%f' % (item_name, item_quantity, item_price, total)) 

def main(): 

    print('Item 1') 
    print() 

    item_name = str(input('Enter the item name: ')) 
    item_price = float(input('Enter the item price: ')) 
    item_quantity = int(input('Enter the item quantity: ')) 

    item_one = ItemsToPurchase(item_name, item_price, item_quantity) 
    item_one.print_item_cost() 

    print('Item 2') 
    print() 

    item_name = str(input('Enter the item name: ')) 
    item_price = float(input('Enter the item price: ')) 
    item_quantity = int(input('Enter the item quantity: ')) 

    item_two = ItemsToPurchase(item_name, item_price, item_quantity) 
    item_two.print_item_cost() 

    print('TOTAL COST') 
    item_one.print_item_cost() 
    item_two.print_item_cost() 

if __name__ == "__main__": 
    main() 

Was habe ich falsch gemacht?

+0

Nicht sicher, ob dies ist nur in Ihnen die Frage zu stellen aber der Aufruf von main() ist nicht eingerückt unter der if-Anweisung – Sighonide

+0

Was ist der Fehler, den Sie bekommen? – Prajwal

+0

Wird dies in einem separaten Prozess ausgeführt? – Sighonide

Antwort

3

Sie haben einige Probleme in Ihrem print_item_cost Methode, sollte es so aussehen:

def print_item_cost(self): 
    total = self.item_quantity * self.item_price 
    print('%s %d @ $%f = $%f' % (self.item_name, self.item_quantity, self.item_price, total)) 

Sie beziehen sich auf eine Klasse Attribut wie folgt aus: self.attr

+0

Wenn das obige es gelöst hat, ignoriere dies: Angenommen, Sie führen dies in einem Child-Prozess (vorausgesetzt, dies wird verwendet: 'if __name__ ==" __main __ ":'), dann müssen Sie 'sys. stdout "durch Aufruf von' sys.stdout.flush() 'im obigen Code (nachdem Sie alle Ihre Druckfunktionen aufgerufen haben). Dies liegt an der Ausgabe des untergeordneten Prozesses, der gepuffert wird. Ignorieren Sie dies, wenn Sie nicht mehrere Prozesse verwenden – Sighonide

+0

Es gibt keine Erwähnung von Multi-Programmierung, soweit ich weiß, und soweit ich weiß mit '__name__ ==" main "' ist eine häufige Sache. Es gab andere Probleme im OP-Code. Sie können meine Antwort sehen und das für sich selbst überprüfen. (und hoffentlich upvote es auch :)) @Sighonide – Jarvis

+1

Ich stimmte mit Ihrer Antwort überein :) Ich bedeckte nur alle Basen, da '__name__ ==" main "' Multiprocessing vorschlagen könnte. Aber jetzt, da ich darüber nachdenke, möchte er wahrscheinlich nur die Klasse und die Funktionsdefinition importieren können, ohne main() zu starten und alles von Grund auf neu zu starten:/lol – Sighonide