2016-03-23 15 views
0

私はディレクトリ内のすべてのファイルを読み込み、各ファイルから最高の値をリストに追加するコードを持っています。問題は、番号10を認識しますが、すべての番号0-9を認識することです。各ファイルには、各人の最後の3つのスコア(1-10)が含まれています。しかし、人の得点が10の場合、プログラムはその値を最高値として読み取っておらず、ファイルから2番目に高い値を選択し、その値をリストに追加します。コードは、スコアが10でなければ正常に動作します。コードは、各個人の最高スコアに従ってリストをソートする必要があります。これは正常に機能しますが、誤ったスコアをリストに追加するため、誤ってソートすることもあります。例えばmax()は2桁の数字を認識しませんか?

[3、6、8]、最高スコアは8であり、問​​題はない

[6、10、10]、最高のスコアは9であり、なぜですか?

コードの関連するセクションは以下のとおりです。 P.S.私はすべてのモジュールをインポートし、開始時にすべての変数を宣言しています(ここには表示されません)ので、問題はありません。すべてのヘルプ

scores = [] 
for file in os.listdir(path): 
    file = os.path.join(path, file) 
    if os.path.isfile(file): 
     with open(file, 'r') as txt_file: 
      scores.append(max(str(n.strip()) for n in txt_file)) 

results = list(zip(files, scores)) 
results.sort(key=operator.itemgetter(1), reverse=True) 
student_list = [x + ": " + y for x, y in results] 
+0

あなたは文字列を比較しているので、 '' 9 ">" 10 "' –

答えて

1

問題のおかげで、このラインと特異的である:

scores.append(max(str(n.strip()) for n in txt_file)) 

はあなたが最大str値をつかんされ、文字列は、他のすべてのシーケンスが行うのと同じ方法を比較:最初の要素を比較し、場合彼らはそうあなたが行うとき...同じことが次の比較です:

max("10","9") 

それは最初の「9」に対して「1」を比較し、文字列が返されるように「9」が大きいと考えられていることを見て、あなたは彼らがint sと比較するためにint秒に変換する必要があります

scores.append(max(int(n.strip()) for n in txt_file)) 
       #^right here 

が、ファイルのいずれかがすべての行には何も他の、有効な数字が含まれている場合は、ディレクトリ内のすべての単一のファイルを開いているので、このスコア/ファイルが同じ長さでなければならないので、filesがどのように定義されているかを知らずに例を挙げることはできませんが、try/exceptが必要な場合があります。

+1

必要はありません、この行といくつかの他のものを変更する必要があります、ありがとう – Eric1108

関連する問題