2016-11-30 2 views
0

Я запускаю простую онлайн-корзину, и когда я пытался ее запустить, конечный результат был пустым. Я понимаю концепцию о классах и объектах, но мне действительно нужна помощь. Он должен выглядеть следующим образом:Класс и объекты в 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 

Вот что я написал до сих пор,:

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() 

Что я сделал не так?

+0

Не уверен, что это как раз вы задаете вопрос но вызов main() не отстутнут под оператором if – Sighonide

+0

Какая ошибка вы получаете? – Prajwal

+0

Выполняется ли это в отдельном процессе? – Sighonide

ответ

3

У Вас есть некоторые проблемы в вашем методе print_item_cost, это должно быть так:

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)) 

Вы обращаетесь к атрибуту класса, как это: self.attr

+0

Если это решение решило, игнорируйте это: Предположим, что вы выполняете это в дочернем процессе (предполагая, что это используется: 'if __name__ ==" __main __ ":'), тогда вам может понадобиться сбросить 'sys. stdout', вызывая 'sys.stdout.flush()' в приведенном выше коде (после того, как вы вызвали все ваши функции печати). Это происходит из-за буферизации выходного процесса. Игнорируйте это, если вы не используете несколько процессов. – Sighonide

+0

. Насколько я знаю, нет упоминания о многопрограммном программировании, и насколько я знаю, использование '__name__ ==" main "- это обычная вещь. Были и другие проблемы в коде OP. Вы можете увидеть мой ответ и проверить это для себя. (и, надеюсь, это тоже стоит :)) @Sighonide – Jarvis

+1

Я согласился с вашим ответом :) Я только покрывал все базы, поскольку '__name__ ==" main "' может предлагать многопроцессорность. Но теперь, когда я думаю об этом, он, вероятно, просто хочет иметь возможность импортировать определение класса и функции без запуска main(), а также иметь возможность запускать все это с нуля:/lol – Sighonide

Смежные вопросы