2014-11-22 52 views
0

我需要制作一个程序,它可以显示记事本文件中平均约5个数字。我觉得我有大部分的代码是正确的,但我一直得到这个错误:在显示笔记本平均数时遇到问题

TypeError: 'float' object cannot be interpreted as an integer."

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

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

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,它会读取到的所有号码从文件,将它们转换成整数,然后将它们存储在列表中。之后,我们可以很容易地找到平均值,并按照其长度来排列列表的总和。

+0

当我尝试使用您的建议代码时,我得到ValueError:int()与基数10的无效文字:'\ n'。 – Joe 2014-11-22 02:28:58

+0

嗯,你必须在文件的某个地方有一个空行。看我的编辑。我将'if x.strip()'过滤器添加到列表理解中以跳过空白行。 – iCodez 2014-11-22 02:31:27

+0

你说得对!感谢帮助的人,我真的很感激。 – Joe 2014-11-22 02:34:52