簡體   English   中英

循環遍歷列表。 文件循環結束

[英]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語句。 並確保在循環結束之前對ri的對象進行了實際操作,確保在使用它們之前它們有任何東西。

聽起來有點像您希望循環為整個文件運行一次,但它在文件中的每一行運行。 循環內部的邏輯只需要處理一行,所以你不能使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM