我的程序应该打开并读取指定的文件。它需要返回文件中的最大值。这就是我所拥有的,我想我会得到这个错误,但我不知道如何解决它!倒数第二行是问题所在。 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)
答案 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))