En primer lugar la condición del bucle
while comprueba que el número (en este caso la variable
num) pasada como parámetro a la función sea mayor que 10. De esta manera no aseguramos que el número tiene más de una cifra, por ende el bucle se ejecutara mientras dicha condición se cumpla.
Luego entra en juego la función integrada de python o función
built-in sum la cual tiene la siguiente firma:
Donde el primer parámetro de esta es un objeto iterable de números, y el segundo es un entero que por defecto es 0, el cual determina el valor inicial de la suma.
Para aclarar, un objeto iterable son por ejemplo una cadena, lista, tupla, conjuto y los generadores.
Por ejemplo:
Supongamos que tenemos una lista de elementos llama
numbers la cual tiene los primeros 5 números primos 2, 3, 5, 7, 11.
y no interesa saber cuanto es la suma/total de estos cinco números, para esto podríamos hacer lo siguiente:
Ejecución
En este caso, el bucle
for es el encargado de iterar sobre la lista de números, es decir, que en cada pasada que el bucle realiza la variable
num toma un valor de la lista (puedes confirmarlo al imprimir su valor).
Lo anterior pude realizarse de una forma más "Pythonica" por así decirlo que es utilizando la función
sum junto un
generador,
Ejemplo 1:
Ejecución
Ejemplo 2: Uso de una expresión generadora.
En lugar de definir una función utilizo una expresión generadora, la cual tiene una sintaxis similar a una
lista por comprensión
Ahora bien, con respecto a
range este lo que hace en pocas palabras es retornar un objeto el cual produce una secuencia de enteros, por lo pude ser utilizado tanto el bulce for y la función sum entre otras. Esto se debe a que dicho objeto implementa el método
__iter__, el cual es un requisito necesario para ser considerado un iterador.
Ejemplo:
Lo anterior es lo que realiza internamente el bucle for, la función next retorna el siguinte elemento del iterador.
Se que pude parecer un poco, confuso y difícil de entender en un principio, pero una vez que lo comprendes todo sea hace más facil
y es a hay donde logras ver la potencia de este gran lenguaje.
Te comparto algunos artículos que pueden ayudarte en el aprendizaje ya que la solución de este ejercicio llevo a tocar algunos temas
un poco avanzados de python como los generadores, listas por comprension, objetos iteradores, etc.
https://www.programiz.com/python-programming/generator
https://www.programiz.com/python-programming/list#list-comprehension
https://www.programiz.com/python-programming/iterator
https://docs.python.org/3/library/functions.html#sum
Coméntanos si tienes alguna otra duda.