Я продолжаю получать ошибки для моего кода ресторана? - PullRequest
0 голосов
/ 22 января 2019

Так что в основном idk, я просто чувствую, что мой код никуда не денется.У меня проблемы со списком и прочим, и мне это нужно для школы.Мой учитель на самом деле не учит, и это то, что они «научили» нас о массивах списков, но я не совсем понимаю.Кроме того, я получаю эту ошибку:

TypeError: append() takes exactly 2 arguments (1 given) on line 31 

У меня все в порядке, печать получается в порядке.Я вынул здесь все свое меню и просто вставил туда, где возникает моя проблема.Вот часть, которая на самом деле работает:

print "[Welcome to Python Cafe!]"
print ('\n')

print "1) Menu and Order"
print "2) Exit"
choice=input("What would you like to do? ")

print ('\n')
if choice == "1":
        print "-T H E  M E N U-"
        print " DRINKS "
        print "1. Coffee: $2.50" 
        print "2. Hot Cocoa: $2.30"
        print "3. Tea: $1.50"
        print " FOOD "
        print "4. Bagel: $1.50"
        print "5. Donut: $1.00"
        print "6. Muffin: $1.50"

Основная проблема заключается в операторах while и if, а также в том, как он не печатает мой заказ в конце.Я уже пытался изменить свой код, например: if order == "coffee": вместо if order == "1":, чтобы мне было проще, чтобы пользователю не приходилось вводить слово целиком?А также я попытался достать tot=tot+... только для того, чтобы увидеть.Я понятия не имею, мой учитель только что сказал нам сделать это, но я не думаю, что этот формат является совершенно правильным.

    if choice == "1":
        print ('\n') 
        food=[]
        order=0
        while order != "done":
            order=input("What's your order?  ")
            if order == "coffee":
                    list.append("coffee")
                    tot=tot+2.50
            else: 
                if order == "hot cocoa":
                        list.append("hotcocoa")
                        tot=tot+2.30
                if order == "tea":
                        list.append("tea")
                        tot=tot+1.50
                if order == "bagel":
                        list.append("bagel")
                        tot=tot+1.50
                if order == "donut": 
                        list.append("donut")
                        tot=tot+1.00
                if order == "muffin":
                        list.append("muffin")
                        tot=tot+1.50
        print ('\n') 
        print "Here's your final order:"
        for item in food:
            print(order)

И когда ошибка append() не появляется, и код фактически «работает», когда я возвращаю его обратно, он просто заканчивается там после «готово» и ничего не печатает после.Извините, если это кажется действительно запутанным, я просто думаю, что весь этот код - беспорядок.

Ответы [ 4 ]

0 голосов
/ 22 января 2019

Заменить list на food для добавления в

Замените order на tot, чтобы сохранить цену в

Замените final заказ на item для печати элементов

0 голосов
/ 22 января 2019

Просто ответ, но форматирование лучше.
Просто введите:

food.append(...)

вместо

list.append(...)

везде.

0 голосов
/ 22 января 2019

Вы пытаетесь использовать метод list.append() unbound .list - это встроенный тип, а .append() - метод, который при использовании в экземплярах списка позволяет добавлять значения в этот список.Но вы не сказали list.append() к какому экземпляру списка добавляться.

Обычно вы вызываете методы в конкретном экземпляре списка :

food.append("coffee")

Этовсе тот же метод list.append(), но теперь он привязан к экземпляру списка food, и Python затем проверяет, вызван ли list.append(food, "coffee").Обычно вы не используете list.append() напрямую (например, это помешает подклассам переопределить метод append()), оставьте его Python, чтобы выяснить правильную привязку здесь.

Делайте это везде, где вы используетеlist.append("...") сейчас.

Вы также печатаете неверную переменную в цикле «вот что вы заказали»:

for item in food:
    print(order)

, и вы никогда не давали tot начальное значение;у вас есть order=0, но вы также используете order для хранения ввода клиента!Вы, вероятно, перепутали order и tot.

Для каждого элемента в списке food вы хотите напечатать item, а не последнее, что заказал клиент:

for item in food:
    print(item)

или, если вы хотите быть по-настоящему изящным и впечатляющим, используйте какой-то продвинутый синтаксис Python и распечатайте весь список с символами новой строки между ними за один шаг:

print(*food, sep="\n")

Возможно, вы захотите определитьсопоставление продуктов питания с ценами с использованием словаря:

prices = {
    "coffee": 2.50,
    "hot cocoa": 2.30,
    "tea": 1.50,
    "bagel": 1.50,
    "donut": 1.00,
    "muffin": 1.50,
}

Это значительно упрощает проверку правильности заказов и позволяет добавлять больше элементов в меню в будущем!Теперь вы можете просто использовать:

tot = 0
food = []
while True:
    order = input("What's your order?  ")
    if order == 'done':
        break
    if order not in prices:
        print("Sorry, we don't have any", order)
    else:
        food.append(order)
        tot = tot + prices[order]

print("Here is your order:", *food, sep="\n")
print("That'll be", tot)

Обратите внимание, как я прокрался в дополнительное сообщение для заказов, для которых у вас нет цен.Кроме того, приведенное выше добавляет "hot cocoa", а не "hotcocoa" в список food, примите это во внимание, если это может быть проблемой для вас.

0 голосов
/ 22 января 2019
list.append("coffee")

должно быть

food.append("coffee")

, и это должно быть везде в вашем коде, где бы вы ни использовали list.list - это встроенный тип в Python


Кроме того, следующий код (последний цикл для печати элементов)

     for item in food:
        print(order)

должен быть

    for item in food:
        print(item)

иначе он просто распечатает последний введенный заказ пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...