【问题标题】:Calculating average in interchangable range?计算可互换范围内的平均值?
【发布时间】:2009-10-28 21:12:28
【问题描述】:

我知道是因为 n,但是 n 应该是任何变量,并且保留为 n,这就是我所拥有的:

def average(n):
    if n >= 0:
        avg = sum((range(1:int(n)))/float(len(range(1:int(n)))))
    print avg

我该如何解决?

【问题讨论】:

  • 我不明白你在问什么。

标签: python variables average


【解决方案1】:

x 从 1 到 n 的总和就是 (n + 1) * (n / 2)。求和的元素数量为 n 。做一点简化,你的新功能是

def average(n):
    return (n + 1) / 2.0

如果您确实希望 Python 的 range() 具有独占上限的行为(即让 average(10) 返回值 1 - 9 而不是 1 - 10 的总和的平均值,则必须对此进行调整)。

【讨论】:

  • 谢谢,我知道如何更改它以包含额外的金额,我想知道如何修复我原来的尝试,但我想最简单的版本更好,再次感谢。
  • 那么你被 range() 的行为所困扰。 range(1, 10) 返回 [1, 2, 3, 4, 5, 6, 7, 8, 9]。所以你想要 range(1, n+1)。
【解决方案2】:

我可能错了,但 range(1:int(n)) 看起来语法不正确,括号也不匹配。您可能想要计算 0 到 n 范围内数字的平均值。在这种情况下,我会像这样替换您的代码:

def average(n):
if n >= 0:
    avg = sum((range(int(n))))/float(n)
print avg

【讨论】:

  • 它不计算正确的平均值,例如如果我使用该代码并为 n 插入 3,则平均值仍应为 2,但 Python 输出 1.0
  • range(n) 返回 [0..n[; 之间的整数数组;对于 3,这将是 [0,¸1, 2]; sum() 将返回 3,列表中的元素数为... 3;因此,3/3 == 1.0
【解决方案3】:

如果你的范围总是 1:n,你为什么不直接使用这个:

avg = sum((range(1:int(n)))/float(n))

或者我不明白你的问题...

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2019-03-04
    • 2018-02-28
    • 2019-06-23
    相关资源
    最近更新 更多