3.2 Contadores¶
Cómo utilizar el signo +=
en un contador¶
Mira este video de 7:20 a 13:17
Para español, haga click en configuración, seleccione “español” debajo de los subtítulos.
Traducción por Erik Amézquita (Michigan State University)
# Para reproducir el siguiente tutorial, presiona shift + enter
from IPython.display import YouTubeVideo
from datetime import timedelta
start=int(timedelta(hours=0, minutes=7, seconds=20).total_seconds())
end=int(timedelta(hours=0, minutes=13, seconds=17).total_seconds())
YouTubeVideo("Cvi3dByz9SE",start=start,end=end,width=640,height=360)
La siguiente es una transcripción del video.
Veamos más trucos que podemos usar con loops for
, incluido un signo +=
como contador.
Podemos poner una variable o, como veremos muy pronto, incluso una lista, fuera de un loop. Luego podemos ejecutar nuestro loop y podemos modificar la variable fuera del loop. De ese modo, la variable se actualizará continuamente a medida que se modifica en cada iteración del loop. Algo muy habitual es crear un contador. Por ejemplo, si creamos una variable,
llamémosle count_up
, y la inicializamos en 0, si ejecutamos nuestro loop, podríamos, por ejemplo agregar i
al contador count_up
cada
vez que se itere el loop, de modo que cada vez que se ejecuta el loop,
agregaremos i
al contador. De ese modo el valor de count_up
va a cambiar. Aunque inicialmente su valor es 0, observemos que lo declaramos
con valor 0 fuera del loop, y cuando ejecutemos nuestro loop, el contador se modificará y básicamente estará ignorando cuál era ese valor inicial para que podamos modificar constantemente el valor del contador a medida que se ejecuta el loop.
Esto es un poco engañoso con respecto a las matemáticas porque esto no es matemáticas, esta es una afirmación matemáticamente falsa, pero es importante saber cómo funciona. Por ejemplo, aquí tenemos una función range()
que comienza en 0 y va a 12 y pasos de 2 en 2. La secuencia irá entonces 0, 2, 4, 6, 8. El contador count_up
se establece inicialmente
en 0 y, por lo tanto, la primera vez que el loop corre será 0. Asi mismo, i
será 0, por lo que count_up
se establecerá nuevamente en 0. En la segunda iteración, count_up
sigue siendo 0, pero ahora i
es 2: así que count_up
sigue siendo 0, pero ahora i
es 2, por lo que count_up
se convierte en 2. Si ejecutamos el loop de nuevo, entonces i
será 4. Ahora count_up
es 2 y vamos a agregarle 4, por lo que ahora count_up
será 6. Básicamente esto es como decir “tomaremos el valor del contador previo a cualquier modificación con i
, y luego restableceremos el contador al nuevo valor añadiéndole i
. En este loop for
pondremos
una línea en la que imprimimos tanto i
como count_up
, para que podamos rastrear lo que está haciendo el loop.
Así podemos ver que para el range
de 0 a 12, con pasos de 2, va 0, 2, 4, 6, 8, 10, como era de esperar. Estos son los valores de i
. Por otro lado, count_up
es inicialmente 0, luego agregamos 0 a 0 y todavía estamos en 0, pero luego en la siguiente iteración i
se establece como 2. Como count_up
es 0, al agregarle 2, el contador es 2 ahora. En la siguiente iteración, el contador está en 2, pero ahora i
es 4 y entonces el contador se convierte en 6. En la siguiente iteración, el valor de i
se convierte en 6, lo sumamos al contador de 6 y obtenemos 12. Y así sucesivamente. Entonces podemos ver que i
es agregado al valor anterior de count_up
, pero luego el contador se actualiza cada vez que ejecutamos el loop.
# Podemos crear una variable fuera del loop y hacer que el loop la modifique
# La variable puede comenzar en 0 y "contar" cada iteración del loop
count_up = 0
for i in range(0, 12, 2):
count_up = count_up + i
print(i, count_up) # always use print to make sure loop worked!
0 0
2 2
4 6
6 12
8 20
10 30
Esta notación es muy útil, ya que podemos ver que hemos creamos un contador. De cierto modo éste registra cuántas veces se ha ejecutado nuestro loop lo cual es muy conveniente. Puesto que es tan conveniente, tenemos que pensar en la notación. Como vemos aquí, sabemos que esta notación no es la mejor en el sentido matemático, pues técnicamente no son iguales. Por ello, la gente creó un nuevo signo matemático, y se
llama signo más igual (+=
). Así que básicamente esta instrucción de que count_up
más i
será el nuevo valor de count_up
es equivalente a
más igual. Podemos decir simplemente count_up
“más igual” i
. Básicamente vamos a agregar i
al valor que count_up
tenga en ese momento y luego actualizaremos el valor de count_up
. Esa es la única diferencia entre estos dos loops y si ejecutamos este segundo loop, podemos ver que los resultados son los mismas. Así que +=
es una forma de actualizar el valor actual del contador y revisarlo cada vez que se ejecuta el loop.
# El signo + = es lo mismo que agregar "i" al contador
count_up = 0
for i in range(0, 12, 2):
count_up += i
print(i, count_up) # always use print to make sure loop worked!
0 0
2 2
4 6
6 12
8 20
10 30
El +=
a es la versión más utilizada de esta notación, pero podemos usar todas las demás operaciones aritméticas. Por ejemplo, podemos usar menos igual -=
en su lugar. Si usamos -=
, podemos ver que el índice i
se resta del contador count_up
con cada iteración.
# También puede usar un signo - =
count_up = 0
for i in range(0, 12, 2):
count_up -= i
print(i, count_up) # always use print to make sure loop worked!
0 0
2 -2
4 -6
6 -12
8 -20
10 -30
Podemos multiplicar de igual manera, pero puedes ver que no es algo muy útil al empezar con 0. Si empiezas con el contador en 0, ocurre que cualquier i
por él se vuelve 0. Así que no vemos mucha actividad en él.
# O puede usar un signo * =
# Pero no es útil a comenzar de 0
count_up = 0
for i in range(0, 12, 2):
count_up *= i
print(i, count_up) # always use print to make sure loop worked!
0 0
2 0
4 0
6 0
8 0
10 0
Pero, si por ejemplo, inicializamos el contador igual a 1, entonces podemos ver cómo cada vez se multiplica por i
y se actualiza.
# Aquí está el signo * = que comienza en 1
count_up = 1 # change to 1 to get results with *=
for i in range(1, 12, 2):
count_up *= i
print(i, count_up) # always use print to make sure loop worked!
1 1
3 3
5 15
7 105
9 945
11 10395
También podemos hacer una división igual /=
y como podemos imaginar, dividiendo por i
con cada iteración, obtenemos un valor que disminuye rápidamente y que se vuelve infinitamente pequeño.
# O puede usar un signo / =
count_up = 1
for i in range(1, 12, 2):
count_up /= i
print(i, count_up) # always use print to make sure loop worked!
1 1.0
3 0.3333333333333333
5 0.06666666666666667
7 0.009523809523809523
9 0.001058201058201058
11 9.620009620009618e-05