写一个子程序,名为&above_average,将一列数字作为其参数,返回所有大于平均值的数字(提示:

#! usr/bin/perl
sub average
{
my $total;
my $n=0;
my $average;
foreach(@_)
{
$total+=$_;
$n++;
}
$average=$total/$n;
$average;
}
sub above_average
{
@above=();
my $t=&average(@_);
foreach(@_)
{
if($_>$t){push @above ,$_};
}
@above;
}
my @fred =&above_average(1 .. 10);
print "\@fred is @fred\n";
print "(Should be 6 7 8 9 10)\n";
my @barney = &above_average(100,1 .. 10);
print "\@barney is @barney\n";
print "(Should be just 100)\n";
### 回答1: 以下是Python代码实现: ```python def avg_and_greater_than_avg(*args): avg = sum(args) / len(args) greater_than_avg = tuple(filter(lambda x: x > avg, args)) return (avg,) + greater_than_avg ``` 函数接收任意多个实数,使用`*args`表示参数个数不定。首先计算所有参数平均值,然后使用`filter`函数过滤出所有大于平均值的实数,最后将平均值大于平均值的实数组成一个元组返回。 例如,调用`avg_and_greater_than_avg(1, 2, 3, 4, 5)`,返回的元组为`(3., 4, 5)`,表示平均值为3.,大于平均值的实数为4和5。 ### 回答2: 要编这个函数,我们需要先明确几个步骤: 1. 计算所有实数的平均值。 2. 找出大于平均值的所有实数。 3. 将平均值大于平均值的实数合并成一个元组并返回。 现在我们就可以开始编函数了。以下一个可能的实现方式: ``` def average_and_above(*args): mean = sum(args) / len(args) # 计算平均值 above_mean = [x for x in args if x > mean] # 找出大于平均值的实数 return (mean, *above_mean) # 合并成元组并返回 ``` 这个函数的参数使用了可变长参数,即 `*args`,这样我们就能够接受任意多个实数作为输入。接下来,我们使用了 Python 的内置函数 `sum` 和 `len` 来分别计算所有实数的总和和数量,从而得到平均值。注意,这里使用了 Python 3.5 引入的新语法,即星号表达式 `*above_mean`,它可以将列表 `above_mean` 中的所有元素作为独立参数传递给 `return` 语句,从而方便地创建包含多个元素的元组。 最后,我们使用了列表推导式 `[x for x in args if x > mean]` 来筛选出所有大于平均值的实数,并将它们存放在一个列表中。我们将平均值和这个列表一起打包成元组并返回,这样用户就可以同时得到平均值大于平均值的所有实数了。 下面是一个简短的测试程序,可以验证上述函数的正确性: ``` if __name__ == '__main__': print(average_and_above(1, 2, 3, 4, 5)) # 输出 (3.0, 4, 5) print(average_and_above(-1, 0.5, 3, 3, 7)) # 输出 (2.5, 3, 3, 7) print(average_and_above(0)) # 输出 (0.0,) ``` 在这个测试程序中,我们依次传递了三组实数给函数 `average_and_above`,并将结果打印出来。可以看到,函数的输出符合预期,并正确地返回了所有参数平均值大于平均值的实数。 ### 回答3: 编这个函数需要使用Python中的一些基本语法和函数,比如函数的定义和返回值、将参数转换为列表、列表的遍历和求和等。 首先,我们定义一个名为average_and_above”的函数,用于接收任意个数的实数,并返回一个元组。在函数的内部,我们可以使用内置的“*args”语法,将收到的实数参数转换为一个包含所有数字的列表。这样就可以使用列表的方法和函数来进一步进行操作了。 接下来,我们需要计算所有实数的平均值。为了实现这个功能,我们可以使用Python的内置函数sum()和len()。前者可以很方便地将列表中的元素求和,后者可以返回列表中的元素数量。 然后,我们可以使用一个for循环将大于平均值的实数存储到另一个列表中。具体来说,我们可以遍历所有实数,判断它是否大于平均值,并将符合条件的数字添加到列表中。 最后,我们将列表中的数据打包成一个元组并返回。具体来说,我们可以使用元组拆包的方式,将平均值大于平均值的实数列表分别作为元组的不同元素返回以下是完整的代码示例: ```python def average_and_above(*args): nums = list(args) avg = sum(nums) / float(len(nums)) above_avg = [num for num in nums if num > avg] return (avg, *above_avg) ``` 这个函数接收任意个数的实数,并返回平均值和所有大于平均值的实数。例如: ```python >>> average_and_above(1, 2, 3, 4, 5) (3.0, 4, 5) >>> average_and_above(10, 20, 30, 40, 50) (30.0, 40, 50) >>> average_and_above(0, -10, 10, -20, 20) (0.0, 10, 20) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值