【问题标题】:Reading a file while running a loop?运行循环时读取文件?
【发布时间】:2017-02-18 18:34:24
【问题描述】:

在不产生逻辑错误的情况下运行此程序有困难。我想知道是否有人可以向我解释出了什么问题。我的文件代码 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

【问题讨论】:

  • 你得到了什么输出,期望输出是什么?告诉我们您如何知道存在逻辑错误
  • 错误信息是 Traceback(最近一次调用最后一次):文件“C:\Users\ab\Desktop\chapter 6\program 6_2.py”,第 19 行,在 main() 文件中“C:\Users\ab\Desktop\chapter 6\program 6_2.py”,第 11 行,主分数 = int(myfile.readline()) ValueError: int() 以 10 为底的无效文字:'\n'
  • 第一个文件的输入应该是 -- 输入六个测试和分数 输入测试名称对象 输入此测试的 % 分数 88 输入测试名称循环 输入此测试的 % 分数 95 输入测试名称选择 输入 %此测试的分数 86 输入测试名称变量 输入此测试的百分比分数 82 输入测试名称文件 输入此测试的百分比分数 100 输入测试名称函数 输入此测试的百分比分数 80 文件已成功创建
  • 第二个程序的输出应该是----读取六个测试和分数 TEST SCORE 对象 88 个循环 95 个选择 86 个变量 82 个文件 100 个函数 80 平均是 88.5
  • 你先写score然后写name,但是试着读name然后读score。此外,您应该 strip() 将要转换为 int 的内容。添加一些打印以验证输入或使用调试器运行它。

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


【解决方案1】:

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

【讨论】:

  • 感谢您的回答。出于某种原因,第二个程序仍然给我一个错误。我添加了更改。我对编程很陌生。
  • 这很奇怪。当我使用我发布的更改运行这两个函数时,我没有收到任何错误。为了确保没有误解,您确实将第一个 main() 函数中第二个“打印”之后的代码替换为我发布的代码,对吧?
  • 添加了您推荐的编辑,我很惊讶它产生了巨大的变化。程序运行精美,现在完美运行!非常感谢。有没有办法在这个网站上发送私人消息?我想知道是否可以问你几个问题。我想提高我的编码能力。
猜你喜欢
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2012-03-16
  • 2017-01-09
  • 1970-01-01
相关资源
最近更新 更多