Con una cuenta desbloqueas el cuestionario, el foro de dudas y el tutor con IA de esta lección, además del registro de progreso y el certificado verificable al terminar «Python para Ingeniería Espacial».
Un pase de un satélite de órbita baja dura entre diez y quince minutos. Si quieres la elevación minuto a minuto son quince cálculos; si la quieres cada segundo son novecientos; y si estás analizando la señal muestreada a 48 kHz, son 43,2 millones por cada quince minutos. Copiar y pegar no escala: hace falta decirle a la máquina "repite esto" una sola vez.
Python tiene dos formas de repetir, y elegir bien entre ellas es medio arte y medio regla:
for: repite una vez por cada elemento de una secuencia. Se usa cuando sabes de antemano sobre qué vas a iterar.
while: repite mientras una condición siga siendo verdadera. Se usa cuando no sabes cuántas vueltas harán falta.
La regla práctica: si puedes escribirlo con for, escríbelo con for. Un for no puede quedarse colgado porque la secuencia se acaba sola; un while mal escrito se repite para siempre y hay que matar el proceso.
for y range
La forma más común de generar la secuencia es range(), que produce números enteros consecutivos. Sus tres formas:
Llamada
Genera
Cuántos
range(5)
0, 1, 2, 3, 4
5
range(1, 5)
1, 2, 3, 4
4
range(0, 13, 3)
0, 3, 6, 9, 12
5
Dos cosas que hay que interiorizar y que a todo el mundo le muerden una vez: range empieza en 0 por defecto y el límite superior nunca se incluye. Por eso, para recorrer los minutos 0 a 12 de un pase de doce minutos de duración, hay que escribir range(13) y no range(12). Ese despiste tiene nombre propio en la profesión: off-by-one error, el error de uno, y es responsable de una fracción vergonzosa de todos los bugs de la historia.
for minuto in range(3):
print("minuto", minuto)
La variable minuto la crea el propio for y toma un valor distinto en cada vuelta. La sintaxis, otra vez, exige dos puntos al final y el cuerpo indentado.
Acumuladores y contadores
Casi todo lo que se hace con bucles cae en uno de dos patrones, y ambos consisten en inicializar una variable antes del bucle y actualizarla dentro:
Acumulador: total = 0 antes, total = total + x dentro. Suma potencias, tiempos, muestras.
Contador: cuantos = 0 antes, cuantos = cuantos + 1 dentro de un if. Cuenta cuántos elementos cumplen algo.
El fallo clásico es inicializar dentro del bucle: si total = 0 está indentado bajo el for, se reinicia en cada vuelta y al final vale lo mismo que el último elemento. Cuando un acumulador dé un resultado sospechosamente pequeño, mira la indentación antes que nada.
Existe un atajo muy usado: total += x significa exactamente total = total + x. Úsalo cuando ya tengas claro el patrón largo.
Ejemplo resuelto: la tabla de elevaciones de un pase
Un pase real se calcula propagando el TLE con SGP4, cosa que haremos con bibliotecas más adelante. Para practicar bucles nos basta un pase sintético: modelamos la elevación como una parábola que sale del horizonte, alcanza su máximo a mitad de camino y vuelve a bajar. Con elevación máxima emax y duración total T:
e(t)=emax[1−(T/2t−T/2)2]
No es exacta —la geometría real no es parabólica— pero captura lo esencial: vale 0 en los extremos, alcanza emax en el centro y es simétrica. Con emax=61° y T=12 minutos, minuto a minuto:
t (min)
e(t) (grados)
¿Supera la máscara de 10°?
0
0.00
no
1
18.64
sí
2
33.89
sí
3
45.75
sí
4
54.22
sí
5
59.31
sí
6
61.00
sí
7
59.31
sí
8
54.22
sí
9
45.75
sí
10
33.89
sí
11
18.64
sí
12
0.00
no
Comprobemos el minuto 3 a mano: t−T/2=3−6=−3, dividido entre T/2=6 da −0.5; al cuadrado, 0.25; uno menos eso, 0.75; por 61, 45.75°. Y el recuento: once de los trece instantes superan la máscara. Ese número es el que de verdad importa a un operador, porque la ventana útil de contacto son once minutos, no doce.
Playground · python
while: cuando no sabes cuántas vueltas
El while repite mientras su condición sea verdadera. Su peligro es simétrico a su virtud: si nada dentro del bucle hace que la condición acabe siendo falsa, el bucle no termina nunca. Todo while bien escrito tiene tres partes claramente identificables:
Una variable de control inicializada antes del bucle.
Una condición que depende de esa variable.
Una actualización de esa variable dentro del cuerpo.
Si al releer tu while no encuentras las tres, tienes un bucle infinito esperándote. Además existen dos instrucciones de control fino: break sale del bucle inmediatamente y continue salta al siguiente ciclo. Ambas son legítimas, pero cada una es un punto de salida extra que hay que tener en la cabeza al leer, así que úsalas con moderación.
Ejemplo resuelto: contar muestras por encima de un umbral
Una señal senoidal muestreada es el pan de cada día en radio. Tomamos un ciclo completo de sin(θ) con N=64 muestras equiespaciadas, es decir θk=2πk/N, y contamos cuántas tienen amplitud absoluta por encima de 0.7.
La condición ∣sinθ∣>0.7 se cumple en dos arcos simétricos. En el semiciclo positivo, sinθ>0.7 para θ entre 0.7754 y 2.3662 radianes, lo que en índices corresponde a k=8 hasta k=24, ambos incluidos: 17 muestras. Por simetría, el semiciclo negativo aporta otras 17 (k=40 a k=56). Total: 34 de 64 muestras, un 53.1%.
Comprobación de un extremo: para k=8, θ=2π⋅8/64=π/4 y sin(π/4)=0.7071>0.7; para k=7, sin(7π/32)=0.6344<0.7. El corte cae justo donde debe.
Playground · python
1 de 7
Comprueba el error de uno antes de que te muerda:
Quieres recorrer los minutos 0 a 12 de un pase, ambos incluidos. ¿Qué escribes?
Sabes repetir, pero tus datos siguen sueltos en variables independientes: sat1, sat2, sat3. En la lección 5 aprenderás a guardarlos juntos en listas y diccionarios, que es donde los bucles muestran de verdad para qué sirven.