在运行循环时读取文件?

时间:2017-02-18 18:34:25

标签: python python-3.x file-handling

我在运行此程序时遇到困难而没有创建逻辑错误。我想知道是否有人可以向我解释什么是错的。我的文件代码WORKS:

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()

第一个程序的输入/输出应为
输入六个测试和分数 输入测试名称对象 在此测试中输入%分数88 输入测试名称循环 在此测试中输入%得分95 输入测试名称选择 在此测试中输入%得分86 输入测试名称变量 在此测试中输入%分数82 输入测试名称文件 在此测试中输入%得分100 输入测试名称功能 在此测试中输入%得分80 文件已成功创建

读取文件的第二个程序的输出应为:

阅读六项考试和分数 测试分数 对象88 循环95 选择86 变量82 文件100 功能80 平均值为88.5

1 个答案:

答案 0 :(得分:0)

你有两个问题。第一个是在write函数中的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')