显示记事本平均值时遇到问题



我需要制作一个程序,平均显示记事本文件中大约 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()

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-语句,以便自动完成此操作:

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()

使用列表推导,它将从文件中读入所有数字,将它们转换为整数,然后将它们存储在列表中。 之后,我们可以通过将列表的总和按其长度进行潜水来轻松找到平均值。

最新更新