Implementando E=mc² en Python
Empecé a tomar vitamina D, magnesio y colágeno hace exactamente una semana. No sé si sea placebo, pero el domingo pasado me empecé a sentir mejor. Tanto, que me dieron ganas de retomar mi curso de Python (la semana pasada estaba muy lejos de querer abrir mi computadora personal... Gracias invierno).
Una de las razones por las que decidí abrir este blog es porque una vez leí que, Richard Feynman (físico teórico reconocido por sus trabajos en física cuántica, premio Nobel de física, etc) decía que para aprender conceptos nuevos, la mejor manera de hacerlo es enseñarle los conceptos a alguien. Al enseñarle a alguien lo que acabas de aprender, puedes verificar dónde hay vacíos de conocimiento que te faltan por rellenar.
Aprender a progrmar en Python puede parecer banal, pero forma parte de mis objetivos de desarrollo profesional, impuesto por mí misma 😄creo que no hay mejor manera de afianzar mis conocimientos que documentar mi proceso de aprendizaje, y compartirlo contigo. Tal vez en unos meses te animes a desarrollar scripts para tu vida personal, uno nunca sabe...
Aunque la persona que inspiró este blog es Richard Feynman, el programa de hoy se trata de una de las fórmulas mas célebres del mundo de la física: E=mc². Gracias a nuestro querido Albert Einstein por conceptualizar esta belleza (aunque yo no sepa muy bien qué es lo que significa). En todo caso, el enunciado del problema Einstein (CS50P - Introduction to Programming with Python) dice así:
Aunque no hayas estudiado física, es posible que hayas oído que E=mc², donde E representa la energía (medida en julios), m representa la masa (medida en kilogramos) y c representa la velocidad de la luz (medida aproximadamente como 300000000 metros por segundo), según Albert Einstein et al. Esencialmente, la fórmula significa que la masa y la energía son equivalentes.
En un archivo llamado einstein.py
, implemente un programa en Python que solicite al usuario la masa como un número entero (en kilogramos) y luego le proporcione el número equivalente de julios como un número entero. Puedes suponer que el usuario introducirá un número entero.
En otras palabras: queremos pedirle como input al usuario que nos dé un numero entero que representara la masa, y mi programa va a hacer el cálculo necesario para dar como output los julios. Es decir, mi programa va a implementar la ecuación de Einstein.
SPOILER ALERT: aquí va la solución que yo decidí implementar:
def main():
user_mass = int(input("m: "))
print("E:", energy(user_mass))
def energy(mass):
return mass * square(300000000)
def square(n):
return n ** 2
main()
A continuación, como siempre, voy a desglosar el programa paso a paso, función por función.
La función principal: main()
def main():
user_mass = int(input("m: "))
print("E:", energy(user_mass))
Esta es la función que coordina todas las demás. Veamos cada línea, paso a paso:
def main():
sirve para definir una función, cuyo nombre es main (principal, en inglés). Los dos paréntesis vacíos indican que no se necesita ninguna información adicional para hacer que la función funcione. Algunas funciones necesitan datos de entrada, que se conocen como argumentos o parámetros. En este caso, main no necesita datos de entrada.
user_mass = int(input("m: "))
user_mass es una variable que yo misma definí. Podemos imaginar que es como una caja donde se va a guardar el valor ingresado por el usuario. input()
es una función preexistente en las librerías de python, que sirve para mostrar un mensaje a la pantalla, solicitando al usuario que ingrese un valor. int()
sirve para convertir el valor introducido por el usuario en un número entero, ya que por defecto, los datos introducidos a través de la función input son texto.
print("E:", energy(user_mass))
la última línea de mi función main() va a permitir mostrar en pantalla el resultado de implementar la función energy(user_mass)
.
La función de Einstein energy(mass)
def energy(mass):
return mass * square(300000000)
Esta es la función que se encarga de implementar la ecuación de Einstein. La palabra return
indica que el cálculo realizado (o sea, el resultado) será devuelto a la parte del programa que llamó la función energy(mass)
. Si una función no tiene un return
, no devolverá nada. Le pedí ayuda a ChatGPT con esta explicación, y me propuso una analogía buenísima:
"Imagina que la función energy() es un cocinero. El return
es el momento en que el cocinero entrega el plato de comida que preparó. Sin return
, el cocinero haría la comida, pero la dejaría en la cocina y nadie la recibiría."
Si te fijas, implementé otra función dentro de la función enery(mass)
: square(n)
. Esta función es necesaria para calcular el cuadrado de 300000000.
def square(n):
return n ** 2
Al final, llamo a la función main()
. Esta última línea le dice al programa que empiece a ejecutar la función main(). Es el "botón de encendido" del programa. En este post ya he explicado a mayor detalle por qué esta última existe, y cuál es el sentido de esa llamada.
¿Qué te enseñó el programa de hoy ?
Que las funciones dividen el programa en "cajas" de código reutilizable.
Que las variables son "contenedores" para almacenar información (muy útil cuando la cosa se empieza a complicar, y necesitas flags para trackear información... Lo veremos más adelante con programas más complejos.).
Que un programa puede solicitar datos al usuario (input) y mostrar resultados (output) al usuario.
Que einstein.py
permite implementar la célebre fórmula de Albert Einstein en python.
¿Viste que programar es como armar un rompecabezas?
🤭