0

我在python中有我的程序,我使用了一个带有数字的外部文件,我为要存储的数字创建了一个列表,然后我需要从中找到平均值、标准偏差和列表的长度,在那一刻我的程序看起来像这样:

data = open( "gauss.dat", "r" )
numbers=[]

for line in data: 
    numbers.append(line)

sorted(numbers)

def length(numbers):
    length = len(numbers)
    return length

def mean(numbers):
    sum = 0
    for element in numbers:
        sum += element

    mean = sum/length
    return (mean)

def main():
    global history

    print (length)
    print('The smallest number is ' + numbers[0])
    print ('The largest number is ' + numbers[-1])
    print(mean)    
    return True

if __name__ == "__main__":

    main()

当我运行程序时

  1. 它没有正确排序数字?我是python新手,所以我不知道是否有明显的错误
  2. 它将平均值和长度打印为< function length at 0x039475B0 >, < function mean at 0x03947630 >。我不知道如何将其更改为数字?

希望你能帮忙。

4

3 回答 3

1

您需要调用函数length和/或mean

print(length(numbers))
print(mean(numbers))

在 python 中,函数本身就是对象。所以他们有一个可以打印的表示。您可以将它们分配给当前命名空间中的不同名称,将它们传递给其他函数等,例如

MeAn = mean  # This is a violation of PEP 8!
print(MeAn(numbers))  #same as `print(mean(numbers))`

换句话说,当你告诉 python 时:

print(mean)

它打印有关函数对象的 mean信息。但是它不运行该函数,因此无法获取它的返回值(毕竟,它应该如何知道将什么用作输入参数?)

于 2013-04-02T13:52:19.233 回答
1

关于 1)

一个强大的工具:交互式 shell 与help-command 相结合:

>>> help(sorted)

Help on built-in function sorted in module __builtin__:

sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

所以我们需要

numbers = sorted(numbers)

或者

numbers.sort()

(详见help(numbers.sort)

关于 2)

正如 mgilson 所说:您必须调用该函数:

print(mean(numbers))

关于评论

for line in data: 
    numbers.append(line)

您将文件逐行读取为字符串。但是要进行一些计算,您需要一个数字类型。一种方法是:

for line in data: 
    numbers.append(float(line))

这会将文本line转换为浮动类型。前导或尾随空格被裁剪(至少在我的 python 解释器中),但您可能会遇到空行或错误行的麻烦。

于 2013-04-02T13:57:23.570 回答
0

sorted返回可迭代的排序版本,但不更改它,您需要其中之一:

numbers = sorted(numbers)

或者:

numbers.sort()

关于函数,您需要使用必要的参数调用它们 - 例如:

mean = sum/length(numbers)

您的代码中的多个位置都有此错误。

于 2013-04-02T13:55:46.443 回答