2017-02-18 112 views
0

我在運行這個程序時遇到了困難,沒有創建邏輯錯誤。我想知道如果有人能向我解釋什麼是錯的。我對文件代碼的工作:運行循環時讀取文件?

def main(): 
    myfile = open('tests.txt','w') 
    print('Enter six tests and scores or Enter to exit') 
    print('--------------------------') #I added this feature to make the code 
    #more structured 
    testName = input('Enter test name: ') 
    while testName != '': 
     score = int(input('Enter % score of this test: ')) 
     myfile.write(str(score) + '\n') 
     testName = input('Enter test name: ') 
     myfile.write(testName + '\n') 
    myfile.close() 
    print('File was created successfully') 
main() 

但這種代碼,我跑讀取和輸出文件是給我一個邏輯錯誤。我知道代碼是及時編寫的,但我不知道發生了什麼。能否請你檢查我的代碼,並告訴我爲什麼它不工作:這是代碼

第一個節目
def main(): 
    myfile = open('tests.txt','r') 
    print('Reading six tests and scores') 
    print('Test\t    Score') 
    print('----------------------------') 
    test_score = 0 
    counter = 0 #for number of tests 
    line = myfile.readline() 
    while line != '': 
     name = line.rstrip('\n') 
     score = int(myfile.readline()) 
     test_score += score 
     print(name, score) 
     line = myfile.readline() 
     counter += 1 
    myfile.close() 
    average = test_score/ counter 
    print('Average is',format(average,'.1f')) 
main() 

輸入/輸出應該是
輸入6次測試,成績 輸入測試名稱對象 輸入%得分在這個測試88 輸入測試名稱循環 在這個測試95 輸入測試名稱選擇 在這個測試86 輸入測試名稱變量 在這個測試中輸入%得分82 輸入測試名稱的文件 輸入%分數輸入%評分輸入%得分在這個測試100 輸入測試名稱功能 在這個測試80 文件成功創建

輸出第二程序讀取該文件應該是輸入%得分:

讀6次測試,分數 TEST SCORE 對象88 迴路95個 選擇86個 變量82個 文件100個 功能80 平均是88.5

+0

你得到了什麼輸出?慾望輸出是什麼?向我們展示如何知道存在邏輯錯誤 – SaggingRufus

+0

錯誤消息是Traceback(最近呼叫的最後一個): 文件「C:\ Users \ ab \ Desktop \ chapter 6 \ program 6_2.py」,第19行,在 main () 文件「C:\ Users \ ab \ Desktop \ chapter 6 \ program 6_2.py」,行11,主 score = int(myfile。readline()) ValueError:以int 10爲基數的無效文字:'\ n' – ABerrio

+0

第一個文件的輸入應該是 - 輸入六個測試和分數 輸入測試名稱對象 在此測試中輸入%分數88 輸入測試名稱循環 在這個測試95 輸入測試名稱選擇 在這個測試86 輸入測試名稱變量 在這個測試82 輸入測試名稱的文件 在這個測試中輸入%分數輸入%分數進入%的分數輸入%評分100 輸入測試名稱功能 在此測試中輸入%得分80 文件已成功創建 – ABerrio

回答

0

你有兩個問題。第一個是在寫函數中的while循環之前。您將測試名稱作爲輸入,但不會將其寫入文件。

在while循環解決您的第一個問題之前將測試名稱寫入文本文件,然後將其留給您。您添加新行的方式會使您最終在文件末尾留出空行,然後嘗試讀取。將新行移到寫入內容的前面。

testName = input('Enter test name: ') 
    myfile.write(testName) 
    while testName != '': 
     score = int(input('Enter % score of this test: ')) 
     myfile.write('\n' + str(score)) 
     testName = input('Enter test name: ') 
     myfile.write('\n' + testName) 
    myfile.close() 
    print('File was created successfully') 
+0

謝謝你的答案。出於某種原因,第二個程序仍然給我一個錯誤。我添加了更改。我對編程非常陌生。 – ABerrio

+0

這很奇怪。當我使用我發佈的更改運行這兩個函數時,我都沒有遇到任何錯誤。爲了確保沒有誤解,您在第一個main()函數的第二個「打印」後用我貼的代碼替換了代碼,對吧? – MalloyDelacroix

+0

添加了您推薦的修改,我很驚訝它造成了巨大的差異。程序運行非常完美,現在完美無缺!非常感謝。有沒有辦法在本網站發送私人訊息?我想知道我是否可以問你幾個問題。我想提高我的編碼能力。 – ABerrio