いつもお世話になっています。perl初心者でただいま勉強中です。課題でweather.datというファイルを読み込んで、if文を使わず、ハッシュを使って、1ヶ月分の天気を集計するプログラムを作りたいんですが、cloudy:
rainy: stormy: sunny: というようになってしまい、データの個数が表示できません。気温についても同様の結果になってしまいます。どのようにすればいいですか?
自分の実行結果
day 1: 15.0 rainy
day 2: 20.4 cloudy
day 3: 20.1 sunny
day 4: 22.5 cloudy
day 5: 21.8 sunny
day 6: 23.7 sunny
day 7: 21.8 cloudy
day 8: 17.1 cloudy
day 9: 19.4 rainy
day 10: 23.1 sunny
day 11: 20.2 sunny
day 12: 13.6 rainy
day 13: 15.8 cloudy
day 14: 22.6 sunny
day 15: 19.8 cloudy
day 16: 20.4 sunny
day 17: 20.2 rainy
day 18: 15.4 rainy
day 19: 15.0 cloudy
day 20: 22.9 cloudy
day 21: 17.4 cloudy
day 22: 15.8 cloudy
day 23: 18.8 cloudy
day 24: 22.1 rainy
day 25: 16.0 rainy
day 26: 15.4 rainy
day 27: 22.0 sunny
day 28: 18.7 stormy
day 29: 23.0 cloudy
day 30: 19.0 sunny
day 31: 21.9 rainy
Days
cloudy:rainy:stormy☀️---
Average Temperatures
Illegal division by zero at scr2-3.pl line 26.
正しい実行結果
day 1: 15.0 rainy
day 2: 20.4 cloudy
day 3: 20.1 sunny
day 4: 22.5 cloudy
day 5: 21.8 sunny
day 6: 23.7 sunny
day 7: 21.8 cloudy
day 8: 17.1 cloudy
day 9: 19.4 rainy
day 10: 23.1 sunny
day 11: 20.2 sunny
day 12: 13.6 rainy
day 13: 15.8 cloudy
day 14: 22.6 sunny
day 15: 19.8 cloudy
day 16: 20.4 sunny
day 17: 20.2 rainy
day 18: 15.4 rainy
day 19: 15.0 cloudy
day 20: 22.9 cloudy
day 21: 17.4 cloudy
day 22: 15.8 cloudy
day 23: 18.8 cloudy
day 24: 22.1 rainy
day 25: 16.0 rainy
day 26: 15.4 rainy
day 27: 22.0 sunny
day 28: 18.7 stormy
day 29: 23.0 cloudy
day 30: 19.0 sunny
day 31: 21.9 rainy
Days
cloudy: 12
rainy: 9
stormy: 1
sunny: 9
Average Temperatures
cloudy: 19.1916666666667
rainy: 17.6666666666667
stormy: 18.7
sunny: 21.4333333333333
以下が、コードです。よろしくお願いします。
Perl
1コード
%days = ();
%tmp = ();
open(IN, "weather.dat") or die("Cannot open file.");
while (<IN>) {
chomp;
($day,$weather,$tmp) = split(/,/);
print("day $day:\t$tmp\t$weather\n");
$days{$}++;
$tmp{$}++;
}
close(IN);
print("---\nDays\n");
printf("cloudy:",$);#ここがcloudy:12のように表示したい
printf("rainy:",$);#ここがrainy:9のように表示したい
printf("stormy:",$);#ここがstormy:1のように表示したい
printf("sunny:",$);#ここがsunny:9のように表示したい
print("---\nAverage Temperatures\n");
printf("cloudy:",$/$days);
printf("rainy:",$/$days);
printf("stormy:",$/$days);
printf("sunny:",$/$days);
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。