Попробуйте этот код.
try:
with open("numbers.txt", "r") as infile:
print(sum([int(line) for line in infile][1::2]))
except ValueError:
print("Couldn't Open File")
except IOError:
print("File not found")
Во-первых, он использует конструкцию with
для безопасной обработки открытия и закрытия файла. Во-вторых, он использует понимание списка, чтобы составить список элементов в файле. В-третьих, он использует int()
для преобразования строк из текста в целые числа. В-четвертых, он использует срез [1::2]
для использования каждой второй строки, начиная со второй (с индексом 1
). В-пятых, для добавления этих чисел используется sum
.
Это ясно? Если вам не нравится понимание списка, это можно сделать с помощью обычного цикла. Основным недостатком моего подхода является то, что он формирует список всех элементов, прежде чем использовать только половину из них. Вот код, который удаляет этот список с помощью генератора, поэтому он использует меньше памяти, но за счет усложнения.
try:
with open("numbers.txt", "r") as infile:
print(sum(int(line) for ndx, line in enumerate(infile) if ndx % 2))
except ValueError:
print("Couldn't Open File")
except IOError:
print("File not found")