[英]Looping through a list. End of file loops
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
對象尚未聲明,顯然是因為循環在第一次迭代后退出。 有人可以指出我如何檢查它是文件末尾還是列表的最后一項,以便能夠查看我是否已完成檢查或以其他方式循環直到文件末尾,以便我可以打印文本到我的另一個文件?
for
已經循環了。 刪除while
語句。 並確保在循環結束之前對r
和i
的對象進行了實際操作,確保在使用它們之前它們有任何東西。
聽起來有點像您希望循環為整個文件運行一次,但它在文件中的每一行運行。 循環內部的邏輯只需要處理一行,所以你不能使用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
循環將遍歷文件中的每一行,然后在到達末尾時停止。如果您需要知道最后一行是什么行,它將循環變量保留在它擁有的最后一個值)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.