我的餐厅代码不断收到错误消息吗?

时间:2019-01-22 14:43:29

标签: python string list append

所以基本上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 :(得分:0)

list.append("coffee")

应该是

food.append("coffee")

,并且该代码应该在您使用list的代码中的任何位置。 list是Python中的内置类型


此外,以下代码(打印项目的最后一个循环)

     for item in food:
        print(order)

应该是

    for item in food:
        print(item)

否则,它将仅打印用户最后输入的订单。

答案 1 :(得分:0)

仅是答案,但格式更好。
只需输入:

food.append(...)

代替

list.append(...)

无处不在。

答案 2 :(得分:0)

您正在尝试使用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来存储客户输入!您可能对ordertot感到困惑。

对于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,如果这可能对您造成问题,请考虑到这一点。

答案 3 :(得分:-1)

list替换为food,并将其追加到

order替换为tot,以节省价格

final替换item订单以打印项目