我不断收到这样的错误。这是一个餐厅代码,其中打印菜单并下订单,但错误是在文件文本中写下订单和成本,
我试图以字典的形式制作菜单,但不能在文本文件中写入数据
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 :(得分:1)
其中有几处错误:
Turkish Barbeque Plate'
这在开头缺少撇号。 self
作为前缀。这就是你需要将self传递给所有其他方法的原因。另外takeorder方法需要传递self not print_menu。 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()