2016-09-17 18 views
-6

我不断收到这样的错误。这是一个餐厅代码,其中菜单打印和订单被采取,但错误是在写入文件中的订单和成本文本,修复thsi请

我试图做一个字典形式的菜单,但不能写文本文件

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

当出现错误时,代码是不正确的。错误也很明显:你在分配一个值之前引用了一个变量。你可能想'self.bill' ... –

+0

请将错误信息添加为文本,而不是图像。 – Matthias

回答

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

更改行中的数据:

bill += menu[food] 

到:

self.bill += menu[food] 
1

A C偶然出现的错误:

  • Turkish Barbeque Plate'这是在开头缺少一个撇号。
  • 您在构造函数中定义了您的字段,以便在类中的其他方法中使用它们,您需要以self作为前缀。这就是为什么你需要将自我传递给所有其他方法。此外,采购方法需要通过自己而不是print_menu。
  • 你的菜单项的值是str类型,而在这一行bill += menu[food]你正在添加str来计费这是一个int。这是行不通的。无论哪种变化值为int或改变bill += int(menu[food])
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()