如何在文件中找到最大值?

时间:2016-10-28 00:05:17

标签: python file max

我的程序应该打开并读取指定的文件。它需要返回文件中的最大值。这就是我所拥有的,我想我会得到这个错误,但我不知道如何解决它!倒数第二行是问题所在。 TypeError: 'float' object is not iterable

def maxValueInFile(fileName):
    iterator = iter(fileName)
    minim, maxim = sorted((next(iterator), next(iterator)))

    for item in iterator:
        if item < minim:
            minim = item
        elif item > maxim:
            maxim = item
    return (maxim)

with open('fileName.txt','r') as f:
    values=(float(value_str) for line in f for value_str in line.split())
    minim, maxim = maxValueInFile(values)
print (minum, maxim)

4 个答案:

答案 0 :(得分:0)

如果您不想(或可以)使用内置函数,您可以简单地遍历文件的行,如下所示:

with open('fileName.txt','r') as f:
    minim, maxim = float('inf'), float('-inf')
    for line in f:
        next_item = float(line)
        if next_item < minim:
            minim = next_item
        elif next_item > maxim:
            maxim = next_item
    print(minim, maxim)

此代码比您的代码更快,因为它不会对迭代器中的值进行排序。

由于返回错误的数字结果,您的代码无法正常工作:

minim, maxim = maxValueInFile(values)

并与

进行比较
return (maxim)

你应该删除护腕和minim变量:

maxim = maxValueInFile(values)

return (maxim)

答案 1 :(得分:0)

声明&#39; return(maxim)&#39;返回最大值为float而不是元组。

minim, maxim = maxValueInFile(values)尝试将返回值解包为这些变量,这意味着右侧必须是可迭代的。

您可以将其更改为

maxim = maxValueInFile(values)

您可以在python tutorial中阅读有关解包运算符的更多信息。

答案 2 :(得分:0)

问题出在minim, maxim = maxValueInFile(values)。在这里,您希望函数返回一个具有2个值(或其他可迭代对象)的元组。

解决方案很简单,要么将其更改为maxim = maxValueInFile(values),要么在函数中将返回值更改为return minim, maxim

在第一种情况下,您应该使用max中的构建,但如果您不被允许,那么在函数内部也不需要计算最小值。

在第二种情况下,然后将函数的名称更改为更好地反映函数目标的函数,例如minmax

答案 3 :(得分:0)

如果你想要使用python的stdlib,那就这样做

with open('fileName.txt') as fp:
    floats = map(float, fp)
print("maximum", max(floats))
print("minimum", min(floats))