请修好

时间:2016-09-17 07:33:18

标签: python

我不断收到这样的错误。这是一个餐厅代码,其中打印菜单并下订单,但错误是在文件文本中写下订单和成本,

我试图以字典的形式制作菜单,但不能在文本文件中写入数据

class restaurant():
  def __init__(self):
    self.name = ""
    self.menu = {}
    self.order = []
    self.bill = 0
  def print_menu(self):
    print "MENU CARD"
    self.menu = {'BBQ Grill':'50','Chicken Gollati':'80','French fries':'60',
            'Hara Bara Kabab':'90','Makani Special Dum Biriyani':'100',
             'Egg Jumbo Sandwich':'120','Roasted Prawn   Salad':'90',
              'Parathas':'80','Turkish Barbeque Plate':'100'}
    for item in self.menu:
      print item,"-",self.menu[item]
  def takeorder(self):
    f1 = open("billlog.txt","w")
    print "What would you like to order?"
    ans = "y"
    while ans == "y":
      food = raw_input("enter order - ")
      self.bill += int(self.menu[food])
      ans = raw_input("go on?(y/n): ")
      f1.write(food)
      f1.write("\t\t")
      f1.write(self.bill)
      print food,"\t\t\t",self.bill
    f1.close()
  def readfilebilllogs(self):
    f1 = open("billlog.txt","r")
    f1.read()
    f1.close()
r = restaurant()
r.print_menu()
r.takeorder()
r.readfilebilllogs()

4 个答案:

答案 0 :(得分:1)

其中有几处错误:

  • Turkish Barbeque Plate'这在开头缺少撇号。
  • 您在构造函数中定义了字段,以便在类中的其他方法中使用它们,您需要使用self作为前缀。这就是你需要将self传递给所有其他方法的原因。另外takeorder方法需要传递self not print_menu。
  • 您的菜单项的值是str类型,而在此行bill += menu[food]中您要添加str to bill这是一个int。这不会起作用。将值更改为int或将此行更改为bill += int(menu[food])

答案 1 :(得分:1)

您的代码有多处错误。试试这个它应该工作。我试过python3并修改python2.7所以可能会有一些语法错误。我在评论中解释了错误

class restaurant():
  def __init__(self):
    self.name = ""
    self.menu = {}
    self.order = []
    self.bill = 0
  def print_menu(self):
    print "MENU CARD"
##This should be self.menu instead of just menu. If you use just menu it's a local variable which can't be used from other function
    self.menu = {'BBQ Grill':'50','Chicken Gollati':'80','French fries':'60',
            'Hara Bara Kabab':'90','Makani Special Dum Biriyani':'100',
             'Egg Jumbo Sandwich':'120','Roasted Prawn   Salad':'90',
              'Parathas':'80','Turkish Barbeque Plate':'100'}
#Again self.menu
    for item in self.menu:
      print item,"-",self.menu[item]
  def has_item(self):
    name = raw_input("Enter name of costumer: ")
    food = raw_input("Enter order: ")
    for i in self.menu:
      if i == food:
        print "Yes"
      else:
        print "No"

# The first parameter is always instance of the class (self).
  def takeorder(self):
    print "What would you like to order?"
    ans = "y"
    while ans == "y":
      food = raw_input("enter order - ")
# Instead of bill it should be self.bill
#Convert string value of cost to int while adding
      self.bill += int(self.menu[food])
      ans = raw_input("go on?(y/n): ")
    print self.bill
r = restaurant()
r.print_menu()
r.takeorder()

答案 2 :(得分:0)

更改行:

bill += menu[food]

成:

self.bill += menu[food]

答案 3 :(得分:0)

我可以看到的第一个问题是,在你的menu变量中,土耳其烧烤板之前会丢失一个撇号,这会破坏你的字典。

其次,你在创建之前提到了账单。

我已经解决了一些问题,以下内容应该有效。

class restaurant():
    def __init__(self):
        self.name = ""
        self.order = []
        self.bill = 0
        self.menu = {'BBQ Grill':50,
                     'Chicken Gollati':80,
                     'French fries':60,
                     'Hara Bara Kabab':90,
                     'Makani Special Dum Biriyani':100,
                     'Egg Jumbo Sandwich':120,
                     'Roasted Prawn Salad':90,
                     'Parathas':80,
                     'Turkish Barbeque Plate':100}

    def print_menu(self):
        print ("MENU CARD")
        for item in self.menu:
            print '{} - {}'.format(item, self.menu[item])

    def has_item(self):
        name = raw_input("Enter name of customer: ")
        food = raw_input("Enter order: ")
        for item in self.menu():
            if item == food:
                print "Yes"
            else:
                print "No"

    def take_order(self):
        print "What would you like to order? "
        response = 'yes'
        while response.lower() == 'yes':     #.lower() to remove caps from response
            food = raw_input("Enter Order: ")
            self.bill += self.menu[food]
            response = raw_input("Go on? (Yes or No): ")
        print self.bill

r = restaurant()
r.print_menu() 
r.take_order()