尝试在python中计算平均值

时间:2018-09-30 15:52:48

标签: python

所以我是python的新手,我正在努力使用新语法。我正在尝试创建一个脚本,该脚本仅将年龄分配给我在函数参数中调用的人数,然后打印出每个年龄,然后计算平均年龄。

这是脚本。

import random as rnd

def age_func(size):

    listofAges = []
    totalSum = 0
    average = 0

    for i in range(size):
        ages = rnd.randint(0, 100)
        listofAges.append(ages)
        totalSum += ages
        print('Age is', ages)
    average = totalSum / size
    print('Average age', average)
    print('totalSum', totalSum)
    return listofAges, totalSum, average     
val1, val2, val3 = age_func(6)
print (val2)

所以问题出在totalAges上,它不是随着循环的增加而增加每个年龄,因此最终的平均值只是最后一个年龄除以总大小。或者我认为,我可能完全以一种糟糕的方式做到了这一点。

2 个答案:

答案 0 :(得分:2)

您有Ralf的回答,但我想指出您的代码中可能还有另一个小错误。我对代码进行了一些修改以显示它,并且还使用了一种更为简洁的方法来计算列表的总和和平均值:

import random


def age_func(size):

    age_list = list()

    for _ in range(size):
        age = random.randint(0, 100)
        age_list.append(age)
        print('Age is {}'.format(age))

    average_int = sum(age_list) / len(age_list)
    average_float = float(sum(age_list)) / float(len(age_list))

    print('Average age (int): {}'.format(average_int))
    print('Average age (float): {}'.format(average_float))
    print('total Sum: {}'.format(sum(age_list)))
    return age_list

my_list = age_func(6)
print (sum(my_list))

我改变了几件事:

  • for _ in range(size)-使用_作为变量名意味着类似“我实际上没有将此变量用于任何东西”

  • random导入为random-确保通过您的代码的任何人都意识到这是默认的random模块,而不是某些自定义模块。

  • 在任何地方都使用格式字符串-格式字符串是最好的:)

  • 在循环完成后使用sum(age_list)len(age_list)。无需在循环的每个步骤中计算这些,只需一次。

  • 如果您要求python将一个整数除以另一个整数,它将返回一个整数。在这种情况下,通常这不是您想要的。尝试让python对7 / 4求值,然后看看会发生什么:)通过强制我们的整数变为浮点数,结果也将是浮点数。重试先前的计算为7.0 / 4.0

  • 将变量名更改为snake_case

答案 1 :(得分:1)

以下工作正常:

import random as rnd

def age_func(size):

    listofAges = []
    totalSum = 0
    average = 0

    for i in range(size):
        ages = rnd.randint(0,100)
        listofAges.append(ages)
        totalSum += ages
        print('Age is', ages)
        print('totalSum is', totalSum)
    average = totalSum/size
    print('Average age',average)
    print('totalSum',totalSum)
    return listofAges, totalSum, average     
val1, val2, val3 = age_func(6)
print (val2)

或者,您可以使用 numpy numpy.random.randintnumpy.mean https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.random.randint.htmlhttps://docs.scipy.org/doc/numpy/reference/generated/numpy.mean.html