所以我是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上,它不是随着循环的增加而增加每个年龄,因此最终的平均值只是最后一个年龄除以总大小。或者我认为,我可能完全以一种糟糕的方式做到了这一点。
答案 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.randint
和numpy.mean
https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.random.randint.html,https://docs.scipy.org/doc/numpy/reference/generated/numpy.mean.html)