Intenta comprender el código de forma correcta previamente a aplicarlo a tu proyecto y si tdeseas aportar algo puedes decirlo en los comentarios.
Solución:
Ambas líneas que publicaste están bien, pero puedes hacerlo puramente en números enteros, y será lo más eficiente:
def sum_digits(n):
s = 0
while n:
s += n % 10
n //= 10
return s
o con divmod
:
def sum_digits2(n):
s = 0
while n:
n, remainder = divmod(n, 10)
s += remainder
return s
Aún más rápida es la versión sin asignaciones aumentadas:
def sum_digits3(n):
r = 0
while n:
r, n = r + n % 10, n // 10
return r
> %timeit sum_digits(n)
1000000 loops, best of 3: 574 ns per loop
> %timeit sum_digits2(n)
1000000 loops, best of 3: 716 ns per loop
> %timeit sum_digits3(n)
1000000 loops, best of 3: 479 ns per loop
> %timeit sum(map(int, str(n)))
1000000 loops, best of 3: 1.42 us per loop
> %timeit sum([int(digit) for digit in str(n)])
100000 loops, best of 3: 1.52 us per loop
> %timeit sum(int(digit) for digit in str(n))
100000 loops, best of 3: 2.04 us per loop
Si desea seguir sumando los dígitos hasta obtener un número de un solo dígito (una de mis características favoritas de los números divisibles por 9) puedes hacer:
def digital_root(n):
x = sum(int(digit) for digit in str(n))
if x < 10:
return x
else:
return digital_root(x)
Lo que en realidad resulta ser bastante rápido en sí mismo...
%timeit digital_root(12312658419614961365)
10000 loops, best of 3: 22.6 µs per loop
esto podría ayudar
def digit_sum(n):
num_str = str(n)
sum = 0
for i in range(0, len(num_str)):
sum += int(num_str[i])
return sum
Si entiendes que te ha resultado provechoso este artículo, sería de mucha ayuda si lo compartes con otros juniors y nos ayudes a difundir nuestra información.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)