2016-10-28 10 views
1

私のプログラムは、指定されたファイルを開き、読み込む必要があります。ファイル内の最大値を返す必要があります。これは私が持っているものです、私はこのエラーが発生すると思ったが、私はそれを修正する方法がわからない!最後の2行目が問題です。 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) 

このコードは、より高速でありますこれはイテレータの値をソートしないためです。

あなたのコードが原因で間違った番号の結果を返すので動作していない:

minim, maxim = maxValueInFile(values) 

return (maxim) 

と比較あなたは単にブレーサーを削除し、minim変数する必要があります

maxim = maxValueInFile(values) 

および

return (maxim) 
+0

ありがとう! –

+0

あなたは大歓迎です、ドキュメントを読むために@ ShadyAtefの回答を参照してください、彼らは非常に便利です。 – VMAtm

0

文 'return(maxim)'は、最大値をタプルではなくfloatとして返します。

minim, maxim = maxValueInFile(values)は、これらの変数に戻り値をアンパックしようとします。これは、右側が反復可能でなければならないことを意味します。

あなたはpython tutorialでの演算子を開梱詳細を読むことができ

maxim = maxValueInFile(values) 

にそれを変更することができます。

0

この問題はminim, maxim = maxValueInFile(values)ヒーローにあります。この関数は、2つの値(または他の反復可能オブジェクト)を持つタプルを返すと予想します。

解決方法は簡単です。maxim = maxValueInFile(values)に変更するか、戻り値をreturn minim, maximに変更してください。

が最初のケースでは、あなたがmaxでビルドを使用する必要がありますが、あなたが許可されていない場合、その関数の内部でも、第2のケースで最小値

を計算する必要がない、そして、の名前を変更しますあなたははPythonのSTDLIBを使用したくない場合は、より良いminmax

また

0

のような機能の目的を反映したものに機能、これはそれ

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

これは、mapがジェネレータであるため、python 3で最小値を見つけることができません – Copperfield

関連する問題