You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python OOP实现输入数据的均值与标准差代码优化求助

Python 均值与标准差计算程序优化建议

原代码存在的问题

  • 语法错误:__init__方法定义末尾缺冒号,生成器表达式缺少右括号,最后一行打印语句中data_1-std_dev应为data_1.std_dev
  • 重复处理输入:使用两个生成器a和a_2重复解析输入,冗余且低效
  • 类设计冗余:__init__中的参数b未被使用,且直接传入生成器会导致数据无法复用(生成器只能遍历一次)
  • 异常未处理:当输入数据点少于2个时,st.stdev会抛出"std_dev需要至少两个数据点"的错误,无容错处理

优化方案

  1. 复用输入数据:将输入解析为列表而非生成器,一次解析后可多次复用,避免重复调用split和类型转换
  2. 简化类结构:移除无用参数b,直接在类内部处理数据验证与计算
  3. 添加异常处理:针对数据点不足的情况捕获异常,给出友好提示
  4. 修复语法错误:修正所有语法问题,保证代码可正常运行

优化后的代码

import statistics as st

class DataAnalyzer:
    def __init__(self, data_points):
        self.data = data_points
        self.mean = self._calculate_mean()
        self.std_dev = self._calculate_std_dev()

    def _calculate_mean(self):
        try:
            return st.mean(self.data)
        except st.StatisticsError:
            return None  # 处理空数据的情况

    def _calculate_std_dev(self):
        try:
            return st.stdev(self.data)
        except st.StatisticsError:
            return None  # 处理数据点不足2个的情况

# 输入处理
data_input = input("Enter data set (comma-separated): ")
try:
    # 一次解析为列表,复用数据,同时过滤空字符串
    data_list = [float(x.strip()) for x in data_input.split(",") if x.strip()]
except ValueError:
    print("Error: 请输入有效的数字,用逗号分隔")
    exit()

# 初始化分析器
analyzer = DataAnalyzer(data_list)

# 输出结果
if analyzer.mean is not None:
    print(f"Data mean is: {analyzer.mean:.4f}")
else:
    print("Error: 无法计算均值,输入数据为空")

if analyzer.std_dev is not None:
    print(f"Standard Dev is: {analyzer.std_dev:.4f}")
else:
    print("Error: 无法计算标准差,需要至少两个数据点")

额外优化说明

  • 使用列表推导式一次性完成输入解析与类型转换,同时过滤掉空字符串(处理用户输入多余逗号的情况)
  • 将计算逻辑拆分为私有方法_calculate_mean和_calculate_std_dev,提高代码可读性和可维护性
  • 使用f-string替代旧式的%格式化,语法更简洁直观
  • 添加输入格式验证,捕获非数字输入的异常,增强程序健壮性

内容的提问来源于stack exchange,提问作者Otoniel Ramirez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 21:43:35