Esta sección presenta un contexto muy resumido de Python, algunas de sus ventajas y desventajas, y la configuración usada para producir el material del curso. Además indica cómo interactuarán los programas con la entrada y la salida estándar, y cómo se ejecutarán los programas desde la terminal del sistema. Finalmente, identifica la metodología adoptada durante el curso.
Python fue creado a principios de los años 90 por Guido van Rossum (Stichting Mathematisch Centrum -CWI-, Paises Bajos) como sucesor de un lenguaje llamado ABC. De acuerdo con la página oficial del lenguaje
Python is a programming language that lets you work quickly and integrate systems more effectively.
Técnica y principalmente, Python es:
Python es un lenguaje de programación muy versátil. Sin embargo, como todo lenguaje de programación, Python tiene ventajas y desventajas, las cuales lo hacen un excelente candidato para algunos usos y no tan conveniente para algunos otros usos.
Algunas ventajas de Python son:
3+4
es un programa en PythonAlgunas desventajas de Python son:
La dinámica para la práctica con el material de curso usa los siguientes mecanismos:
Los programas usados para desarrollar el material del curso son los siguientes:
Cada quien podría usar su editor preferido, aunque sugiero fuertemente usar Emacs o Vim. De manera similar, cualquier sistema operativo con un interprete de Python3 debería servir, pero sugiero fuertemente usar alguna versión de Linux.
Las versiones de los programas usados se listan a continuación desde la línea de comandos.
Python:
$ python3 --version
Python 3.3.2
Emacs:
$ emacs --version
GNU Emacs 24.3.1
Copyright (C) 2013 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
Linux:
$ uname -r
3.15.4-200.fc20.x86_64
Un programa que contenga código fuente de Python tendrá la extensión .py
. Por ejemplo, fibonacci.py
, estesies999.py
o tesis.py
.
La ejecución de un programa se puede hacer al menos de dos maneras: invocando directamente al intérprete de Python o delegando esta invocación al sistema operativo. En este curso usaremos la primera opción.
El intérprete de Python se puede usar con o sin interacción. Supongamos que tenemos un programa en el archivo fibonacci.py
y que este se encuentra en el directorio actual. Para ejecutar el programa sin interacción usamos el siguiente comando:
$ python3 fibonacci.py
...
Para ejecutar el programa con interacción usamos el siguiente comando:
$ python3 -i fibonacci.py
...
>>>
La diferencia neta es que con en el modo interactivo, el intérprete ejecuta el programa en el archivo y, una vez termina su ejecución, el usuario puede interactuar con el sistema (por ejemplo, invocando funciones definidas en el programa, etc.).
Los programas usarán la entrada estándar y la salida estándar. Esto quiere decir que el curso NO cubrirá material (por lo menos en esta versión) sobre archivos.
Para interactuar con la entrada estándar usaremos el objeto stdin
del módulo sys
. Entonces, en el encabezado de todo archivo que requiera leer datos de la entrada estándar deberá tener la línea:
from sys import stdin
Suponiendo que la información a ser procesada siempre será suministrada en forma de texto y no como información en formato binario, el objeto stdin
permite leer la entrada estándar caracter por caracter (stdin.read(1)
), línea por línea (stdin.readline()
) o iterando sobre cada una de las líneas de la entrada (stdin.readlines()
).
Así parezca una contradicción, en su mayoría usaremos archivos de texto para probar el código desarrollado. La forma de hacer esto es redireccionando la entrada estándar desde un archivo. Por ejemplo, si nuestro programa en fibonacci.py
requiere información del usuario como un número n
para calcular fib(n)
, entonces podemos guardar todos los números n
que nos interesan en un archivo de texto, digamos fibonacci.in
. Entonces podemos invocar fibonacci.py
con datos en fibonacci.in
de la siguiente manera:
$ python3 fibonacci.py < fibonacci.in
...
El ejecutar un programa, se usará la salida estándar para imprimir los resultados que nos interesen. En particular, dentro del programa se usará el comando print()
. La salida de un programa puede ser muy larga y extensa, y entonces comparar los resultados obtenidos con los esperados puede ser difícil. De forma similar, podemos redireccionar la salida estándar a un archivo. En el ejemplo anterior, podemos guardar los resultados en un archivo, digamos fibonacci.out
:
$ python3 fibonacci.py < fibonacci.in > fibonacci.out
Una vez los resultados de una ejecución estén en un archivo, estos se puede comparar automáticamente con los resultados esperados, suponiendo que estos están guardados en un archivo de texto (y con el formato esperado), usando el programa diff
desde la línea de comandos. Por ejemplo, podemos comparar el archivo fibonacci.out
con un hipotético archivo correct.out
que guarda las respuestas correctas para los datos en fibonacci.in
:
$ diff fibonacci.out correct.out
Este curso está diseñado para "aprender haciendo" y no pretende reinvetar la rueda.
Para aprender haciendo, abordaremos problemas pequeños del estilo de programación competitiva en los cuales se presenta una situación problemática que se puede resolver usando un algoritmo, se describe el formato de los datos de entrada y el formato de los datos de salida. Para cada problema abordado o asignado habrán casos de prueba disponibles en el format test.in
y test.out
, con los cuales quien siga el curso puede validar sus programas. La intención es que los programas implementados sean correctos: un programa correcto si al ser probado con entradas en test.in
genera una salida idéntica a test.out
. Cuando sea necesario para resolver un problema, se sugerirá material complementario.
Este curso no pretende reinventar la rueda en el sentido en que habrán numerosas referencias a documentación, tutoriales y ejemplos en línea cuando sea necesario. Por ejemplo, para aprender los constructos básicos del lenguaje, el curso directamente usa material de terceros. En particular, gran parte del material usado a modo de referencia hace parte del tutorial del lenguaje, que a su vez hace parte de la documentación oficial del lenguaje.
Los problemas algorítmicos abordados en el curso son parte de un banco de problemas de programación competitiva. Usaremos problemas cuyos enunciados se encuentran en UVa Online Judge, pero las implementaciones en Python no serán validadas contra el robot de juzgamiento allí disponible dado que Python no ha sido aún adoptado por este sitio como lenguaje de programación de competencia. En internet pueden encontrar muchos sitios que aceptan Python como lenguaje de programación (TopCoder, CodeForces, SphereOnlineJudge, por mencionar algunos).