Как сложить все остальные числа в файле? - PullRequest
1 голос
/ 31 марта 2019

Мне нужно создать сумму каждого другого числа в файле, который выглядит следующим образом:

10
20
30
40

и сложить только 20 и 40 вместе, чтобы получить 60.

try:
    infile = open("numbers.txt", "r")

    for lines in infile:
        print(sum(infile))
        infile.readline()[::2]

    infile.close()

except ValueError:
    print("Couldn't Open File")
except IOError:
    print("File not found")

Ответы [ 2 ]

1 голос
/ 31 марта 2019

Попробуйте этот код.

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")
0 голосов
/ 31 марта 2019

Если файл не слишком большой, вы можете пропустить чтение построчно:

with open('thefile.dat') as fd:
    print(sum(int(line) for line in fd.readlines()[1::2]))

Не так эффективно, но чище и хорошо для большинства случаев использования. Я пропустил вашу хорошо размещенную обработку исключений, поэтому используйте ее также, но заметьте, with обрабатывает закрытие файла автоматически.

Ваш код был близок, но вы путаете то, что хотите суммировать:

s = 0
try:
    for line in infile:
        next(line) #skip odds
        s+=int(line)
except StopIteration: pass #odd number of lines, will be thrown by "next".
print(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...