numbers = "22.32 3.74 4.67 "
print(sum(numbers))
Как получить сумму чисел, находящихся в строке?
0xdb
51.4k194 золотых знака56 серебряных знаков232 бронзовых знака
задан 19 мая 2021 в 12:30
11
Разложите строку на числа (по пробелу), а элементы переведите во флоат:
str_num = "22.32 3.74 4.67 "
nums_sum = sum(float(x) for x in str_num.split())
>>> nums_sum
30.730000000000004
или
nums_sum = round(sum(float(x) for x in str_num.split()), 2)
чтоб округлить сразу ответ
ответ дан 19 мая 2021 в 12:53
Jack_oSJack_oS
12.5k7 золотых знаков18 серебряных знаков48 бронзовых знаков
4
Ладно, раз пошли подсказки в виде полного кода, то вот ещё функциональный вариант, плюс форматирование чтобы без лишних знаков:
numbers = "22.32 3.74 4.67 "
print(f'{sum(map(float, numbers.split())):g}')
Вывод:
30.73
ответ дан 19 мая 2021 в 13:18
CrazyElfCrazyElf
65.4k5 золотых знаков19 серебряных знаков50 бронзовых знаков
2
Given a string S containing alphanumeric characters, The task is to calculate the sum of all numbers present in the string.
Examples:
Input: 1abc23
Output: 24
Explanation: 1 + 23 = 24Input: geeks4geeks
Output: 4Input: 1abc2x30yz67
Output: 100
Approach:
Scan each character of the input string and if a number is formed by consecutive characters of the string, then increment the result by that amount. The only tricky part of this question is that multiple consecutive digits are considered one number.
Follow the below steps to implement the idea:
- Create an empty string temp and an integer sum.
- Iterate over all characters of the string.
- If the character is a numeric digit add it to temp.
- Else convert temp string to number and add it to sum, empty temp.
- Return sum + number obtained from temp.
Below is the implementation of the above approach:
C++
#include <iostream>
using
namespace
std;
int
findSum(string str)
{
string temp =
""
;
int
sum = 0;
for
(
char
ch : str) {
if
(
isdigit
(ch))
temp += ch;
else
{
sum +=
atoi
(temp.c_str());
temp =
""
;
}
}
return
sum +
atoi
(temp.c_str());
}
int
main()
{
string str =
"12abc20yz68"
;
cout << findSum(str);
return
0;
}
Java
import
java.io.*;
class
GFG {
static
int
findSum(String str)
{
String temp =
"0"
;
int
sum =
0
;
for
(
int
i =
0
; i < str.length(); i++) {
char
ch = str.charAt(i);
if
(Character.isDigit(ch))
temp += ch;
else
{
sum += Integer.parseInt(temp);
temp =
"0"
;
}
}
return
sum + Integer.parseInt(temp);
}
public
static
void
main(String[] args)
{
String str =
"12abc20yz68"
;
System.out.println(findSum(str));
}
}
Python3
def
findSum(str1):
temp
=
"0"
Sum
=
0
for
ch
in
str1:
if
(ch.isdigit()):
temp
+
=
ch
else
:
Sum
+
=
int
(temp)
temp
=
"0"
return
Sum
+
int
(temp)
str1
=
"12abc20yz68"
print
(findSum(str1))
C#
using
System;
class
GFG {
static
int
findSum(String str)
{
String temp =
"0"
;
int
sum = 0;
for
(
int
i = 0; i < str.Length; i++) {
char
ch = str[i];
if
(
char
.IsDigit(ch))
temp += ch;
else
{
sum +=
int
.Parse(temp);
temp =
"0"
;
}
}
return
sum +
int
.Parse(temp);
}
public
static
void
Main(String[] args)
{
String str =
"12abc20yz68"
;
Console.WriteLine(findSum(str));
}
}
Javascript
<script>
function
findSum(str)
{
let temp =
"0"
;
let sum = 0;
for
(let i = 0; i < str.length; i++) {
let ch = str[i];
if
(!isNaN(String(ch) * 1))
temp += ch;
else
{
sum += parseInt(temp);
temp =
"0"
;
}
}
return
sum + parseInt(temp);
}
let str =
"12abc20yz68"
;
document.write(findSum(str));
</script>
Time complexity: O(N) where n is length of the string.
Auxiliary Space: O(N) where n is length of the string.
Calculate sum of all numbers present in a string using recursion
The idea is to recursively traverse over the string and find out the numbers then add these numbers to the result, at last return the result.
Follow the below steps to implement the idea:
- Create an empty string temp and an integer sum.
- Recursively traverse the characters for every index i from 0 to length – 1.
- If i = N-1 then check if current character is a digit return str[i] – ‘0’.
- Else return 0.
- If str[i] is a digit.
- Run a for loop with counter j from i to N – 1.
- If the character is a numeric digit add it to temp.
- Else break.
- Return sum of numeric value of temp + recur for index j.
- Run a for loop with counter j from i to N – 1.
Below is the implementation of the above approach:
C++
#include <iostream>
using
namespace
std;
int
solve(string& str,
int
i,
int
n)
{
if
(i >= n)
return
0;
if
(i == n - 1) {
if
(
isdigit
(str[i])) {
return
str[i] -
'0'
;
}
else
{
return
0;
}
}
if
(
isdigit
(str[i])) {
string temp =
""
;
int
j;
for
(j = i; j < n; j++) {
if
(
isdigit
(str[j]))
temp += str[j];
else
break
;
}
return
stoi(temp) + solve(str, j, n);
}
else
{
solve(str, i + 1, n);
}
}
int
findSum(string str)
{
return
solve(str, 0, str.size());
}
int
main()
{
string str =
"12abc20yz68"
;
cout << findSum(str);
return
0;
}
Java
import
java.util.Scanner;
class
Main {
static
int
solve(String str,
int
i,
int
n) {
if
(i >= n)
return
0
;
if
(i == n -
1
) {
if
(Character.isDigit(str.charAt(i))) {
return
str.charAt(i) -
'0'
;
}
else
{
return
0
;
}
}
if
(Character.isDigit(str.charAt(i))) {
String temp =
""
;
int
j;
for
(j = i; j < n; j++) {
if
(Character.isDigit(str.charAt(j)))
temp += str.charAt(j);
else
break
;
}
return
Integer.parseInt(temp) + solve(str, j, n);
}
else
{
return
solve(str, i +
1
, n);
}
}
static
int
findSum(String str) {
return
solve(str,
0
, str.length());
}
public
static
void
main(String[] args) {
String str =
"12abc20yz68"
;
System.out.println(findSum(str));
}
}
Python3
def
findSum(
str
):
result
=
0
temp
=
""
for
i
in
range
(
len
(
str
)):
if
str
[i].isnumeric():
temp
+
=
str
[i]
if
i
=
=
len
(
str
)
-
1
:
result
+
=
int
(temp)
else
:
if
temp !
=
"":
result
+
=
int
(temp)
temp
=
""
return
result
if
__name__
=
=
"__main__"
:
str
=
"12abc20yz68"
print
(findSum(
str
))
C#
using
System;
using
System.Linq;
using
System.Collections.Generic;
class
GFG
{
static
bool
isdigit(
char
c)
{
if
(c>=
'0'
&& c<=
'9'
)
return
true
;
return
false
;
}
static
int
solve(
string
str,
int
i,
int
n)
{
if
(i >= n)
return
0;
if
(i == n - 1) {
if
(isdigit(str[i])) {
return
str[i];
}
else
{
return
0;
}
}
if
(isdigit(str[i])) {
string
temp =
""
;
int
j;
for
(j = i; j < n; j++) {
if
(isdigit(str[j]))
temp += str[j];
else
break
;
}
return
Int32.Parse(temp) + solve(str, j, n);
}
else
{
return
solve(str, i + 1, n);
}
}
static
int
findSum(
string
str)
{
return
solve(str, 0, str.Length);
}
static
public
void
Main()
{
string
str =
"12abc20yz68"
;
Console.Write(findSum(str));
}
}
Javascript
function
findSum(str) {
let result = 0;
let temp =
""
;
for
(let i = 0; i < str.length; i++) {
if
(!isNaN(str[i])) {
temp += str[i];
if
(i === str.length - 1) {
result += parseInt(temp);
}
}
else
{
if
(temp !==
""
) {
result += parseInt(temp);
temp =
""
;
}
}
}
return
result;
}
console.log(findSum(
"12abc20yz68"
));
Time Complexity: O(N), where N is the size of the given string.
Auxiliary Space: O(N), in worst case it can cost O(N) recursive calls
Calculate sum of all numbers present in a string using Regex in Python:
The idea is to use inbuilt function Python RegEx.
Below is the Implementation of above approach:
C++14
#include <iostream>
#include <regex>
int
findSum(std::string str) {
std::regex pattern(
"\d+"
);
std::smatch match;
int
sum = 0;
while
(std::regex_search(str, match, pattern)) {
sum += stoi(match[0].str());
str = match.suffix().str();
}
return
sum;
}
int
main() {
std::string str =
"12abc20yz68"
;
std::cout << findSum(str) << std::endl;
return
0;
}
Python3
import
re
def
find_sum(str1):
return
sum
(
map
(
int
, re.findall(
'd+'
, str1)))
str1
=
"12abc20yz68"
print
(find_sum(str1))
Javascript
function
find_sum(str1) {
return
str1.match(/d+/g).reduce((acc, val) => acc + parseInt(val), 0);
}
const str1 =
"12abc20yz68"
;
console.log(find_sum(str1));
Java
import
java.util.regex.*;
public
class
Main {
public
static
int
findSum(String str)
{
Pattern pattern = Pattern.compile(
"\d+"
);
Matcher matcher = pattern.matcher(str);
int
sum =
0
;
while
(matcher.find()) {
sum += Integer.parseInt(matcher.group());
str = matcher.replaceFirst(
""
);
matcher = pattern.matcher(str);
}
return
sum;
}
public
static
void
main(String[] args)
{
String str =
"12abc20yz68"
;
System.out.println(findSum(str));
}
}
C#
using
System;
using
System.Text.RegularExpressions;
public
class
GFG
{
public
static
int
FindSum(
string
str)
{
Regex pattern =
new
Regex(
@"d+"
);
Match matcher = pattern.Match(str);
int
sum = 0;
while
(matcher.Success)
{
sum += Int32.Parse(matcher.Value);
str = pattern.Replace(str,
""
, 1, matcher.Index);
matcher = pattern.Match(str);
}
return
sum;
}
static
public
void
Main()
{
string
str =
"12abc20yz68"
;
Console.WriteLine(FindSum(str));
}
}
Time complexity: O(n) where n is length of the string.
Auxiliary Space: O(n) where n is length of the string.
This article is contributed by Aditya Goel. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Last Updated :
20 Mar, 2023
Like Article
Save Article
Уведомления
- Начало
- » Python для новичков
- » Как сложить цифры в строке?
#1 Март 22, 2020 15:41:06
Как сложить цифры в строке?
Добрый день.
Прошу помочь решить ребус.
Дана строка из одних чисел, необходимо вывести сумму всех чисел.
Думаю, что надо строку перевести в список и воспользоваться методом sym() для списка.
Наметал вот такую функцию и остановился. Застрял на том, что в списке все равно строковые данные, их надо перевести в числовые значения чтобы sum() выполнил суммирование.
str = '1234567' def sum_numb(numStr): list = [] list.extend(numStr) return sum(list) print(sum_numb(str))
Как правильно решить данную задачу?
Офлайн
- Пожаловаться
#2 Март 22, 2020 16:41:32
Как сложить цифры в строке?
master-python
в списке все равно строковые данные, их надо перевести в числовые значения
И в чем проблема? int в помощь.
Офлайн
- Пожаловаться
#3 Март 22, 2020 17:30:08
Как сложить цифры в строке?
Спасибо. Крайне содержательно!
Не надо делать ответы ради ответа!
Офлайн
- Пожаловаться
#4 Март 22, 2020 17:49:06
Как сложить цифры в строке?
master-pythonвам дали направление. если ничего не читать а действовать наобум то вы ничего не добьетесь
>>> str = '1234567' >>> print(list(map(int,str))) [1, 2, 3, 4, 5, 6, 7] >>> print([int(i) for i in str]) [1, 2, 3, 4, 5, 6, 7] >>>
вы даже не обратили внимание что переменная с названием str подсвечивается как ключевое слово что ни есть хорошо так писать.
Офлайн
- Пожаловаться
#5 Март 22, 2020 18:08:02
Как сложить цифры в строке?
marvellik
master-pythonвам дали направление. если ничего не читать а действовать наобум то вы ничего не добьетесь
Дружочек, не надо очередной раз на себя брать роль кибер-сенсеея или кибер-воспитателя, я сам разберусь что и где читать, хорошо? Что за мода прикидываться мудрым Ка пошла в интернете!?!?!? Я задал здесь вопрос! Есть что ответить – ответь, нет, проходи мимо!
marvellik
str подсвечивается как ключевое слово что ни есть хорошо так писать
У меня ничего не подсвечивается, если у вас подсвечивается, задавайте вопросы своему компьютеру.
есть переменная str, в ней строка из чисел. Фсе!
P.S. Как я жалею что исчез FidoNet…
Офлайн
- Пожаловаться
#6 Март 22, 2020 18:11:08
Как сложить цифры в строке?
master-pythonну удачи вам с вашим настроем. это был последний вопрос на который вам ответили.
Офлайн
- Пожаловаться
#7 Март 22, 2020 18:25:09
Как сложить цифры в строке?
marvellik
master-pythonну удачи вам с вашим настроем. это был последний вопрос на который вам ответили.
Да вы знаете, с таким посылом – “иди и читай”, особо многого обрести на этом форуме просто не возможно.
И да, решение на свой вопрос я уже нашел:
str = '1234567' def sum_numb(numStr): int_lst = [int(x) for x in numStr] return sum(int_lst) print(sum_numb(str))
И что там у вас подсвечивалось? Найдите себя, ради бога….и удачи…
Офлайн
- Пожаловаться
#8 Март 22, 2020 19:44:12
Как сложить цифры в строке?
master-python
особо многого обрести на этом форуме просто не возможно
Вы совершенно правы. И хочу дополнить – у форума вообще другие цели. Это не образовательная площадка, не ваш личный тренер и не учебник. Люди по собственному желанию оказывают или не оказывают помощь коллегам – вот идея форума. Читать вслух учебник вам никто не будет. Вежливо с вами общаться на интересные вам темы никто не вам не обещал. Не нравится – есть куча решений, самое очевидное из которых поискать себе аудиторию по вкусу в другом месте. И вы не правы, этот форум помог очень многим встать на ноги.
master-python
P.S. Как я жалею что исчез FidoNet…
P.S.S В фидо тебя бы ссаными тряпками закидали, там подобное тебе нубло за людей то не считали. Жалеет он. И, кстати, он никуда не исчез.
Отредактировано FishHook (Март 22, 2020 21:18:35)
Офлайн
- Пожаловаться
#9 Март 22, 2020 23:42:33
Как сложить цифры в строке?
master-python
Дана строка из одних чисел, необходимо вывести сумму всех чисел.
>>> s = '1234567' >>> out = sum(map(int, s)) >>> out 28 >>>
Офлайн
- Пожаловаться
#10 Март 23, 2020 10:41:27
Как сложить цифры в строке?
FishHook По манере написания, я вижу, ты ещё пупсик, пытающийся на форумах самоутвердиться. Не отчаивайся, вырастит!
А по теме – КГ/АМ
Офлайн
- Пожаловаться
- Начало
- » Python для новичков
- » Как сложить цифры в строке?
script1adsense2code
script1adsense3code
Строка Python: упражнение 62 с решением
Напишите программу на Python для вычисления суммы цифр данной строки.
Пример решения : –
Код Python:
def sum_digits_string(str1):
sum_digit = 0
for x in str1:
if x.isdigit() == True:
z = int(x)
sum_digit = sum_digit + z
return sum_digit
print(sum_digits_string("123abcd45"))
print(sum_digits_string("abcd1234"))
Пример вывода:
15 10
Блок – схема:
Визуализируйте выполнение кода Python:
Следующий инструмент визуализирует, что компьютер делает шаг за шагом при выполнении указанной программы:
Редактор кода Python:
Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.
Предыдущий: Напишите программу на Python для удаления повторяющихся символов данной строки.
Далее: Напишите программу на Python для удаления начальных нулей с IP-адреса.
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
Вычисляет сумму всех элементов в последовательности.
Синтаксис:
sum(iterable, /, start=0)
Параметры:
iterable
– объект, поддерживающий итерацию,start
– число, начальное значение для суммы.
Возвращаемое значение:
- сумма элементов.
Описание:
Функция sum()
начинает суммирование элементов последовательности iterable
с начального значения start
, если оно указано, сложение происходит слева направо и в результате возвращает их сумму.
Функция sum()
ожидает, что элементы iterable
являются числами, а начальное значение start
не может быть строкой. Если аргумент iterable
пуст, то функция sum()
возвращает начальное значение start
, если оно указано.
Для некоторых случаев использования функции sum()
есть хорошие альтернативы:
- Для суммирования чисел с плавающей запятой с повышенной точностью используйте
math.fsum()
. - Предпочтительный и быстрый способ объединить последовательность строк – это вызов метода
str.join(sequence)
. - Чтобы объединить нескольких последовательностей, рассмотрите возможность использования
itertools.chain()
.
Изменено в Python 3.8: Параметр start
может быть указан как аргумент ключевого слова.
Примеры вычисления суммы разных последовательностей.
- Стандартные приемы вычисления суммы,
- Вычисление суммы списка строк с числами,
- Подсчет суммы чисел в строке разделенных пробелами.
- Подсчет суммы цифр в числе.
- Считаем число “Души” (нумерология).
Стандартные приемы вычисления суммы.
>>> x = [] >>> sum(x) # 0 # Сумма чисел, переданных # в качестве аргументов (каждая отдельно). >>> sum(x, 10) # 10 # сумма списка целых чисел >>> x = [1, 2, 3, 4] >>> sum(x, 10) # 20 # сумма списка целых и десятичных чисел >>> x = [1.1, 2.2, 3.3, 4.256] >>> sum(x, 1) # 11.856000000000002 >>>
Вычисление суммы списка строк с числами.
Для преобразования списка строк с числами включая десятичные c разделением их по типам int
и float
, необходимо перед преобразованием в тип float
проверять строку на вхождение точки ‘.’.
Для проверки строки на целое число перед преобразованием проверим, что строка состоит только из десятичных чисел str.isdigit().
После выполнения всех преобразований применим функцию sum()
.
>>> str_list = ['8.3', '11', 'девять.', '1', '5', '3', '9', 'пять', '15', '13', '7', '13.9', 'число'] >>> def str_to_num(str): ... str = str.strip() ... if '.' in str and str.replace('.', '').isdigit(): ... return float(str) ... elif str.isdigit(): ... return int(str) ... >>> num_list = [] >>> for i in str_list: ... n = str_to_num(i) ... if n is not None: ... num_list.append(str_to_num(i)) >>> num_list # [8.3, 11, 1, 5, 3, 9, 15, 13, 7, 13.9] >>> sum(num_list) # 86.2
Подсчет суммы чисел в строке разделенных пробелами/запятыми/подстрокой.
В этом случае необходимо сначала преобразовать строку с числами, разделенные пробелами/запятыми или какой либо подстрокой в список строк с числами.
Это можно сделать следующими способами:
- по разделителю, например пробелу
' '
или';'
методом строкиstr.split()
, - по разделителю, состоящему из регулярного выражения функцией
re.split()
, - вытащить все цифры из исходной строки при помощи функцией
re.findall()
.
Дальнейший алгоритм вычисления суммы чисел, находящихся в строке с разделителем будет аналогичен предыдущему примеру.
>>> line = '8.3 11 девять 1 5 3 9 пять 15 13 7 13.9 число' # 1 - используем метод строки str.split() >>> str_list = line.split(' ') >>> str_list # ['8.3', '11', 'девять', '1', '5', '3', '9', 'пять', '15', '13', '7', '13.9', 'число'] # 3 способ - используем функцию re.findall() >>> line = '8.3 11 девять. 1 5 3 9 пять 15 13 7 13.9 число' >>> match = re.findall(r'[d.?,?]+', line) >>> list(match) # ['8.3', '11', '1', '5', '3', '9', '15', '13', '7', '13.9'] # Далее будем делать то же самое что и в предыдущем примере ... # Выполняем преобразование списка строк с # числами str_list в список целых и десятичных чисел ... # в итоге преобразований, описанных в предыдущем # примере получаем список чисел, к которым # применим функцию 'sum()' >>> num_list # [8.3, 11, 1, 5, 3, 9, 15, 13, 7, 13.9] >>> sum(num_list) # 86.2
Подсчет суммы цифр в числе.
Допустим есть число, целое или вещественное и необходимо подсчитать сумму цифр этого числа. Для того, что бы это сделать нужно это число преобразовать в список входящих в него цифр, а потом применить к полученному списку функцию sum()
.
Алгоритм действий будет следующим:
- преобразуем число в строку при помощи функции
str()
; - число может быть как
int
, так иfloat
, следовательно необходимо произвести замену десятичного разделителя'.'
при помощи строкового методаstr.replace()
; - преобразовываем полученную строку с числом в список строк с цифрами функцией
list()
; - далее преобразовываем каждый элемент полученного списка строк с цифрами в список целых чисел используя функцию
map()
; - применяем функцию
sum()
к итоговому списку.
>>> pi = 3.1415926 # число в строку >>> str_pi = str(pi) # производим замену десятичного разделителя >>> str_pi = str_pi.replace('.', '') # строку с числом в список строк с цифрами >>> lst_str = list(str_pi) # преобразовываем каждый элемент полученного # списка строк с цифрами в список целых чисел >>> lst_num = map(int, lst_str) # применяем функцию `sum()` >>> s = sum(lst_num) >>> s # 31
Считаем число “Души” (нумерология).
Есть такая эзотерическая концепция “Нумерология“, согласно которой числа определяют нашу жизнь и существование всего, что нас окружает. Так вот, в ней есть понятие “числа души человека“, которое считается сложением всех цифр в дате его рождения, пока не получится число, которое меньше 10. То есть число от 1 до 9.
Например, есть дата рождения 29.09.2019 г. Тогда число души считается следующим образом:
- 2 + 9 + 0 + 9 + 2 + 0 + 1 + 9 = 32
- 3 + 2 = 5
Изобразим подсчет числа “Души” на языке Python. Для краткости, воспользуемся понятием выражения генератора-списка:
def soul(num): # считаем до тех пор пока длина # строкового представления `num` больше 1 while len(str(num)) > 1: # функция sum() складывает список цифр # для краткости воспользуемся генератором списка num = sum( # генератор-списка [int(n) # преобразуем строку в цифру # проходимся по элементам списка строк for n in list(str(num)) # список строк из числа (даты) # проверяем строку на цифру if n.isdigit()] ) return num # дата date = '29.09.2019' s = soul(date) print(date, '=>', s) # 29.09.2019 => 5 # целое число num = 1357 s = soul(num) print(num, '=>', s) # 1357 => 7 # вещественное число pi = 3.1415926 s = soul(pi) # 3.1415926 => 4