我需要制作一个程序,平均显示记事本文件中大约 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()
使用列表推导,它将从文件中读入所有数字,将它们转换为整数,然后将它们存储在列表中。 之后,我们可以通过将列表的总和按其长度进行潜水来轻松找到平均值。