0

このプログラムは、気象データを含むファイルの名前 (retet_verdata_florida.txt など) を要求します。次に、ファイルを開き、特定のデータを書き込むファイルの名前を尋ねます。年も聞かれます。

次に、その年の異なる月のデータ (テキスト ファイルでは \t で区切られている) を読み込み、月の合計を "sum_temp" と "sum_wind" に入れ、平均を計算することになっています。ファイルと画面の両方に出力します。しかし、正常に機能するはずですが、平均は各月で 0.0 になります。

リストの一部を次に示します。

Stnr Dato DD06 DD12 DD18 FFM FXM POM TAM UUM
50540 07.01.1957 150 170 170 6.2 8.8 1010.6 6.3 94
50540 08.01.1957 160 160 200 7.2 9.8 1001.8 8.0 99
50540 09.01.1957 290 200 160 8.1 13.3 990.2 5.7 91
50540 10.01.1957 300 360 350 12.7 15.4 1008.2 2.8 87
50540 11.01.1957 0 200 160 3.8 10.4 1015.1 1.7 98
50540 12.01.1957 0 330 340 5.1 10.4 995.0 5.0 96
50540 13.01.1957 350 130 60 6.5 12.3 1018.2 1.6 54
50540 14.01.1957 0 130 150 3.1 7.0 1033.0 -2.8 69

コードは次のとおりです。

def year_avg():

    #Asks for the file name to be opened, file name for storage, and year (buffer against error).
    file_opening = input("Write the file to be opened (with .txt): ") or "rettet_verdata_florida.txt"
    file_open = open(file_opening, "r")
    writing_file = input("Which file do you want it written to, sir?: ") or "file_for_data.txt"
    year = float(input("And which year do you want it from?: "))

    #Constants and sums
    number_of_days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    sum_temp = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    sum_wind = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

    #For leap years
    if year % 4 == 0:
        number_of_days[2] = 29


    #In case the teacher tries anything funny
    if (writing_file == "rettet_verdata_florida.txt" or "verdata_kirkenes.txt" or "verdata_florida.txt"):
        writing_file = "file_for data.txt"


    #Makes the writing file, and picks the data for that year
    store_data = open(writing_file, "w")

    for line in file_open:
        try:
            split_numbers = line.split('\t')
            date_info = split_numbers[1].split('.')
            year_of_line = float(date_info[2])
            month_of_line = float(date_info[1])

            if year_of_line == year:
                sum_temp[int(month_of_line)] += float(split_numbers[8])
                sum_wind[int(month_of_line)] += float(split_numbers[5])

        except Exception:
            pass


    #Prints everything out, plus stores it in the file specified in "writing_file"
    year_in_comma = (float(year))/10000
    print("Dato\tTAM\tFFM")

    for i in range(1, 13):
        print(i + year_in_comma, sum_temp[i] / number_of_days[i] , sum_wind[i] / number_of_days[i], sep = "\t", file = store_data) 
        print(i + year_in_comma, sum_temp[i] / number_of_days[i] , sum_wind[i] / number_of_days[i], sep = "\t")


    store_data.close()
    file_open.close()
4

1 に答える 1

0

ここでの問題の 1 つは次のとおりです。

year = float(input("And which year do you want it from?: "))

yearあり、floatです。その後、次のようになります。

date_info = split_numbers[1].split('.')
year_of_line = date_info[2]
month_of_line = date_info[1]

if year_of_line == year: 

where year_of_lineisstrであり、条件は常に false です。その結果、データは常にゼロになります。を使用している場合python 2.x、この問題は検出しやすいかもしれません00.

于 2013-09-13T01:59:05.563 に答える