我正在尝试编写两个函数。一个生成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()
答案 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)