Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/75: Рейтинг темы: голосов - 75, средняя оценка - 4.85
 Аватар для Landsberg17
2 / 3 / 0
Регистрация: 22.01.2020
Сообщений: 46

Подсчёт суммы чисел в файле

15.02.2020, 12:01. Показов 15734. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть Файл, в котором может быть записана любая абракадабра. числом считается всё, что состоит из цифр. т.е. aft34hy5 будет 34 и 5. числа через пробел тоже считаются последовательностью. то есть 4 5 6 должно восприниматься как 456. нужно найти такие числа и посчитать их сумму. Говорят, лучше всего делать это посимвольно, но как именно, я не въезжаю. есть код, который считает сумму чисел в файле, но так как сделали задачу, чтобы жизнь мёдом не казалась, то она походит не все тесты. что делать?
входные данные
123
aaa456
1x2y3 4 5 6

выходные данные
600
Python
1
2
3
4
5
6
7
8
9
10
11
def main(filename):
    total = []
    with open(filename, "r") as file:
        temp = file.readlines()
        for item in temp:
            total.append(int(item))
    return sum(total)
 
 
if __name__ == '__main__':
    print (main("input.txt"))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2020, 12:01
Ответы с готовыми решениями:

Подсчёт суммы чисел в файле
Есть Файл, в котором может быть записана любая абракадабра. числом считается всё, что состоит из цифр. т.е. aft34hy5 будет 34 и 5. числа...

Подсчёт суммы чисел в файле
Выручайте пожалуйста!!! (в этой задаче я посчитала только сумму всех чисел в файле, а мне надо вычислить сумму тех чисел, которые меньше...

Подсчёт суммы чисел в текстовом файле
В одном файле в первой строке записано число n, а во второй через пробел n целых чисел. Прочитать их, посчитать их сумму и записать в...

18
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
15.02.2020, 12:26
Цитата Сообщение от Landsberg17 Посмотреть сообщение
что делать
как говорил один киногерой - отделить котлеты от мух! в каждой строке выбрать числа по условиям, получить сумму чисел в строке и так для каждой строчки а потом сложить полученные суммы.
вопрос в том как будет считаться строка aft34hy5 35 38?
как 34, 5, 3538 или 34,53538?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
15.02.2020, 12:30
Python
1
2
3
>>> import re
>>> sum(map(lambda x: int(x), re.findall(r'\d+', 'abc12e34fg56h')))
102
Добавлено через 3 минуты
Цитата Сообщение от Landsberg17 Посмотреть сообщение
total.append(int(item))
сведётся к перманентной ловле ValueError
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
15.02.2020, 12:33
easybudda, не совсем то что нужно
Python
1
2
import re
print(sum(map(lambda x: int(x), re.findall(r'\d+', 'abc12e34fg56h 1 2 3'))))
=
108
>>>
а должно быть 12 + 34 + 56 + 123 = 225
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
15.02.2020, 12:50
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
а должно быть 12 + 34 + 56 + 123 = 225
Это с какого перепуга? Числа 1 2 3, разделённые пробелами - это три числа, а не одно.

Не по теме:

Как в том анекодте:
Карл, Маркс, Фридрих и Энгельс почему-то не 4 человека, а 2. А Слава Капээсэс - вообще не человек...


Другое дело - можно и без lambda обойтись:
Python
1
sum(map(int, re.findall(r'\d+', 'abc12e34fg56h')))
точно так же отработает.
0
 Аватар для Landsberg17
2 / 3 / 0
Регистрация: 22.01.2020
Сообщений: 46
15.02.2020, 13:17  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
Числа 1 2 3, разделённые пробелами - это три числа, а не одно.
вот как раз таки я писал, что числа 1 2 3 воспринимаются как 123. а еще я не понимаю как выглядит конечный код
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
15.02.2020, 13:46
Цитата Сообщение от Landsberg17 Посмотреть сообщение
вот как раз таки я писал, что числа 1 2 3 воспринимаются как 123

Не по теме:

"Ну тогда с чесночком..."(с)


Python
1
2
>>> sum(map(lambda x: int(x.replace(' ', '')), re.findall(r'[0-9 ]+', 'abc12e34fg5 6h 1 2 3')))
225
Цитата Сообщение от Landsberg17 Посмотреть сообщение
а еще я не понимаю как выглядит конечный код
Да так и выглядит. Прочитать файл в строку, если он не 100500 петабайт длиной, подставить её вместо 'abc...', радоваться.
Ну или читать по строке, если сразу весь проблематично, дальше думать, как выкручиваться...
0
 Аватар для Landsberg17
2 / 3 / 0
Регистрация: 22.01.2020
Сообщений: 46
15.02.2020, 14:15  [ТС]
easybudda я честно не понимаю куда здесь имя файла(input.txt например) засунуть. можете, пожалуйста довершить мысль
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
15.02.2020, 15:04
Python
1
2
3
4
5
6
7
8
9
def sum_ints_in_file(file_name):
    with open(file_name, 'r') as fp:
        return sum(map(int, fp.read().split()))
 
 
print(sum_ints_in_file('file.txt'))
if __name__ == '__main__':
    filename = input()
    sum_ints_in_file(file_name=)
0
16 / 14 / 12
Регистрация: 02.10.2015
Сообщений: 44
15.02.2020, 15:32
123+456+1+2+3456 != 600
123+456+1+2+3+4+5+6 == 600

"4 5 6 должно восприниматься как 456" - это точно?

Добавлено через 5 минут
Результат зависит от наличия строки "text = text.replace(' ', '')"

Python
1
2
3
4
5
6
import re
 
text = open('input.txt').read()
# text = text.replace(' ', '')
total = sum(map(int, re.findall(r'\d+', text)))
print(total)
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
15.02.2020, 15:42
easybudda, вот в том и загвоздка как это понимать (об этом я сразу и спросил)
'abc12e34fg5 6h 1 2 3' ну насчет 1 2 3 понятно а вот fg5 6h как понимать? как 5 и 6 или как 56? вроде и пробел между цифрами и вроде цифры относятся к разным строкам. если как 56 то проще удалить все пробелы выбрать группы цифр и сложить
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,927
Записей в блоге: 5
15.02.2020, 16:20
Semen-Semenich, В его примере есть фрагмент 1x2y3 4 5 6 Там вроде бы числа 123 и 456 извлекаются отдельно. Это не такой беспощадный случай, как у вас, но в том-то и дело, что ТС игнорирует вопросы, если не знает, как на них отвечать.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.02.2020, 17:31
Цитата Сообщение от easybudda Посмотреть сообщение
map(lambda x: int(x),
Проще:
Python
1
map(int,)
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
15.02.2020, 17:37
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Проще
Спасибо, Кэп!
Цитата Сообщение от easybudda Посмотреть сообщение
Другое дело - можно и без lambda обойтись
0
 Аватар для Landsberg17
2 / 3 / 0
Регистрация: 22.01.2020
Сообщений: 46
15.02.2020, 18:51  [ТС]
я уточнил. пробел разделяет. т.е. dfgjh5 6jdfghk считать как 5 и 6
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
15.02.2020, 19:05
А вот так - совсем просто - без промежуточных списков, регулярок и т.п. (хотя по числу строк длиннее, но, не удивлюсь, если быстрее, т.к. всего за один проход):

Python
1
2
3
4
5
6
7
8
9
10
11
def sum_in_str(stri):
    sum=0
    acc=0
    for a in stri:
        if not a in "0123456789":
            sum+=acc
            acc=0
        else:
            acc=acc*10+int(a)
    sum+=acc
    return sum
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.02.2020, 19:15
Цитата Сообщение от Landsberg17 Посмотреть сообщение
я не понимаю. я же написал, что wdfh5 6wejfh воспринимается как 56, а не как 5 и 6. я ответил на этот вопрос уже и не один раз. так и зачем кидать претензию, что я типа не знаю как отвечать? скажу ещё раз. любая, абсолютно любая последовательность цифр, не разделённых буквами считается числом. пробел не считается буквой.
Можно так:
Python
1
2
>>> re.sub(r'[a-zA-Z]', '', 'wdfh5 6wejfh').split()
['5', '6']
Добавлено через 1 минуту
Python
1
2
>>> re.sub(r'[a-zA-Z]', '', '1x2y3 4 5 6').split()
['123', '4', '5', '6']
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,927
Записей в блоге: 5
15.02.2020, 19:28
Цитата Сообщение от Landsberg17 Посмотреть сообщение
числа через пробел тоже считаются последовательностью. то есть 4 5 6 должно восприниматься как 456
читаем далее
Цитата Сообщение от Landsberg17 Посмотреть сообщение
входные данные
123
aaa456
1x2y3 4 5 6
выходные данные
600
Ну и какие числа здесь надо складывать. Я предполагаю 123+456+1+2+3+4+5+6 = 600. И где здесь число 456, которое возникает из 4 5 6? Извиняюсь, если обидел, но у меня уже крыша едет.
0
 Аватар для Landsberg17
2 / 3 / 0
Регистрация: 22.01.2020
Сообщений: 46
17.02.2020, 17:46  [ТС]
программа-то выполняется. но куда здесь имя файла засунуть, из которого надо считать. Я искренне извиняюсь, но с файлами в первый раз и вообще не понимаю куда его

Добавлено через 1 час 35 минут
вопрос. Если 5 6 воспринимается как 5 и 6, то эта строка нужна? и как она будет выглядеть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2020, 17:46
Помогаю со студенческими работами здесь

Подсчет суммы чисел в текстовом файле
Допустим, содержание текстового файла: Иванов Иван 4391-21 Вариант 1 2 0 5 0 2 12 1

Подсчет количества вещественных чисел и целых чисел в текстовом файле
Подсчет количества вещественных чисел и целых чисел в текстовом файле. Вещественные и целые числа подсчитать отдельно. Считать, что слова в...

Подсчет суммы чисел, состоящих из неодинаковых чисел
Задача:Найти сумму всех элементов, состоящих только из разных цифр. Пример: 32 122 343 166 -2 521; результат: 32+521+(-2)=551. Мой код:...

Подсчет суммы чисел
Программа рабочая, но не знаю как подсчитать общую сумму этих чисел, пожалуйста подскажите) Суть задания было: Записать в файл...

Подсчет суммы чисел
Сгенерировать последовательность 10 000 случайных чисел на промежутке [0,1) типа float. Найти: a. сумму этих чисел, проводя суммирование...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru