如何用Python以简洁的方式对多个输入求平均?

4

我有很多数字要写,直接手写太低效了...

a = float(input("Enter the first number: "))
b = float(input("Enter the second number: "))
c = float(input("Enter the third number: "))

当你有一千个数字时,该怎么办呢?那么我应该如何使用range功能从单个输入行获取多个数字,并计算所有输入的平均值或均值呢?


1
numbers = [float(input("Enter number %s: "%i)) for i in range(1000)] - khelwood
1
你真的期望你的用户手动输入一千个不同的数字吗? - John Gordon
@JohnGordon 输入不一定要来自人类 :) - timgeb
没错,这是 input() 的典型用法,否则为什么不直接从标准输入读取呢? - John Gordon
2
如果输入不是来自实际的人,那么提示似乎毫无意义。 - Sven Marnach
是的,你说得对。看起来是 OP 程序的用户需要处理这个问题。 - timgeb
2个回答

4

一种方法是使用for循环来重复查询数字。如果只需要平均值,只需增加一个变量并在最后除以总查询次数即可:

n = 10
temp = 0
for i in range(n):
    temp += float(input("Enter a number"))

print("The average is {}".format(temp / n))

通过使用内置的sum()函数和生成器推导式,可以大大缩短代码:

n = 10
average = sum(float(input("Enter a number")) for i in range(n)) / n
print("The average is {}".format(average))

3
一种简洁的方式是使用列表推导式。
nums = [float(input('enter number {}: '.format(i+1))) for i in range(100)]

将100替换为您想要的任何范围,这将创建一个输入数字列表。您可以使用nums [n-1]访问第n个输入数字。

或者,您可以将单个输入字符串解析为浮点数列表:

>>> nums = [float(x) for x in input('enter numbers: ').split()]
enter numbers: 1.0 3.14 7.124 -5
>>> nums
[1.0, 3.14, 7.124, -5.0]

我更喜欢这种方式而不是很多提示。

最后,如果从命令行获取数字是可选的,您可以像这样执行:

import sys

nums = [float(x) for x in sys.argv[1:]]
print(nums)

演示:

$ python3 getinput.py 1.0 -5.37 8.2
[1.0, -5.37, 8.2]

要获取平均值,请使用sum(nums)/len(nums),假设您的列表不为空。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接