从文本文件读取数据,必须使用append-Python

时间:2018-11-16 00:28:12

标签: python

我必须创建一个程序,该程序读取板子长度的文本文件。我必须找到并打印这些长度的平均值。然后,我必须打印一个长度表以及它们与平均值的差。然后我需要计算> 0.10的差异。

到目前为止,我已经能够找到木板的平均值,并且我能够计算出大于0.10的差异量。但是我无法弄清楚如何将长度和差异添加到列表中,以便能够打印每个长度及其旁边的差异。

代码:

dif = 0
total = 0
count = 0
avg = 0
difcount = 0
boards = []
with open("boards.txt", "r") as fo:
    for line in fo:
        length = float(line)
        total += length
        count += 1
        avg = total/count
        dif = length - float(avg)
        if dif > float(0.10):
            difcount += 1
    print("Average:", round(avg,2))
    for line in fo:
        print(length, dif)
    print("Number of boards > 0.10 from average:", difcount)

输出:

average: 7.97
Number of boards > 0.10 from average:3

我不知道如何打印长度和差异表

Length    Difference
#         #
#         #
# and so on

3 个答案:

答案 0 :(得分:1)

您的计算顺序不正确。在知道输入平均值之前,您不能做任何差异。目前,第一块木板无法标记,因为此时的avg仅仅是第一块木板的长度。

您需要分步骤处理:

  1. 将所有数据读入列表
  2. 计算平均值
  3. 返回列表,对照平均值检查每个项目。

在第三步中,您应该有一个轻松的时间来产生输出。

你能从那里拿走吗?

答案 1 :(得分:0)

当您尝试打印长度变量时,我认为您的长度变量没有实例化。 您可以创建一个元组数组来保存您的lengthdif

for line in fo:
boards.append((length, dif)) for item in boards: print(item)

那样,您在阅读文本文件后就会拥有它们。

答案 2 :(得分:0)

Prune的答案是正确的,我认为您没有正确计算平均值。

我认为您应该首先遍历所有木板并将其长度存储在列表中

board_lengths = []
with open("boards.txt", "r") as fo:
    for line in fo:
        board_lengths.append(float(line))

完成此操作后,您可以汇总列表以创建您的意思

import numpy as np
mean_board_length = np.mean(board_lengths)

您可以找到然后发现差异

differences = [l - mean_board_length for l in board_lengths]

以及差异大于0.1的次数

times = np.sum([d>0.1 for d in differences])