Python计算常用统计量化
计算并输出计数、总和、平均值、最大值、最小值、极差、样本方差、样本标准差和中位数等常用统计量。
```python
import math
def get_numbers_from_input(prompt):
"""从用户输入中解析数字列表"""
while True:
raw = input(prompt).strip()
if not raw:
print("输入不能为空,请重新输入。")
continue
# 尝试用空格或逗号分割
parts = raw.replace(',', ' ').split()
nums = []
for p in parts:
try:
nums.append(float(p))
except ValueError:
print(f"无法解析 '{p}' 为数字,请重新输入。")
break
else:
if nums:
return nums
else:
print("未检测到有效数字,请重新输入。")
def calculate_stats(nums):
"""计算并返回统计字典"""
n = len(nums)
total = sum(nums)
mean = total / n
sorted_nums = sorted(nums)
minimum = sorted_nums[0]
maximum = sorted_nums[-1]
range_val = maximum - minimum
# 样本方差(除以 n-1)
if n < 2:
variance = None
std_dev = None
else:
variance = sum((x - mean) ** 2 for x in nums) / (n - 1)
std_dev = math.sqrt(variance)
# 中位数
if n % 2 == 1:
median = sorted_nums[n // 2]
else:
median = (sorted_nums[n // 2 - 1] + sorted_nums[n // 2]) / 2
return {
"count": n,
"sum": total,
"mean": mean,
"min": minimum,
"max": maximum,
"range": range_val,
"variance_sample": variance,
"std_dev_sample": std_dev,
"median": median
}
def main():
print("=== 数值统计工具 ===")
print("请输入若干个数字,用空格或逗号分隔(例如:1.5, 2, 3.8)")
nums = get_numbers_from_input("数字: ")
stats = calculate_stats(nums)
print("\n--- 统计结果 ---")
print(f"数据个数: {stats['count']}")
print(f"总和: {stats['sum']:.4f}")
print(f"平均值: {stats['mean']:.4f}")
print(f"最小值: {stats['min']:.4f}")
print(f"最大值: {stats['max']:.4f}")
print(f"极差: {stats['range']:.4f}")
if stats['variance_sample'] is not None:
print(f"样本方差: {stats['variance_sample']:.4f}")
print(f"样本标准差: {stats['std_dev_sample']:.4f}")
else:
print("样本方差: 数据少于2个,无法计算")
print(f"中位数: {stats['median']:.4f}")
if __name__ == "__main__":
main()
```
使用说明
1. 运行程序后,按提示输入数字(例如 12 34.5 67 89.1 或 12,34.5,67,89.1)。
2. 程序会依次显示各项统计结果,所有数值保留四位小数。
3. 如果输入少于2个数字,方差和标准差会显示“无法计算”。
个人建议
· 如需总体方差(除以 n),可修改 variance 计算公式为 sum((x - mean)**2) / n。
· 如需支持更多统计量(如四分位数、众数等),可自行扩展 calculate_stats 函数。
