for 循环中函数的 *args(非关键字参数)n 不正确

Incorrect number n of *args (Non-Keyword Arguments) at function in for cycle

我是一个菜鸟,试图完成一些任务但遇到了问题。 我必须使用 *args(非关键字参数)计算函数中的算术平均值(我希望它是一个正确的定义)。

所以我有这个

def avsum(*numbers):
summ = 0
print('Numbers', numbers)    
for n in numbers:
    summ += n
print('Calc', summ)
print('n', n)
print('Numbers', numbers)
result = summ / (n - 1)
return result


print(avsum(2, 3, 4))

所有打印出来的只是为了控制和理解发生的事情。 终端显示如下:

Numbers (2, 3, 4)
Calc 9
n 4
Numbers (2, 3, 4)
3.0

据我了解,*numbers 是非关键字参数,它们是元组。 所以在元组数字中,我有 3 个元素(数字 (2, 3, 4)),但出于某种原因 n 是 4。 我已经将算术平均值设为 sum / (n - 1) ,但它看起来像一个奇怪的解决方案。 任何想法为什么会这样?为什么n不是3? 谢谢回复。

更新 感谢您的回复,对不起,也许我很愚蠢,但我真的无法理解如何在评论中编写代码'readable'。正如我做对的那样,它们不能是多行的。这样我就把它添加到问题中 所以我有一个结束任务:

array = [1, 2, 3, 4, 5]
    calc = 0
for n in array:
    calc += n
print("Sum", calc)
print("Arithmetic mean", calc / n)
print(n)

终端显示这个

Sum 15
Arithmetic mean 3.0
5

所以在这种情况下,不存在您所说的错误,数组有 5 个元素,n 为 5。为什么?到处循环

语句for n in enumerate(numbers):中的值n是for循环的局部变量,它不存在于循环外,因此当尝试语句result = summ / (n - 1)时,你很可能收到与未定义变量 n 相关的错误。要更正此错误,请执行以下操作: result = summ/len(numbers)

鉴于您的输入现在已命名为数组

array = [1, 2, 3, 4, 5]
    calc = 0
for n in array:
    calc += n
print("Sum", calc)
print("Arithmetic mean", calc / len(array))