2016-02-24 6 views
1

Мне нужно рассчитать сумму любых чисел в файле и распечатать сумму.Как суммировать все числа в текстовом файле?

Ряд определяется как любая строка, начинающейся с цифрой от 0 до 9 с последующей любым количеством цифр от 0 до 9.

алфавитно-цифровых строк (строк, включая обе цифру и букву) не должны быть включены в суммировании ,

Это содержимое файла:

a b cddde ff 1 
5 
hH five lll 0 
l 10 
99 abcd7 
9kk 
0 

Таким образом, ответ был бы в этом случае 115.

+0

Есть вопрос здесь? – Ageonix

+0

Я должен найти сумму выделенного жирным курсивом, но я не знаю, как –

+0

Всегда задавайте вопросы с использованием языка и включайте ошибки –

ответ

-3
def function(): 

    infile = open("test.txt", 'r') 
    content = infile.read()  
    infile.close() 
    wordList = content.split() 

    total = 0 

    for i in wordList: 
     if i.isnumeric(): 
      total += int(i) 
    return total 

В этом решении я назвал файл test.txt. Идея заключается в том, что вы зацикливаете на wordList, который представляет собой список, содержащий все элементы, сращенные в test.txt (попробуйте распечатать wordList перед циклом, чтобы убедиться сами). Затем мы пытаемся использовать каждый элемент как int (это предполагает, что в файле не будет десятичных знаков, если вы можете включить приведение float). Затем мы улавливаем ValueError, который возникает при добавлении i.e 'a' в качестве int.

+1

Большое вам спасибо –

+1

Зачем переходить ко всем этим проблемам, когда у python есть функция 'isnumeric()' builtin? – MarkyPython

2

Все что вам нужно сделать, это использовать item.isnumeric(). Если элемент состоит только из чисел, а не букв или других символов, он вернет true.

Итак, вы проверяете все предметы в wordList, а если предмет isnumeric() вы добавили товар в total.

infile = open(filename.txt, 'r') 
content = infile.read()  
infile.close() 

wordList = content.split()  
total = 0 

for item in wordList: 
    if item.isnumeric(): 
     total += int(item) 
1

Я бы предположить, что использование регулярных выражений:

import re 

with open('file') as f: 
    print(sum(int(i) for i in re.findall(r'\b\d+\b', f.read()))) 

В этом случае:

  • \b+ матч все цифры и \b проверяет, имеется ли буква после (или до), поэтому мы можем игнорировать abcd7 или 9kk.

  • re.findall() попытайтесь найти все цифры в файле, используя RegEx \b\d+\b и возвращает список.

  • Сжатие списка, int(i) for i in re.findall(r'\b\d+\b'), преобразовать все элементы в списке, который возвращенный re.findall() к int объекту.

  • sum() встроенная функция суммирует элементы списка и возвращает результат.

Online RegEx demo

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