Попробуйте поместить document.getElementById
в setTimeout()
Например.
setTimeout(function(){
console.log(document.getElementById('whatever'));
}, 100);
Если это сработает, тогда это просто проблема синхронизации.
Обратите внимание, что вы можете легко решить эту проблему, используя встроенные функции. Это более идиоматическое и эффективное решение:
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()
, как показано выше.
Вы возвращаете значение b
на каждой итерации, если a
является цифрой.
Возможно, вы хотите:
b += int(a)
Вместо:
b = int(a)
b += 1
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
Один вкладыш
sum_digits = lambda x: sum(int(y) for y in x if y.isdigit())
Другой способ использования встроенных функций - использовать функцию уменьшить :
>>> numeric = lambda x: int(x) if x.isdigit() else 0
>>> reduce(lambda x, y: x + numeric(y), 'hihello153john', 0)
9
Эквивалент для вашего кода, используя списки:
def sum_digits(your_string):
return sum(int(x) for x in your_string if '0' <= x <= '9')
Он будет работать быстрее, чем версия «для», и сэкономит много кода.
Я хотел бы предложить другое решение с использованием 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)))