Как найти сумму чисел строки в питоне

numbers = "22.32 3.74 4.67 "
print(sum(numbers))          

Как получить сумму чисел, находящихся в строке?

0xdb's user avatar

0xdb

51.4k194 золотых знака56 серебряных знаков232 бронзовых знака

задан 19 мая 2021 в 12:30

Jack's user avatar

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_oS's user avatar

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

CrazyElf's user avatar

CrazyElfCrazyElf

65.4k5 золотых знаков19 серебряных знаков50 бронзовых знаков

2

if i just read my sum_digits function here, it makes sense in my head but it seems to be producing wrong results. Any tip?

def is_a_digit(s):
''' (str) -> bool

Precondition: len(s) == 1

Return True iff s is a string containing a single digit character (between
'0' and '9' inclusive).

>>> is_a_digit('7')
True
>>> is_a_digit('b')
False
'''

return '0' <= s and s <= '9'

def sum_digits(digit):
    b = 0
    for a in digit:
        if is_a_digit(a) == True:
            b = int(a)
            b += 1

    return b

For the function sum_digits, if i input sum_digits('hihello153john'), it should produce 9

Óscar López's user avatar

Óscar López

231k37 gold badges310 silver badges385 bronze badges

asked Jan 27, 2013 at 17:27

user1864828's user avatar

2

Notice that you can easily solve this problem using built-in functions. This is a more idiomatic and efficient solution:

def sum_digits(digit):
    return sum(int(x) for x in digit if x.isdigit())

print(sum_digits('hihello153john'))
=> 9

In particular, be aware that the is_a_digit() method already exists for string types, it’s called isdigit().

And the whole loop in the sum_digits() function can be expressed more concisely using a generator expression as a parameter for the sum() built-in function, as shown above.

Haseeb Mir's user avatar

Haseeb Mir

9181 gold badge13 silver badges22 bronze badges

answered Jan 27, 2013 at 17:32

Óscar López's user avatar

Óscar LópezÓscar López

231k37 gold badges310 silver badges385 bronze badges

6

You’re resetting the value of b on each iteration, if a is a digit.

Perhaps you want:

b += int(a)

Instead of:

b = int(a)
b += 1

answered Jan 27, 2013 at 17:32

Alex Reynolds's user avatar

Alex ReynoldsAlex Reynolds

96k54 gold badges239 silver badges345 bronze badges

2

Another way of using built in functions, is using the reduce function:

>>> numeric = lambda x: int(x) if x.isdigit() else 0
>>> reduce(lambda x, y: x + numeric(y), 'hihello153john', 0)
9

grooveplex's user avatar

grooveplex

2,4824 gold badges28 silver badges30 bronze badges

answered Jan 27, 2013 at 18:45

JCash's user avatar

JCashJCash

3121 gold badge3 silver badges10 bronze badges

One liner

sum_digits = lambda x: sum(int(y) for y in x if y.isdigit())

Cam's user avatar

Cam

14.9k16 gold badges77 silver badges128 bronze badges

answered Jan 27, 2013 at 18:25

shantanoo's user avatar

shantanooshantanoo

3,6071 gold badge24 silver badges37 bronze badges

I would like to propose a different solution using regx that covers two scenarios:

1.
Input = ‘abcd45def05’
Output = 45 + 05 = 50

import re
print(sum(int(x) for x in re.findall(r'[0-9]+', my_str)))

Notice the ‘+’ for one or more occurrences

2.
Input = ‘abcd45def05’
Output = 4 + 5 + 0 + 5 = 14

import re
print(sum(int(x) for x in re.findall(r'[0-9]', my_str)))

answered Oct 3, 2017 at 7:23

Santosh Pillai's user avatar

Santosh PillaiSantosh Pillai

8,0691 gold badge31 silver badges27 bronze badges

Another way of doing it:

def digit_sum(n):
  new_n = str(n)
  sum = 0
  for i in new_n:
    sum += int(i)
  return sum

answered Sep 29, 2018 at 17:59

Leonardo Lima's user avatar

An equivalent for your code, using list comprehensions:

def sum_digits(your_string):
    return sum(int(x) for x in your_string if '0' <= x <= '9')

It will run faster then a “for” version, and saves a lot of code.

answered Jan 27, 2013 at 17:36

kaspersky's user avatar

kasperskykaspersky

3,9374 gold badges33 silver badges50 bronze badges

Just a variation to @oscar’s answer, if we need the sum to be single digit,

def sum_digits(digit):
    s = sum(int(x) for x in str(digit) if x.isdigit())
    if len(str(s)) > 1:
        return sum_digits(s)
    else:
        return s

answered Aug 17, 2017 at 9:35

Babu's user avatar

BabuBabu

2,5463 gold badges30 silver badges47 bronze badges

#if string =he15ll15oo10
#sum of number =15+15+10=40

def sum_of_all_Number(s):
    num = 0
    sum = 0

    for i in s:
        if i.isdigit():
            num = num * 10 + int(i)
        else:
            sum = sum + num
            num = 0
    return sum+num

#if string =he15ll15oo10
#sum of digit=1+5+1+5+1+0=13

def sum_of_Digit(s):
    sum = 0

    for i in s:
        if i.isdigit():
             sum= sum + int(i)

    return sum

s = input("Enter any String ")

print("Sum of Number =", sum_of_all_Number(s))
print("Sum Of Digit =", sum_of_Digit(s))

Tomerikoo's user avatar

Tomerikoo

18.1k16 gold badges45 silver badges60 bronze badges

answered Dec 9, 2021 at 15:03

Sanjay Rai's user avatar

simply turn the input to integer by int(a) —> using a.isdigit to make sure the input not None (”) ,
if the input none make it 0 and return sum of the inputs in a string simply

def sum_str(a, b):
    a = int(a) if a.isdigit() else 0
    b = int(b) if b.isdigit() else 0
    return f'{a+b}'

answered Feb 13 at 11:42

Not Bedo's user avatar

1

Вычисляет сумму всех элементов в последовательности.

Синтаксис:

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 г. Тогда число души считается следующим образом:

  1. 2 + 9 + 0 + 9 + 2 + 0 + 1 + 9 = 32
  2. 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

Уведомления

  • Начало
  • » 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 для новичков
  • » Как сложить цифры в строке?
>>> sum([x[0] for x in arrays])
34.33750876274861
>>> sum([x[1] for x in arrays])
19.305019168249604
>>> sum([x[2] for x in arrays])
32.17848566247153
>>> sum([x[3] for x in arrays])
22.424106744929986
...

где arrays – массив с вашими строками

import json
data = '''
[-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 15.626869483055735, 0.0]
[0.0, 19.305019168249604, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 22.424106744929986, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 24.802126691039216, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 25.41793956879349]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 32.17848566247153, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[34.33750876274861, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 38.54533200463435, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 40.605066388577725, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
'''
arrays = [json.loads(x) for x in data.split('n') if x]

Добавить комментарий