Python计算输入数据均值和标准差时stdev函数报数据类型错误如何解决
报错原因
- 核心问题是
variance函数的返回值是用"{:.2f}".format()格式化后的字符串类型,而stdev函数里调用math.sqrt(var)时要求入参必须是数值类型,传入字符串直接触发类型错误。 - 代码还存在几个隐含问题:
meanfunction函数同样返回格式化字符串,虽然当前打印不会报错,但如果后续需要用返回值做其他数值计算也会出现同类问题stdev函数定义前存在多余缩进,不符合Python语法规范main函数里meanfunction(a)、stdev(a)两次调用没有接收返回值,属于冗余代码
修正方案
将数值计算和结果格式化分离:计算函数只返回原始数值,打印输出的时候再做格式化处理,保证计算链路里的变量都是数值类型,同时修正缩进问题、删除冗余调用即可。
修正后完整代码如下:
def main(): print("Enter the data, one value per line.\nEnd by entering empty line.") a = [] prompt = "" line = input(prompt) while line: a.append(float(line)) line = input(prompt) # 打印时统一做格式化处理 print("The mean of given data was: {:.2f}".format(meanfunction(a))) print("The standard deviation of given data was: {:.2f}".format(stdev(a))) def meanfunction(data): average = sum(data) / len(data) # 直接返回数值,不提前做格式化 return average def variance(data): n = len(data) mean = sum(data) / n deviations = [(x - mean) ** 2 for x in data] variance = sum(deviations) / n # 直接返回数值,不提前做格式化 return variance def stdev(data): import math var = variance(data) std_dev = math.sqrt(var) return std_dev if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者user16937050
相关产品推荐
相关产品推荐

