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».
Dos clases de número, y por qué la distinción importa
Python maneja los números en dos tipos básicos. Un int (integer, entero) es un número sin parte decimal: 817, -3, 137. Un float (floating point, coma flotante) tiene parte decimal: 137.10, 0.5, 2.998e8. Se distinguen porque representan cosas distintas: contar pases es asunto de enteros (no existen 3.5 pases), medir una elevación es asunto de floats.
La operación que más sorprende al principio es la división. En Python, /siempre devuelve un float, aunque el resultado sea exacto: 10 / 5 da 2.0, no 2. Si lo que quieres es la división entera —cuántas veces cabe, descartando el resto— existe //, y para quedarte con el resto existe %, el operador módulo:
Expresión
Resultado
Lectura
7 / 2
3.5
División real, siempre float
7 // 2
3
Cuántas veces cabe 2 en 7
7 % 2
1
Lo que sobra
2 ** 10
1024
Potencia: dos elevado a diez
10 ** -3
0.001
Exponente negativo, resultado float
El módulo % no es una curiosidad: es la herramienta estándar para trabajar con tiempos. Si un pase empieza en el segundo 11 040 del día, la hora es 11040 // 3600 = 3 y el minuto es (11040 % 3600) // 60 = 4, o sea 03:04 UTC. Lo usarás sin pensar dentro de unas lecciones.
Ojo con una trampa universal de los floats: 0.1 + 0.2 no da exactamente 0.3 sino 0.30000000000000004. No es un bug de Python, es cómo la aritmética binaria representa fracciones decimales, y ocurre igual en C, en Java y en tu hoja de cálculo. La consecuencia práctica: nunca compares floats con igualdad exacta; compara si la diferencia es menor que una tolerancia.
Texto: cadenas y f-strings
Una cadena (string) es texto entre comillas. Se pueden pegar con + (concatenar) y repetir con *, pero lo que de verdad usarás es la f-string: una cadena precedida de f en la que cualquier cosa entre llaves se sustituye por su valor.
nombre = "NOAA-19"
elevacion = 47.3218
print(f"Pase de {nombre} con elevación máxima {elevacion} grados")
print(f"Pase de {nombre} con elevación máxima {elevacion:.2f} grados")
La segunda línea imprime 47.3218; la tercera imprime 47.32. Ese :.2f es un especificador de formato: f significa "en notación decimal fija" y .2 significa "dos decimales". Redondea para mostrar, sin alterar el valor guardado. En informes de operación se usa constantemente, porque 47.32188794 no aporta nada sobre 47.32 salvo ruido visual.
Los especificadores más útiles del oficio:
Formato
Ejemplo con x = 1234.5678
Uso típico
{x:.2f}
1234.57
Elevaciones, potencias, tiempos
{x:10.2f}
1234.57
Columnas alineadas en una tabla
{x:.3e}
1.235e+03
Frecuencias en hercios, distancias
{x:+.1f}
+1234.6
Ganancias y pérdidas, donde el signo informa
El pecado capital: mezclar unidades
El error de unidades no es una anécdota de principiantes. En 1999 el Mars Climate Orbiter se perdió porque un equipo entregaba impulsos en libra-fuerza por segundo y el otro los interpretaba en newton-segundo; la nave entró demasiado bajo en la atmósfera marciana y se desintegró. Ciento veinticinco millones de dólares por una unidad no declarada.
Tu defensa es doble y ridículamente barata. Primera: la unidad va en el nombre de la variable.frecuencia_mhz, frecuencia_hz, altitud_km, altitud_m. Segunda: convierte una sola vez, al principio, y trabaja siempre en unidades base del SI. Las conversiones que más aparecen en este dominio:
fHz=fMHz×106hm=hkm×103λ=fHzc,c=299792458m/s
Ejemplo resuelto: la longitud de onda de NOAA-19
La portadora APT de NOAA-19 está en f=137.62 MHz. Convertida a hercios:
fHz=137.62×106=137620000Hz
Y la longitud de onda:
λ=137620000299792458=2.178m
Poco más de dos metros: por eso una antena de media onda para esa banda mide alrededor de 1.09 m por rama y cabe en un balcón. Ahora observa qué pasa si te saltas la conversión y divides directamente por los megahercios: 299792458/137.62≈2178408 m, es decir 2 178 kilómetros de antena. El resultado es tan absurdo que salta a la vista, y ese es justo el punto: los errores de unidades peligrosos no son los de factor un millón, sino los de factor 2 o 3, que parecen razonables y pasan la revisión.
Playground · python
Decibelios sin miedo
El decibelio asusta porque se enseña como fórmula sin explicar qué problema resuelve. El problema es este: en un enlace satelital las potencias abarcan un rango brutal —el transmisor emite watts, la antena receptora capta picowatts— y multiplicar y dividir números con doce órdenes de magnitud de diferencia es incómodo y propenso a errores. La solución es trabajar en logaritmos, donde multiplicar se convierte en sumar.
La definición, para potencias, es:
GdB=10log10(P1P2)
El decibelio es una razón, no una cantidad: dice cuántas veces es una potencia respecto de otra. Los valores que hay que llevar en la cabeza:
Razón P2/P1
dB
Interpretación
0.5
−3.01
Se pierde la mitad de la potencia
1
0
No cambia nada
2
+3.01
Se duplica la potencia
4
+6.02
Cuatro veces
10
+10
Diez veces
100
+20
Cien veces
1000
+30
Mil veces
De ahí sale la aritmética mental del oficio: +3 dB es el doble, +10 dB es diez veces, y se suman. Un amplificador de +23 dB multiplica la potencia por 102.3≈200, porque 23=20+3, o sea 100×2.
dBm: cuando el decibelio sí es una cantidad
Si fijas la referencia P1=1 mW, el decibelio pasa a medir una potencia absoluta y se llama dBm:
PdBm=10log10(1mWPmW)⟺PW=10(PdBm−30)/10
El −30 del exponente es simplemente el paso de miliwatts a watts (1030/10=1000). Referencias que conviene memorizar: 0 dBm =1 mW, 30 dBm =1 W, 60 dBm =1 kW. Y una radio de aficionado de 5 W emite 10log10(5000)=36.99≈37 dBm.
Ejemplo resuelto: la cadena de transmisión es una suma
Esta es la razón por la que todo el mundo usa decibelios. Una cadena de transmisión típica de estación terrena:
Etapa
Aporte
Acumulado
Salida del transmisor
+37.0 dBm
37.0 dBm
Pérdida del cable coaxial (20 m)
−1.8 dB
35.2 dBm
Ganancia de la antena directiva
+16.5 dBi
51.7 dBm
La potencia isótropa radiada equivalente (PIRE) es 51.7 dBm. En watts:
P=10(51.7−30)/10=102.17≈147.9W
Sin decibelios habría que hacer 5.01W×0.661×44.7, tres multiplicaciones con factores de aspecto muy distinto. Con decibelios son dos sumas que se hacen de cabeza en la azotea, con frío y con el rotor girando. La ganancia de una cadena es la suma de las ganancias de sus etapas, y las pérdidas son ganancias negativas. Nada más.
Un apunte de vocabulario que evita confusiones en las hojas de datos: dBi es ganancia de antena respecto de un radiador isótropo ideal, y dBd es respecto de un dipolo de media onda. La conversión es fija: 0 dBd =2.15 dBi. Un fabricante que anuncia "9 dB" sin decir cuál de los dos está siendo, como mínimo, descuidado.
Playground · python
1 de 7
Comprueba la aritmética mental del oficio:
Una cadena aporta +20 dB en una etapa y +3 dB en otra. ¿Por cuánto se multiplica la potencia en total?
Ya sabes calcular. Lo que todavía no sabe hacer tu programa es decidir: descartar un pase que no supera la máscara de elevación, avisar cuando una potencia se sale de rango. Eso es la lección 3.