f=open('foo.dat','w+')
rate=0
print"Menu is:"
print"""1. Indian
2.Italian
3.Chinese
4.COntinential
5.Starters and drinks"""
hotel_food={1:'Indian',2:'Italian',3:'Chinese'}
f.write(str(hotel_food))
food=input("Enter the food type:")
f.write(str(food))
if(hotel_food.has_key(food)):
print"Menu is:"
print"""1. Roti with Curry
2.South Indian Cuisines
3.festival dishes
4.sea food"""
hotel_food1={1:'Roti with Curry',
2:'South Indian Cuisines'}
f.write(str(hotel_food1))
fd=input("ENter the food type")
f.write(str(fd))
if(hotel_food1.has_key(fd)):
rate=rate+1234
print rate
l=f.write(str(rate))
x=f.read(l)
print x
f.close()
该程序允许用户输入他们想要的食物类型和子类型。之后计算账单或费率。
运行程序时,错误为:x=f.read(l)
TypeError:需要一个整数
但是当我进入时:x=f.read(str(l))
同样的错误来了:x=f.read(str(l))
TypeError:需要一个整数。
这里,即使菜单有5个案例,也就是用咖喱选择印度食品和烤肉,只显示一个案例。如果这是正确的,我将完成其余的工作。
这是在python中实现文件的正确方法吗?我无法将任何内容写入档案。
答案 0 :(得分:1)
您的问题出在此处:x=f.read(l)
当您将单个参数传递给read()
时,是期望值和整数(读取IIRC的字节数)。
使用不带参数的x=f.read()
来读取文件中的所有数据。
另外l=f.write(str(rate))
也是不必要的。只需调用f.write(str(rate))
无需存储返回值,除非您预计会出现问题。
编辑:我有一些建议:使用字符串而不是字典和字典的键。这种方式raw_input()
将提供您可以直接使用的密钥。
此外,您经常阅读同一文件的写作,这会弄乱您的阅读。有关文件的更多pythonic处理,请参阅here。我建议封装你的读取并以这种方式编写。
如果您只想检查是否已将数据写入文件,只需使用f.write(data)
并假设它有效,除非它引发错误。查看我的回答{{3} }
我不完全确定应该发生什么,但这是我最好的猜测
f=open('foo.dat','w+')
rate=0
print"Menu is:"
print"""1. Indian
2.Italian
3.Chinese
4.COntinential
5.Starters and drinks"""
hotel_food={'1':'Indian','2':'Italian','3':'Chinese'}
f.write(str(hotel_food))
food=raw_input("Enter the food type: ")
f.write(str(food))
if(food in hotel_food):
print"Menu is:"
print"""1. Roti with Curry
2.South Indian Cuisines
3.festival dishes
4.sea food"""
hotel_food1={'1':'Roti with Curry', '2':'South Indian Cuisines'}
f.write(str(hotel_food1))
fd=raw_input("ENter the food type: ")
f.write(str(fd))
if fd in hotel_food1:
rate=rate+1234
f.write(str(rate))
x=f.read()
print x
f.close()
希望这有帮助!