Introducción a la Computación Conceptos de Programación Intérprete PYTHON M. E. Buemi (mebuemi@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, UBA 25/03/2015 Comenzando a programar UBA ¿Qué es programar? Un algoritmo es una lista finita de intrucciones (algo ası́ como una receta de cocina), consiste de: I Instrucciones que indican qué hacer. I Valores con los cuales se trabaja (parámetros). I Variables a las cuales se les asigna un valor y a las cuales se le realizan operaciones (i.e. sumar, restar). Los programas se escriben en un lenguaje que una computadora pueda entender (i.e. ejecutar). Comenzando a programar UBA Lenguajes de alto nivel I Se refiere a las construcciones que son relativamente fáciles de entender por un humano. I Ejemplos de lenguajes: Perl, Matlab, Java, C, C++, C#, Visual Basic, Python, Scheme, Lisp, Pascal, Fortran y la lista sigue! I Hay algunos que han sido creados especı́ficamente para ciertas aplicaciones, haciendo más fácil la vida para aquellos que lo necesitan (por ejemplo Fortran para las aplicaciones numéricas). I Este tipo de lenguajes es independiente de la máquina o arquitectura en la cual funciona (en realidad, en algunos casos se usan trucos especı́ficos para obtener mejoras en el desempeño). I Desde el punto de vista teórico, lo que se puede computar con cualquier lenguaje de estos es “lo mismo”. Sin embargo, las computadoras no entienden este tipo de lenguajes directamente. Comenzando a programar UBA ¿Cómo se ejecuta un programa? Los lenguajes de alto nivel necesitan ser traducidos a lo que una computadora entiende: lenguaje de máquina. Para esto, hay dos opciones: 1. Compilador: es un programa que toma código fuente de alto nivel y lo convierte en lenguaje de máquina. 2. Intérprete: es un programa que convierte cada instrucción en lenguaje de alto nivel a una serie de instrucciones de máquina y la ejecuta. Esto hace falta porque una computadora (i.e. el procesador) sólo puede procesar lenguaje de máquina: I El lenguaje de máquina consiste en un conjunto de instrucciones que un procesador puede ejecutar directamente. I Cada instrucción se codifica como un patrón de 1’s y 0’s que el procesador (en realidad, el ingeniero que lo diseña) vincula con la operación a realizar (por ejemplo: add, substract, read, store, etc.) Comenzando a programar UBA Los lenguajes de programación Normalmente, obtener una solución computacional está determinado por: I Tiempo que se tarda en escribir un programa I Tiempo de humanos (¡que sepan programar!) I Matlab, Python I Tiempo que tarda en correr el programa I Tiempo de computadora (también del usuario que espera a que termine) I C, Fortran Al momento de elegir una herramienta o lenguaje de programación hay que pesar estos dos aspectos. Tener en cuenta también Java y C# que están a medio camino. Comenzando a programar UBA Python En el curso I En este curso vamos a usar Python, pero no es un curso de Python. I Es una lenguaje interpretado (Hay un programa traduciendo cada comando que se introduce a un montón de operaciones en lenguaje de máquina). Python tiene las siguientes caracterı́sticas: I I I I I I I Gratis Multi-plataforma Se usa por todos lados Muy bien documentado Con muy buen nivel de soporte y comunidad de usuarios Para aprender Python (o cualquier otro lenguaje de programación), hay que perder tiempo. Hay mucha información en Internet, pero hasta que uno no se ensucia los dedos, la cosa no avanza No hay recetas mágicas! Comenzando a programar UBA Python El intérprete I La opción inicial para usar Python es utilizar directamente el intérprete. I Directamente se tipean los comandos y se obtiene la respuesta. I Para ver si todo funciona correcto, se puede hacer: >>> p r i n t ( ” h o l a mundo \n ” ) h o l a mundo I el {\n} sirve para pasar al renglón siguiente). Comenzando a programar UBA Python Editando texto I La otra manera de interactuar con Python es crear un archivo de texto con los comandos que queremos que ejecute. I El intérprete va a ir leyendo el archivo y ejecutando de a un comando por vez. I Esto termina cuando se han ejecutado todos los comandos o cuando explota por haber encontrado un error. I python mi super programa.py: es la manera más sencilla de ejecutar el script recientemente creado (hay otra maneras que vamos a ir aprendiendo con el tiempo). Se puede usar el editor de texto que más les guste. I I I I I I Los freaks usan vi. Funciona en una consola. Si no hay otra cosa, podes arreglarte con nano. Funciona en consola. El mcedit es un editor muy completo, si sos lo suficientemente viejo y nerd, puede que te traiga recuerdos. También funciona en consola. En el entorno gnome, creo que geany está bueno. Si tenes KDE o cosas de KDE instalado, podes usar kate o kwrite. Comenzando a programar UBA Programación imperativa Modelo de cómputo Un programa consiste de órdenes (o bien “instrucciones”) que indican cómo operar con los datos, que están alojados en la memoria. Comenzando a programar UBA Programación imperativa Entidad fundamental: variables I Corresponden a posiciones de memoria (RAM) I Cambian explı́citamente de valor a lo largo de la ejecución de un programa. Operación fundamental: asignación I Cambiar el valor de una variable. I Una variable no cambia a menos que se cambie explı́citamente su valor, a través de una asignación. Se usa el término función en un sentido amplio. I Las “funciones” pueden devolver más de un valor. I Hay nuevas formas de pasar argumentos. I Las funciones no se consideran como valores, y no hay mecanismos para realizar operaciones entre funciones (o bien es muy limitado). Comenzando a programar UBA La asignación Operación para modificar el valor de una variable. Sintaxis: variable = expresión Efecto de la asignación: 1. Se evalúa la expresión de la derecha y se obtiene un valor. 2. El valor obtenido se copia en el espacio de memoria de la variable. Ejemplos: I x=1 I y=x I x=x+x I x=funcion(z+1,3) I x= x*x + 2*y + z; Se pueden poner comentarios se usa el numeral (#). Es una buena práctica de programación que vamos a incentivar. Comenzando a programar UBA Tipos I Todos los valores tienen un tipo de datos asociado. I Las variables no tienen un tipo de datos, depende del valor que almacena. I Python determina automáticamente el tipo de las variables. Los tipos básicos (i.e. predefinidos) son: I I I I Números: enteros (int), con coma (float), complejos(complex, por ejemplo 2 + 6j). Cadenas de texto o cadenas de caracteres (se declaran encerrando los caracteres entre comillas dobles) Valores booleanos: True (verdadero) y False (falso). Se puede determinar el tipo de datos asociado a un valor o a una variable con la función type. Comenzando a programar UBA Operaciones básicas con números I Suma (+), r = 3 + 2 I Resta (-), r = 4 - 7 I Negación (-), r = -r I Multiplicación (*), r = 2 * 6 I Potencia (**), r = 2 ** 6 I División (/), r = 3.5 / 2 I División entera (//), r = 3.5 // 2 I Módulo o resto ( %), r = 7 % 2 Comenzando a programar UBA Operaciones booleanas I Se cumple A y B: and, True and False I Se cumple A o B: or, True or False I Negación: not, not True I Igualdad (==), r = 5 == 3 I No son iguales (!=), r = 5!= 3 I Menor (<), r = 5 < 3 I Mayor (>), r = 5 > 3 I Mayor o Igual (>=) / Menor o igual (<=), r = 5 <= 5 Comenzando a programar UBA Estructuras de control I Condicional (if ... else ...) I Ciclos (for, while ...) I Funciones I Retorno de control (return) Aunque muchos lenguajes imperativos permiten implementar funciones recursivas, el mecanismo fundamental de cómputo no es la recursión. Comenzando a programar UBA Estructura de control if condición lógica, if condición lógica... else, if condición lógica ... elseif condición lógica ...else Es la estructura más sencilla para hacer un programa interesante. i f A>=6: p r i n t ( ” Aprobado ” ) Esta es la versión larga del if: i f A>=6: p r i n t ( ” Aprobado ” ) else : p r i n t ( ” Coloquio o Desaprobado ” ) Ojo! La manera de indicar bloques de instrucciones es por medio de la tabulación. i f A>=6: p r i n t ( ” Aprobado ” ) e l i f A>=4: p r i n t ( ” Coloquio ” ) else : p r i n t ( ” Hasta e l Pr \ ’ oximo C u a t r i m e s t r e ” ) Comenzando a programar UBA Iterando: while condición lógica contador = 0 while c o n t a d o r < 1 8 : p r i n t ( ” Vamos por , ” + s t r ( c o n t a d o r ) ) ¿Cuál es la salida de este código? Y sı́, me habı́a olvidado de incrementar el contador, deberı́a ser ası́: contador = 0 while c o n t a d o r < 1 8 : p r i n t ( ” Vamos por , ” + s t r ( c o n t a d o r ) ) c o n t a d o r = c o n t a d o r +1 La tabulación puede ser una fuente de errores muy molestos, hay que tener mucho cuidado, la versión que termina es: contador = 0 while c o n t a d o r < 1 8 : p r i n t ( ” Vamos por , ” + s t r ( c o n t a d o r ) ) c o n t a d o r = c o n t a d o r +1 Comenzando a programar UBA Iterando con for Es muy similar al while, pero se encarga de incrementar el ı́ndice en un cierto rango directamente. f o r c o n t a d o r i n range ( 1 , 100 , 1 ) : hacemos algo ( c o n t a d o r ) La función range te devuelve un rango desde 1 hasta 100 con un salto de 1. Ya vamos a ver cosas más divertidas con estas estructuras. Comenzando a programar UBA Iterando con for Es muy similar al while, pero se encarga de incrementar el ı́ndice en un cierto rango directamente. f o r c o n t a d o r i n range ( 1 , 100 , 1 ) : hacemos algo ( c o n t a d o r ) La función range te devuelve un rango desde 1 hasta 100 con un salto de 1. Ya vamos a ver cosas más divertidas con estas estructuras. Comenzando a programar UBA Usando el intérprete Python En la terminal escribo el comando: python3 Puedo comenzar a ejecutar instrucciones python en la lı́nea de comandos. en el caso de las estructuras de control tengo que identar. Comenzando a programar UBA Editando texto I La otra manera de interactuar con Python es crear un archivo de texto con los comandos que queremos que ejecute → script. I El intérprete va a ir leyendo el archivo y ejecutando de a un comando por vez. I Esto termina cuando se ejecutaron todos los comandos o cuando explota por haber encontrado un error. I I $python3 script1.py es la manera más sencilla de ejecutar el script recientemente creado (hay otras maneras). Se puede usar el editor de texto que más les guste. I I I I I I La gente con más problemitas usa vi. Funciona en una consola. Los que tienen un grado de problemitas intermedio pueden usar el vim o el emacs. También son de consola. Si no hay otra cosa, el nano va. Otro más de consola. El mcedit es un editor muy completo, si sos lo suficientemente viejo y nerd, puede que te traiga recuerdos. También funciona en consola. En el entorno GNOME, geany, gedit, etc. En KDE, kate o kwrite. Comenzando a programar UBA Editando funciones I La otra manera de interactuar con Python es crear una función que puede tener variables de entrada y resultado/s de salida. Comenzando a programar UBA Probando código I Si tenemos un archivo con una función. def r e t u r n s u m ( x , y ) : c = x + y return c res = return sum ( 4 , 5 ) print ( res ) I linea 1 return sum(x,y) def es palabra reservada, return sum es el nombre del módulo, c es la variable de entrada I se ejecuta con python3 return sum.py Comenzando a programar UBA Probando más código I Caso en que el número de entradas no puede determinarse *args. def m e d i a a r i t m e t i c a ( * args ) : sum = 0 f o r x i n args : sum += x r e t u r n sum print ( media print ( media print ( media print ( media print ( media Comenzando a programar aritmetica (45 ,32 ,89 ,78)) aritmetica (8989.8 ,78787.78 ,3453 ,78778.73)) aritmetica (45 ,32)) aritmetica (45)) aritmetica ( ) ) UBA Usando el debugger I Lo invocamos con python3 -m pdb mi super programa.py. I En lugar de ejecutar el script, se va a parar en la primera lı́nea y nos va a mostrar el prompt del pdb. (Pdb) Algunos comandos: I I I I I I n o next: ejecuta una instrucción. p, pp o print: imprime en pantalla el valor actual de un sı́mbolo. l o list: muestra la lı́nea actual que está siendo ejecutada junto con algunas lı́neas extras de contexto. c o continue: ejecuta hasta que finalice el programa o hasta que se encuentre con un breakpoint. b o break: pone un breakpoint en el punto especificado del programa (puede ser una lı́nea de código o una función). Comenzando a programar UBA Mensajes de error File SyntaxError.py, line 1 print "Hola, mundo" ^ SyntaxError: invalid syntax I Los mensajes de error de Python se muestran en tiempo de ejecución utilizando un mecanismo llamado excepciones. I La información que podemos ver es el lugar en donde ocurrió el error, el tipo de excepción, y un mensaje de error. I Las excepciones son formas de reportar errores que el programador puede utilizar y manejar (o atrapar) de alguna manera. Ahora no nos vamos a meter con esto. I Si nadie hace nada con ellas, el programa explota como se ve en el ejemplo. Comenzando a programar UBA Más mensajes de error Traceback (most recent call last): File "./exp.py", line 120, in <module> eval(sys.argv[1])(*sys.argv[2:]) File "./exp.py", line 91, in biglans_all_metrics __generic_all_metrics(’biglans.ns’, size) File "./exp.py", line 27, in __generic_all_metrics random_costs_all = [__computecost(na, na.getRandomPermutation(size_int)) for x in xrange(size_int**2)] File "./emulabParser.py", line 230, in getRandomPermutation return random_permutation(self.nodes, n) File "./emulabParser.py", line 82, in random_permutation return tuple(random.sample(pool, r)) File "/usr/lib/python2.7/random.py", line 322, in sample raise ValueError("sample larger than population") ValueError: sample larger than population Comenzando a programar UBA Intérprete Python Algunos comandos para acortar camino CTRL + L limpiar comandos de python CTRL + D o quit() o exit() salir del intérprete a la terminal CTRL + Z fuerza a salir del intérprete. Comenzando a programar UBA Intérprete Python Terminando I Con lo que vimos hoy, podemos hacer programas bastante piolas y practicar bastante. I La semana que viene vamos a ver: funciones y colecciones. I Ahora hay que ensuciarse los dedos y empezar a practicar Comenzando a programar UBA