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