2016-10-28 22 views
1

我的程序應該打開並讀取指定的文件。它需要返回文件中的最大值。這是我的,我想我會得到這個錯誤,但我不知道如何解決它!倒數第二行是問題所在。 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

'min'和'max'功能有什麼問題......? – shadowtalker

+3

@ssdecontrol由於作業限制,可能不允許使用它。 – idjaw

+0

稍偏離主題:您傳遞的參數maxValueInFile()不是文件名。 – martineau

回答

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) 

這個代碼比快你的,因爲它不會對迭代器中的值進行排序。

由於返回錯誤的數字結果您的代碼不工作:

maxim = maxValueInFile(values) 

minim, maxim = maxValueInFile(values) 

return (maxim) 

您只需應該刪除護腕和minim變量比較和

return (maxim) 
+0

非常感謝! –

+0

不客氣,請參閱@ ShadyAtef答案閱讀文檔,它們非常有用。 – VMAtm

0

語句'return(maxim)'將最大值返回爲float而非元組。

minim, maxim = maxValueInFile(values)試圖將返回值解壓到這些變量中,這意味着右側必須可迭代。

,你可以把它改成

maxim = maxValueInFile(values) 

你可以閱讀更多關於python tutorial拆包經營者。

0

問題出在minim, maxim = maxValueInFile(values)英雄你期望該函數返回一個2值的元組(或其他可迭代對象)。

解決方法很簡單,可以將其更改爲maxim = maxValueInFile(values)或在函數中將返回值更改爲return minim, maxim

在第一種情況下,你應該使用建立max但如果你不允許,那麼在函數內部沒有必要也算最小值

在第二種情況下,然後更改的名稱功能的東西,更好地反映像minmax

而且

0

功能的目標。如果你要使用Python的STDLIB,這確實是

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

這將無法在Python 3中找到最小值,因爲映射是生成器 – Copperfield