2014-11-27 2 views
1

Следующий код возвращает неправильное максимальное значение:неправильное значение, возвращенное при использовании функции максимального

maximum = 0 
f =open("data.dat", "r") 

for line in f: 
    global maximum 
    fields = line.split() 
    classcode = fields[0] 
    name = fields[1] 
    scr = fields[2] 

    maximum=max(scr) 
    print(classcode, name, scr) 

f.close() 
print("maximum=", maximum) 

Файл данных

1 test2 100 
1 test1 100 
1 test3 20 
1 test4 60 
1 test5 33 

И результат я получаю

1 test2 100 
1 test1 100 
1 test3 20 
1 test4 60 
1 test5 33 
maximum= 3 

Любая идея, почему я получаю неправильное значение, будет оценена

ответ

1

Вы подаете заявку max() на номер каждого отдельного значения; max() не имеет ничего общего с этим значением. Фактически, он находит один символ с самым высоким значением из scr, который является просто строкой (последовательность символов). Из вашего последнего значения scr, строка '33', оба символа имеют одинаковое значение, поэтому выбрали один, '3'.

Было бы более эффективно собирать значения в списке (после преобразования сначала в целые числа), а затем вызвать max() в этом списке. Тогда у него есть что-то сравнить с:

scores = [] 

for line in f: 
    fields = line.split() 
    classcode = fields[0] 
    name = fields[1] 
    scr = int(fields[2]) 
    scores.append(scr) 
    print(classcode, name, scr) 

maximum = max(scores) 
print("maximum=", maximum) 
+0

Я думаю, что вам не хватает строки 'scores.append (scr)' в цикле. – Blckknght

+0

@Blckknght: * facepalm * –

1

Линия maximum=max(scr) не делать то, что вы думаете, что он делает. Он сравнивает значения символов в строке scr.

Я думаю, что вы хотите, а не maximum = max(int(scr), maximum). Это выбирает большее из текущего значения или старого максимума и работает на целые числа, а не на строки.

+0

Приветствия людей, которые были чрезвычайно полезны. –

Смежные вопросы