Python函数显示有关数据的信息

时间:2017-03-28 16:24:14

标签: python

我正在尝试编写两个函数。一个生成1到100之间的随机数,参数是将信息保存到文件的数字频率,另一个读取此文件并显示:总和,平均值,最高值和最低值。我设法让第一个函数工作,但是secound函数没有。运行程序时,我得到TypeError:由于readNumbers()函数中的“number = int(number)”行,'int'对象不可迭代,我不明白,因为我认为这个数字必须改变从一个字符串到一个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()

2 个答案:

答案 0 :(得分:0)

你的程序有几个问题。

写下数字:

你还没有把这些数字分开,所以你的文件将包含很长的数字字符串(对于挑剔,你的numbers实际上是random_number

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

现在,由于使用换行符分隔数字,您的读数将起作用,除非您应将它们读入数组,然后执行总计和平均值。

即:

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"]

(编辑以避免结束时空行出错)

答案 1 :(得分:0)

善良是对的。

您应该执行以下操作:

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

此外,我认为你可以优化你的代码。读取文件并创建列表,然后您可以轻松计算总和,平均值,最小值,最大值。

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)