无法显示记事本的平均值

时间:2014-11-22 02:15:06

标签: python

我需要制作一个程序,从记事本文件中平均显示大约5个数字。我觉得我的大部分代码都正确,但我一直收到这个错误:

  

TypeError:'float'对象不能解释为整数。“

我该如何解决?这是我的代码:

def main():
    numbers = open('numbers.txt', 'r')

    list_numbers = numbers.readline()

    amount = float(list_numbers)

    for value in range(amount): # <----- ERROR HAPPENS ON THIS LINE
        amount += value

    average = total / len(numbers)
    print('The average of numbers is', average)

main()

1 个答案:

答案 0 :(得分:1)

range内置只接受整数参数:

>>> range(10.0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer
>>> range(10)
range(0, 10)
>>>

因此,amount必须是一个整数:

amount = int(list_numbers)

此外,您忘记在功能结束时关闭文件。您可以使用with-statement,以便自动完成此操作:

def main():
    with open('numbers.txt', 'r') as numbers:
        list_numbers = numbers.readline()

        amount = int(list_numbers)

        for value in range(amount):
            amount += value

        average = total / len(numbers)
        print('The average of numbers is', average)

main()

最后,这一行是一个问题:

average = total / len(numbers)

numbers是文件对象,而不是数字列表。您需要将文件中的数字读入列表才能执行len(numbers)

我认为你真的想要这样的东西:

def main():
    with open('numbers.txt') as numbers:
        list_numbers = [int(x) for x in numbers if x.strip()]
    average = sum(list_numbers) / len(list_numbers)
    print('The average of numbers is', average)  
main()

使用list comprehension,它将读入文件中的所有数字,将它们转换为整数,然后将它们存储在列表中。之后,我们可以通过跳过列表总和的长度来轻松找到平均值。