【问题标题】:Python function to display information about data用于显示数据信息的 Python 函数
【发布时间】:2017-03-29 04:23:42
【问题描述】:

我正在尝试编写两个函数。一个生成 1 到 100 之间的随机数,参数是数字的频率,将信息保存到文件中,另一个读取该文件并显示:总和、平均值、最高和最低值。我已经设法使第一个功能起作用,但是第二个功能却没有。运行程序时,我得到 TypeError: 'int' object is not iterable due to the "number=int(number)" line in the readNumbers() function,我不明白,因为我认为数字必须改变从字符串到 int 以使方程式起作用。任何帮助,将不胜感激。还有一种方法可以不用max()和min()就可以找到最大值和最小值,我个人很想知道。

def generateNumbers(i):
    myFile=open("numbers.txt","w")

    for n in range(i):
        import random
        numbers=random.randint(1,100)
        numbers=str(numbers)
        myFile.write(numbers)    
     myFile.close()

generateNumbers(400)

def readNumbers():
    myFile=open("numbers.txt","r")

    for number in myFile:
        number=int(number)
        total=(sum(number))
        average=sum/float(len(number))    

    while number!=-1:
         num_list.append(number)
         high= max(num_list)
         low= min(num_list)

     print(total,average,high,low)

     myFile.close()

readNumbers()

【问题讨论】:

  • 错误不在该行。它在下一个。您正在尝试获取 one 数字的总和。这没有任何意义。
  • 另外,len() 不能应用于下一行的<type 'int'>

标签: python


【解决方案1】:

你的程序有几个问题。

写数字:

无论如何,您都没有分隔数字,因此您的文件将包含一串很长的数字(并且对于 nitpick,您的 numbers 实际上是 random_number

如果你在myFile.write(random_number) 每个号码之后 f.ex myFile.write("\n") 将由换行符分隔。

现在,由于用换行符分隔数字,您的阅读将起作用,除了您应该将它们读入一个数组,然后进行总计和平均。

即:

num_list = []
for number in myFile:
    if number != "\n": # there is an empty line at the end
        num_list.append(int(number))

total = sum(num_list)
average = total / len(num_list)
high = max(num_list)
low = min(num_list)

请注意,您不需要 while 循环

您也可以使用 python 的列表推导式进行读取,并使用上下文管理器自动关闭文件

with open("numbers.txt", "r") as f:
    num_list = [int(number) for number in f if number != "\n"]

(为避免末尾空行出错而进行了编辑)

【讨论】:

    【解决方案2】:

    金达尔是对的。

    你应该这样做:

    sum = 0;
    count = 0;
    for number in myFile:
        sum += number
        count += 1
    average = sum /count
    

    此外,我认为您可以对代码进行一些优化。读取文件并创建一个列表,然后您可以轻松计算 sum、avg、min、max。

    with open("my filename.txt", 'r') as myFile:
       number_list = list()
       for number in myFile:
           number = int(number)
           if number != -1:  #Is it necessary for you?
               number_list.append(number)
    sum = sum(number_list)
    average = sum / len(number_list)
    min_val = min(number_list)
    max_val = max(number_list)
    

    【讨论】:

      猜你喜欢
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多