f = open("test.txt", 'r')
fw = open("testouput.txt",'w')
for line in f:
data = line.strip().split(',')
while data != '':
if data[0] == 'rectangle':
r = Rectangle(float(data[1]), float(data[2]))
elif data[0] == 'isoceles triangle':
i = IsocelesTriangle(float(data[1]), float(data[2]))
fw.write('rectangle, '+ str(r.get_perimeter()) + ',' + str(r.get_area())) #if the object is made
fw.write('isoceles triangle, ' + str(i.get_perimeter()) + ',' + str(i.get_area()))
我正在阅读一个名单和数字列表,我正在拆分它并取出\n
字符。但是通过这个设置我的while data !=''
使我的编译器冻结。如果我不使用while循环它会卡在第一个,然后告诉我我的i
对象尚未声明,显然是因为循环在第一次迭代后退出。有人能指出我如何检查它是文件的末尾还是列表的最后一项,以便能够看到我是否已完成检查或其他方式循环直到文件结尾,以便我可以打印文本到我的另一个文件?
答案 0 :(得分:0)
for
已经循环。删除while
语句。并确保在循环结束之前确实对r
和i
中的对象执行了某些操作,确保它们在使用之前有任何内容。
答案 1 :(得分:0)
听起来有点像你期望循环运行一次,对于整个文件,但它在文件中每行运行。循环中的逻辑只需要处理一行,所以你不能使用fw.write()
代码来尝试写三角形和矩形,因为它们不能同时存在于一条线上
如果你按照你的要求做,并在写完结果之前等到文件的末尾,那么只有在文件有一个三角形和一个矩形时才能使用。如果它不止于此,那么当你到达目的地时,你已经扔掉了一个,而且只有最后一个。
所以你需要一些形状更像的东西:
for line in f:
data = line.strip().split(',')
if data[0] == 'rectangle':
r = Rectangle(...
fw.write("rectangle...."
elif data[0] == 'isoceles triangle':
i = IsocelesTriangle(...
fw.write("isoceles triangle.."
print("Finished")
这样,对于文件中的每一行,如果是矩形,则创建一个矩形并写入详细信息。如果是三角形,则创建一个并写入详细信息。当文件有一行,两行或十行时,这就可以工作。
(你通常不需要检查你是否在文件的最后一行,for
循环将遍历文件中的每一行,然后在它到达结尾时停止。你需要知道最后一行是什么,它将循环变量保留在它的最后一个值上。