Making Faces con Python
Este es el tercero del Set de Problemas 0 del curso CS50P (Introduction to Computer Science with Python). Para ver el primer programa que ejecuté en Python, haz click aquí. Para ver el segundo problema, que se llama Playback Speed, haz click aquí.
El tercer problema se llama Making Faces, algo así como "Haciendo Caras" en español. Aunque es un programa sencillo, el curso empieza a pedir la implementación de funciones. Más adelante veremos cómo las funciones introducen la noción de orden y estructura a nuestros programas.
El enunciado del ejercicio lo traduje al español, y dice así:
Antes de que existieran los emoji, existían los emoticonos, según los cuales un texto como ":)" era una cara feliz y un texto como ":(" era una cara triste. Hoy en día, los programas suelen convertir los emoticonos en emoji automáticamente.
En un archivo llamado faces.py
, implementa una función llamada convert que acepte una str como entrada y devuelva esa misma entrada con cualquier :) convertido a 🙂 (también conocido como una cara ligeramente sonriente) y cualquier :( convertido a 🙁 (también conocido como una cara ligeramente ceñuda). El resto del texto debe devolverse sin cambios.
Luego, en ese mismo archivo, implemente una función llamada main que pida al usuario una entrada, llame a convert en esa entrada, e imprima el resultado. Eres bienvenido, pero no estás obligado, a preguntar al usuario explícitamente, como pasando una str propia como argumento a input. Asegúrate de llamar a main al final de tu archivo.
Ejemplo: si yo ejecuto mi programa faces.py
:
$ python faces.py
hi :)
El programa debería devolverme lo siguiente:
hi 🙂
Se ve sencillo, porque lo es. Sin embargo, hay un programa escrito en Python que se ejecuta para que ese cambio pueda suceder. Cuando ves las cosas con perspectiva, te das cuenta de que en tu día a día, cuando utilizas tus aparatos electrónicos, se ejecutan millones de programas que hacen que tu experiencia de usuario sea fluida. Cada vez hay menos fricciones en el uso de aplicaciones o aparatos tecnológicos. De vez en cuando es interesante entender una porción mínima de todo lo que sucede detrás de cámaras, como cuando le escribes un mensaje a ese familiar que tienes tiempo sin ver.
Sin tantos rodeos, veamos el programa que implementé para convertir :) en 🙂 y :( en 🙁:
def main():
user_phrase = input()
print(convert(user_phrase))
def convert(faces):
return faces.replace(":)", "🙂").replace(":(", "🙁")
main()
Aunque he introducido por primera vez la utilización de funciones, creo que el programa sigue siendo legible a primera vista. Pero bueno, vamos a decorticarlo paso a paso, porque para eso es este post:
main()
es el punto de partida del programa. Dentro de esta función, tenemos la variable user_phrase, donde le pedimos al usuario que ingrese una frase (ya hemos hablado de la función input()
en los posts anteriores).
Luego, dentro de la función print()
, llamamos a la función convert, que toma el input recibido por el usuario e implementa la funcion convert(faces)
, que esta definida más abajo. Fíjate cómo dentro de mi programa utilizo funciones preexistentes, como print()
e input()
, y me apoyo en ellas para crear nuevas funciones, como convert(faces)
. Puedes darte cuenta de que la función convert la diseñé yo porque le precede la palabra def. Esta palabra clave en Python es utilizada para definir una función.
convert(faces)
utiliza el método preexistente .replace()
para reemplazar :) por 🙂 y :( por 🙁. Esta función devuelve el texto con los cambios realizados. Si te das cuenta, convert(faces)
tiene la palabra "faces" dentro de los paréntesis, mientras que main()
no tiene nada. En posts anteriores también he explicado un poco los argumentos de las funciones. En nuestro caso, la funcion convert(faces)
tiene el argumento faces
porque su objetivo es transformar el texto que recibe del usuario. Podemos decir que faces
actúa como una variable temporal.
Fíjate cómo en la función main, la función convert(user_phrase)
utiliza la variable user_phrase
y no faces. Esto es para indicar que se utilizará el input dentro de la variable user_phrase
para aplicarle la función convert(faces)
.
(Dios mío, espero que se entienda lo que intento explicar.)
Dato interesante sobre este programa: ¿te diste cuenta del contenido de la última línea? Sólo hay un main()
. ¿Por qué?
Bueno, resulta que al preceder nuestras funciones con la palabra def, lo único que hemos hecho es definir las funciones, nada más. Esto quiere decir que si ejecutamos el programa en nuestra terminal, sin la línea del final, no va a pasar absolutamente nada. Es como que le digas a Python: main()
es la definición de carro, y convert(faces)
es la definición de conducir, chao. En ningún momento dijiste en tu programa: ok, ahora conduce el carro.
Python ejecuta el código en el orden en que lo lee, es decir, de arriba hacia abajo. Entonces, primero tuve que definir mis funciones antes de decirle ok, ahora que ya sabes qué hace main()
y qué hace convert(faces)
, ejecuta main()
.
main()
es el punto de inicio del programa. Es así como he logrado que al ejecutar faces.py
, mi programa pueda convertir "Hi :)" en "Hi 🙂".
Adiós por hoy 🙁