2014-11-27 2 views
0

У меня есть список рекордов (сохраненных в текстовом файле как оценка, пробел, имя (без запятых)). Однако, когда я пытаюсь получить данные, появляется только первая строка.Python line.split действует только на одну строку

for line in previous_scores: 
    data = line.split() 
    current_data = data[0] 
    if int(current_data) > highscore: 
     highscore = current_data 
     highscore_names = [data[1]] 
    elif int(current_data) == highscore: 
     highscore_names.append(data[1]) 

Например, с данными ниже:

2 James 
3 Anna 
5 Emily 

Было бы вернуть рекорд, как Джеймс, со своим счетом будучи 2.

Если мой код неправильно могли бы вы сказать мне, что не так, и если вы действительно устрашаете, исправьте это. Я не возражаю, если есть лучший способ сделать это.

Edit:
Файл открывается с:

previous_scores = open("Scores.txt", "a+") 

Edit 2:
я добавил несколько дополнительных линий на конце, и обновил код для тестирования на следующее:

for line in previous_scores: 
data = line.split() 
current_data = data[0] 
print "1 " + data[0] 
print "2 " + current_data 
if int(current_data) > highscore: 
    print "3 " + current_data 
    highscore = current_data 
    highscore_names = [data[1]] 
elif int(current_data) == highscore: 
    print "4 " + current_data 
    highscore_names.append(data[1]) 
elif int(current_data) < highscore: 
    print "5 " + current_data 

Первый балл всегда возвращает 1, 2 и 3, а затем все остальные оценки возвращаются 1, 2 и 5.

+0

Как вы открываете файл и читаете, можете ли вы показать, что – Hackaholic

+0

Нам нужно знать, что находится в previous_scores - IE, как вы его получили. Нам также нужно знать, какова начальная стоимость рекорда. См. Http: // stackoverflow/help/mvce. – GreenAsJade

+0

Вы также можете сэкономить вам и нам массу неприятностей, поставив инструкции печати после каждой строки, чтобы доказать себе, что то, что вы считаете значением каждой «вещи», действительно является тем, чем оно является. Когда вы это сделаете, вы, скорее всего, решите свою проблему. – GreenAsJade

ответ

4
if int(current_data) > highscore: 
     highscore = current_data 

Здесь вы преобразовываете текущий рекордер в число, но сохраняете его как неотвернутую строку. Следующий цикл вы сравниваете следующий рекордер как число с ранее сохраненной строкой.

Я не знаю, что сравнивает число> string в Python, но это легальный синтаксис и возвращает False, поэтому вы никогда не сможете сохранить более высокий рекордер после первого.

Редактировать: Теперь я знаю, и это интересно, но не имеет значения для этого ответа. https://stackoverflow.com/a/3270689/478656 и https://stackoverflow.com/a/2384139/478656

+0

Спасибо, так как я могу исправить код. Вам не нужно это делать для меня, просто скажите мне, как это сделать, или если вы быстрее это исправите. Благодарю. –

+1

Спасибо, что помогли кучи. –

+0

@ThomasWilliams О, хорошо. – TessellatingHeckler

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