查找哈希值的平均值Perl



我希望返回以下(grades.txt(的哈希值(每个键(的平均值

Melotti, Suzanne: 100 100 95 95 92 87
Wayne, Bruce: 85 85 85 75 75 75
Stark, Tony: 92 92 75 79 91 87
Odinson, Thor: 23 12 10 42 50 64
Kane, Kathy: 100 100 100 100 95 95
Rogers, Steven: 92 91 91 90 87 84
Murdock, Matthew: 100 100 100 99 99 98
VonDoom, Victor: 75 75 72 73 74 80
Queen, Olvider: 92 83 74 65 100 66
Hall, Carter: 23 12 10 42 50 64
Xavier, Charles: 100 100 95 95 92 87

到目前为止,我的子程序是这样的:

$grade_file = "grades.txt";
open FILE, "<", $grade_file;
sub avg {
while (<$FILE>){
foreach $line ($grade_file){
# some code
return $total
}
}
}

使用List::Util中的sum。要获取元素的数量,只需在标量上下文中使用一个数组。

#!/usr/bin/perl
use strict;
use warnings;
use feature qw{ say };
use List::Util qw{ sum };    
while (<>) {
my ($name, $points) = split /: /;
my @points = split ' ', $points;
say $name, ': ', sum(@points) / @points;
}

无外部模块的平均品位计算

use strict;
use warnings;
while(<DATA>) {
my($k,$d) = split ':';
printf "%20s : %.2fn", $k, average($d);
}
sub average {
my $data = shift;
my(@data,$sum);
@data = split ' ', $data;
$sum += $_ for @data;
return $sum/@data;
}
__DATA__
Melotti, Suzanne: 100 100 95 95 92 87
Wayne, Bruce: 85 85 85 75 75 75
Stark, Tony: 92 92 75 79 91 87
Odinson, Thor: 23 12 10 42 50 64
Kane, Kathy: 100 100 100 100 95 95
Rogers, Steven: 92 91 91 90 87 84
Murdock, Matthew: 100 100 100 99 99 98
VonDoom, Victor: 75 75 72 73 74 80
Queen, Olvider: 92 83 74 65 100 66
Hall, Carter: 23 12 10 42 50 64
Xavier, Charles: 100 100 95 95 92 87

输出

Melotti, Suzanne : 94.83
Wayne, Bruce : 80.00
Stark, Tony : 86.00
Odinson, Thor : 33.50
Kane, Kathy : 98.33
Rogers, Steven : 89.17
Murdock, Matthew : 99.33
VonDoom, Victor : 74.83
Queen, Olvider : 80.00
Hall, Carter : 33.50
Xavier, Charles : 94.83

最新更新