Найдите числа в строке и суммируйте их, используя понимание списка [sum only 1-9] [duplicate]

Попробуйте поместить document.getElementById в setTimeout()

Например.

setTimeout(function(){
    console.log(document.getElementById('whatever'));
}, 100);

Если это сработает, тогда это просто проблема синхронизации.

7
задан Óscar López 27 July 2013 в 04:11
поделиться

8 ответов

Обратите внимание, что вы можете легко решить эту проблему, используя встроенные функции. Это более идиоматическое и эффективное решение:

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

sum_digits('hihello153john')
=> 9

В частности, имейте в виду, что метод is_a_digit() уже существует для типов строк, он называется isdigit() .

И весь цикл в функции sum_digits() может быть выражен более кратко с использованием выражения генератора в качестве параметра для встроенной функции sum(), как показано выше.

17
ответ дан Óscar López 18 August 2018 в 04:32
поделиться

Вы возвращаете значение b на каждой итерации, если a является цифрой.

Возможно, вы хотите:

b += int(a)

Вместо:

b = int(a)
b += 1
10
ответ дан Alex Reynolds 18 August 2018 в 04:32
поделиться
  • 1
    вау, что работает! не могли бы вы объяснить, почему моя работа не работает? – user1864828 27 January 2013 в 19:34
  • 2
    Строка b = int(a) устанавливает значение b как целое значение символа цифры. Затем вы добавляете его в него. В вашем примере последняя цифра - 3, поэтому вы устанавливаете b на 3, а затем добавляете 1, получая 4. Вместо этого вы хотите увеличить b значение каждой цифры. – Alex Reynolds 27 January 2013 в 19:35

Просто вариант ответа @ oscar, если нам нужна сумма, чтобы быть одной цифрой,

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
0
ответ дан Babu 18 August 2018 в 04:32
поделиться

Один вкладыш

sum_digits = lambda x: sum(int(y) for y in x if y.isdigit())
1
ответ дан Cam 18 August 2018 в 04:32
поделиться

Другой способ использования встроенных функций - использовать функцию уменьшить :

>>> numeric = lambda x: int(x) if x.isdigit() else 0
>>> reduce(lambda x, y: x + numeric(y), 'hihello153john', 0)
9
3
ответ дан grooveplex 18 August 2018 в 04:32
поделиться

Эквивалент для вашего кода, используя списки:

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

Он будет работать быстрее, чем версия «для», и сэкономит много кода.

0
ответ дан kaspersky 18 August 2018 в 04:32
поделиться

Я хотел бы предложить другое решение с использованием regx, которое охватывает два сценария:

1. Вход = 'abcd45def05' Выход = 45 + 05 = 50

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

Обратите внимание на «+» для одного или нескольких вхождений

2. Вход = 'abcd45def05' Выход = 4 + 5 + 0 + 5 = 14

import re
print(sum(int(x) for x in re.findall(r'[0-9]', my_str)))
1
ответ дан Santosh Pillai 18 August 2018 в 04:32
поделиться
1
ответ дан Leonardo Lima 30 October 2018 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: