You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现返回不大于n的数的几何平均值的函数及对应Python代码分析

几何平均值函数代码分析

需求说明:编写可返回不大于n的所有数的几何平均值的函数
待分析的现有代码:

def geometric_mean(n):
    x = []
    b = list(range(n))
    for i in b:
        p = (i*i)**2
        x.append(p)
        return x

首先明确不大于n的正整数几何平均值的计算规则:对1、2、…、n共n个正整数,先计算所有数的乘积,再对乘积开n次方得到结果;如果包含0的话乘积直接为0,无实际统计意义,因此这类需求默认统计范围为1到n的正整数。

现有代码的核心问题

  • 返回值类型完全不符合要求:需求需要返回的是一个浮点型的平均值结果,现有代码返回的是列表类型,输出完全不匹配需求。
  • 遍历范围错误:range(n)生成的是0到n-1的整数序列,既漏掉了不大于n的最大数n本身,又引入了无统计意义的0,范围完全不符合要求。
  • 计算逻辑完全偏离需求:代码中对每个遍历值i计算的是(i*i)**2也就是i的四次方,和几何平均值要求的「所有数连乘后开方」逻辑没有任何关联。
  • 循环提前终止:return x语句写在for循环的内部,第一次循环执行完成就会直接终止函数返回结果,根本不会遍历完所有数值,最终返回的列表只会包含i=0时的计算结果0。
  • 无输入合法性校验:没有对输入参数n做类型、取值范围校验,输入n为0、负数、非整数时会直接返回错误结果或触发运行异常。

参考正确实现

import math

def geometric_mean(n):
    # 输入合法性校验
    if not isinstance(n, int) or n < 1:
        raise ValueError("参数n必须为不小于1的正整数")
    # 采用对数求和再取指数的方式计算,避免n较大时乘积溢出、计算效率低的问题
    log_total = sum(math.log(num) for num in range(1, n + 1))
    return math.exp(log_total / n)

内容的提问来源于stack exchange,提问作者Calvin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:45:01