使用perl计算平均值

时间:2011-08-02 00:44:22

标签: perl

是否可以通过要求用户输入平均值来编写计算平均值的程序?

我编写了一个perl脚本,用于计算三个数字的平均值。这是我的代码:

#usr/bin/perl
 use strict;
 use warnings;

 my $a; #variable declaration
 my $b; #variable declaration
 my $c; #variable declaration
 my $avg; #variable declaration
 my $x; #variable declaration
 my $y; #variable declaration
 my $z; #variable declaration
 my $results; #variable declaration
 my $number; #variable declaration

 $a = 2; #number 1
 $b = 6; #number 2
 $c = 7; #number 3

 $avg = avg($a,$b,$c); #Three variables to be averaged

  sub avg {
  ($x,$y,$z) = @_; #Store variables in array
   $results = ($x+$y+$z)/3; #Values stored added, and divided for average
   return $results; #return value

           }

   print "$avg\n";
   exit;

而不是我的代码计算数字的平均值而不是我输入变量而是提示我在终端输入三个数字以进行平均。我知道在perl中做类似的事情你必须实现一些代码:

 print STDOUT "Enter a number: \n";
 $averages = <STDIN>;
 print "The Average is $averages.\n";

当我将其添加到我的代码中时,它不会打印出如何正确实现我的代码的任何内容。

2 个答案:

答案 0 :(得分:3)

计算平均值的更通用的解决方案可能是第一步:

sub avg {
    my $total;
    $total += $_ foreach @_;
    # sum divided by number of components.
    return $total / @_;
}

这样你就不在乎你平均有多少项了。 avg()弄清楚了。

下一步是阅读您的输入。您可以使用<>运算符执行此操作:

my @input;
print "Enter a few numbers...\n";
while( <> ) {
    chomp;
    while( m/([\d.-])/g ) {
        push @input, $1;
    }
}
local $" = ', ';
print "The average of [@input] is ", avg( @input ), "\n";

最后,我们通过打印输入集,调用和打印avg()将所有内容放在一起。

正则表达式只是从一串输入中抽出看起来像数字的东西。它不像数字验证器。

答案 1 :(得分:0)

#!/usr/bin/perl
use warnings;
use strict;

my $sum = 0;
my $n = 0;
while (<>) {
    $sum += $_;
    $n++;
}
print $sum/$n, "\n";

简而言之,我们通过总计和跟踪项目数来计算平均值。 while (<>)从命令行或STDIN中指定的文件中神奇地读取(如果您的程序只是交互式的话,您可能希望使用while (<STDIN>)。)