Python OOP实现输入数据的均值与标准差代码优化求助
Python 均值与标准差计算程序优化建议
原代码存在的问题
- 语法错误:
__init__方法定义末尾缺冒号,生成器表达式缺少右括号,最后一行打印语句中data_1-std_dev应为data_1.std_dev - 重复处理输入:使用两个生成器
a和a_2重复解析输入,冗余且低效 - 类设计冗余:
__init__中的参数b未被使用,且直接传入生成器会导致数据无法复用(生成器只能遍历一次) - 异常未处理:当输入数据点少于2个时,
st.stdev会抛出"std_dev需要至少两个数据点"的错误,无容错处理
优化方案
- 复用输入数据:将输入解析为列表而非生成器,一次解析后可多次复用,避免重复调用
split和类型转换 - 简化类结构:移除无用参数
b,直接在类内部处理数据验证与计算 - 添加异常处理:针对数据点不足的情况捕获异常,给出友好提示
- 修复语法错误:修正所有语法问题,保证代码可正常运行
优化后的代码
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
相关产品推荐
相关产品推荐

