【问题标题】:Write a program that computes mean, medium, maximum, and standard derivation编写一个计算均值、中值、最大值和标准差的程序
【发布时间】:2014-01-02 11:00:13
【问题描述】:

过去几个小时一直在尝试解决这个问题,但我找不到解决方案!本质上,我们必须编写一个程序来打开一个文件,从中获取数字,并计算上述的东西(平均值、最小值、最大值、标准推导)。以下是我目前拥有的:

def get_numbers():

 # Open a file for reading.
infile = open('inNumbers.txt', 'r')

# Read the numbers from the file.
line = infile.readline()
while line != '':
    print(line)
    line = infile.readline()
infile.close()


def mean(nums):
    sum = 0.0
    for num in nums:
        sum = sum + num
    return sum / len(nums)


def stdDev(nums, xbar):
    sumDevSq = 0.0
    for num in nums:
        dev = xbar - num
        sumDevSq = sumDevSq + dev * dev
    return sqrt(sumDevSq/(len(nums)-1))


def min():
    showFile = open("inNumbers.txt", 'r')
    lowest = None
    for line in showFile:
        tokens = line.split(',')
        value = min(tokens[:2])
        if lowest == None:
            lowest = value
        if value < lowest:
                lowest = value


def main():
    print("This program computes mean, maximum, minimum and standard deviation.")

    data = get_numbers()
    xbar = mean(data)
    std = stdDev(data, xbar)

    print("\nThe mean is", xbar)
    print("The standard deviation is", std)
    print("The minimum is", value)

main()

【问题讨论】:

  • 还有什么问题?你不懂那些数学单词是什么意思,你不懂python,你不懂编程……什么?
  • 您实际上并没有读取任何数字 - 您传递的是文件句柄而不是实际数字。此外,您的 mean 函数没有正确缩进(循环不会执行)。
  • 我会说问题是我不知道我这样做是否正确。所以基本上我会说我对python的了解不够,不知道如何让我的程序正常工作,因为当我尝试运行它时它会出现错误
  • 首先,您的 get_numbers 函数不返回任何内容,因此数据为None。其次,您正在打开文件,但实际上并没有阅读其内容。看Python文件参考:docs.python.org/2/tutorial/…
  • @user3102945 您仍然只是打印文件的内容,仅此而已。你真的应该先阅读一些编程入门,然后再阅读 python 入门。否则复制粘贴代码 sn-ps 只会导致另一个货物崇拜。

标签: python file max standards minimum


【解决方案1】:

正如我所指出的,在尝试解决当前问题之前,您应该先阅读一些有关编程的基本入门书,否则任何答案都无济于事,只会创建一个新的货物崇拜者。

尽管如此,这里是你的代码(虽然我不确定 std-dev 的公式):

#open file
with open('inNumbers.txt', 'r') as f:
    #read lines, strip trailing newlines, and convert to float if not empty
    numbers = [float(x) for x in (x.strip() for x in f) if x]

avg = sum(numbers) / len(numbers)
sdv = (sum((n - avg) ** 2 for n in numbers) / len(numbers)) ** .5
print('The arithmetic mean is {}'.format(avg))
print('The standard deviation is {}'.format(sdv))
print('The minimum is {}.'.format(min(numbers)))

也许你可以从中提取一些有用的东西。

【讨论】:

  • 有趣,我没有意识到它/可能这么简单。谢谢你的帮助,我肯定从中得到了一些东西!
【解决方案2】:

了解包含数字的文件的外观非常重要。但我会从您的示例代码中假设每一行都有一个浮点数。如果你已经安装了 numpy 会更容易。我想这是默认情况下在 Mac 上。所以一步一步来:

import numpy

#define a function that will just open your file containing numbers and get 
#all data into a list of floats
def getNumbers(file):
  numbers = []
  with open(file, 'r') as numbers_file:
    for line in numbers_file.readlines():
      numbers.append(float(line.strip('\n').strip()))
  return numbers


#get data from 'numbers.txt' into a list named 'num_list'
num_list = getNumbers('numbers.txt')

#print what you need
print 'Maximum is %g' %max(num_list)
print 'Minimum is %g' %min(num_list)
print 'Average is %g' %numpy.mean(num_list)
print 'Standard deviation is %g' %numpy.std(num_list)

#if you do not have numpy
my_avg = sum(num_list)/len(num_list)
print 'Average is %g' %my_avg
#you need to do some reading for the std-dev formula :)

【讨论】:

    猜你喜欢
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多