我想计算用户输入的平均值和标准偏差,但它表示偏差函数中的数据类型错误

2024-09-29 17:13:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个程序,在输入新行之前请求输入。用户输入将在列表中。然后它将计算输入的平均值和标准偏差。我编写了以下代码,但它显示了stddev函数的一些数据类型错误

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)
   meanfunction(a)
   stdev(a)

   print("The mean of given data was: ",meanfunction(a))
   print("The standard deviation of given data was: ",stdev(a))
def meanfunction(data):
    average = sum(data) / len(data)
    average_f = "{:.2f}".format(average)
    return average_f

def variance(data):
    n = len(data)
    mean = sum(data) / n
    deviations = [(x - mean) ** 2 for x in data]
    variance = sum(deviations) / (n)
    variance_f = "{:.2f}".format(variance)
    return variance_f
 def stdev(data):
    import math
    var = variance(data)
    std_dev = math.sqrt(var)
    return std_dev
 if __name__ == "__main__":
       main()

Tags: theinputdatareturnmaindeflinemean
1条回答
网友
1楼 · 发布于 2024-09-29 17:13:28

修复了缩进后,问题似乎是返回行前面的variance(data)中的格式字符串。使用variance的输出作为stdev函数的输入,但variance返回字符串输出。看起来meanfunction也做了同样的事情

一般来说,对于这些数学函数,最好让它们保持它们应该做的事情:返回一个数字,就像您已经使用stdev的返回所做的那样。在实际将其打印到屏幕上时,处理使其美观的问题

另外,使变量名比“a”更具描述性也很好,特别是当我们来看我们的旧代码时!最后,我们通常希望把进口放在首位

import math


def main():
    print("Enter the data, one value per line.\n"
          "End by entering an empty line.")
    user_values = []
    prompt = ""
    line = input(prompt)

    while line:
        user_values.append(float(line))
        line = input(prompt)
    meanfunction(user_values)
    stdev(user_values)

    print(f"The mean of the given data was: {meanfunction(user_values):.2f} ")
    print(f"The standard deviation of the given data was:  {stdev(user_values):.2f}")


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 - 1)
    return variance


def stdev(data):
    var = variance(data)
    std_dev = math.sqrt(var)
    return std_dev


if __name__ == "__main__":
    main()

相关问题 更多 >

    热门问题