0

以下でループを使用して同じことを行い、プログラムをより効率的にし、力ずくではなくするにはどうすればよいでしょうか?

ファイルから値を読み取り、浮動小数点数に変換し、最初の 3 つの数値の平均を取り、その平均を新しいファイルに書き込み、次の 3 つの数値を続けようとしています。

例:

元のファイル:

20.1
18.2
24.3
16.1
45.5
42.3
46.1
43.8
44.4

新しいファイル:

20.87
19.53
28.63
34.63
44.63
44.07
44.77

これは私のコードです:

def smooth(rawDataFilename, smoothDataFilename):
    aFile = open(rawDataFilename, 'r')
    newFile = open(smoothDataFilename, 'w')

    num1 = float(aFile.readline())
    num2 = float(aFile.readline())
    num3 = float(aFile.readline())
    num4 = float(aFile.readline())

    smooth1 = (num1 + num2 + num3) / 3
    smooth2 = (num2 + num3 + num4) / 4

    newFile.write(str(format(smooth1, '.2f')))
    newFile.write('/n')
    newFile.write(str(format(smooth2, '.2f')))

    aFile.close()
    newFile.close()
4

2 に答える 2

1

私はあなたのタスクをループで解決します:

def smooth(rawDataFilename, smoothDataFilename):
    data = []
    with open(rawDataFilename, 'r') as aFile, open(smoothDataFilename, 'w') as newFile:
        for line in aFile:
            num = float(line)
            data.append(num)
            if len(data) >= 3:
                smooth = sum(data) / len(data)
                newFile.write(format(smooth, '.2f') + '\n')
                del data[0]

ソリューションとの違い:

  • withエラーが発生した場合でも、ファイルをきれいに閉じるようにします
  • データの収集と平滑化にリストを使用します
  • シーケンスの代わりに数字の間に改行を入れます/n

テキストが示唆するように 3 タプルごとの平均ではなく、コードが示すように移動平均が必要だと思います。

于 2013-11-03T16:08:52.830 に答える