Download Clase práctica 3

Document related concepts
no text concepts found
Transcript
Programar
Programación imperativa
Debugger
Errores
Introducción a la Computación
Conceptos de Programación
Intérprete PYTHON
M. E. Buemi ([email protected])
Facultad de Ciencias Exactas y Naturales, UBA
23/03/2016
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
Outline
Programar
Python
Programación imperativa
Debugger
Errores
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
¿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
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
¿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.
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
¿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
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
Python
En el curso
I
En este curso vamos a usar Python, pero no es un curso de Python.
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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).
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
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:
1 >>> p r i n t ( ” h o l a mundo \n ” )
2 h o l a mundo
I
el {\n} sirve para pasar al renglón siguiente).
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
Python
Editando texto
I
La otra manera de interactuar con Python es crear un archivo de texto
con los comandos que queremos que ejecute.
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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.
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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).
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
Outline
Programar
Python
Programación imperativa
Debugger
Errores
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
La asignación
Operación para modificar el valor de una variable.
Sintaxis: variable = expresión
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
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.
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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.
1
2
i f A>=6:
p r i n t ( ” Aprobado ” )
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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.
1
2
i f A>=6:
p r i n t ( ” Aprobado ” )
Esta es la versión larga del if:
1
2
3
4
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.
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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.
1
2
i f A>=6:
p r i n t ( ” Aprobado ” )
Esta es la versión larga del if:
1
2
3
4
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.
1
2
3
4
5
6
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
Programar
Programación imperativa
Debugger
Errores
Iterando: while condición lógica
1
2
3
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?
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
Iterando: while condición lógica
1
2
3
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ı́:
1
2
3
4
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
Programar
Programación imperativa
Debugger
Errores
Iterando: while condición lógica
1
2
3
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ı́:
1
2
3
4
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:
1
2
3
4
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
Programar
Programación imperativa
Debugger
Errores
Iterando con for
Es muy similar al while, pero se encarga de incrementar el ı́ndice en un
cierto rango directamente.
1
2
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
Programar
Programación imperativa
Debugger
Errores
Iterando con for
Es muy similar al while, pero se encarga de incrementar el ı́ndice en un
cierto rango directamente.
1
2
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
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
Editando texto
I
La otra manera de interactuar con Python es crear un archivo de texto
con los comandos que queremos que ejecute → script.
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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.
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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
$python3 script1.py es la manera más sencilla de ejecutar el script
recientemente creado (hay otras maneras).
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
Probando código
I
1
2
3
4
5
6
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 )
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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
1
2
3
4
5
6
res = return sum ( 4 , 5 )
print ( res )
I
linea 1 def es palabra reservada, return sum es el nombre del módulo,
x e y son las variables de entrada y c la variable de salida.
I
se ejecuta con python3 return sum.py
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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
1
2
3
4
5
6
res = return sum ( 4 , 5 )
print ( res )
I
linea 1 def es palabra reservada, return sum es el nombre del módulo,
x e y son las variables de entrada y c la variable de salida.
I
se ejecuta con python3 return sum.py
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
Probando más código
I
1
2
3
4
5
6
7
8
9
10
11
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))
aritmetia ( ) )
UBA
Programar
Programación imperativa
Debugger
Errores
Outline
Programar
Python
Programación imperativa
Debugger
Errores
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
Outline
Programar
Python
Programación imperativa
Debugger
Errores
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
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
Programar
Programación imperativa
Debugger
Errores
Intérprete Python
Terminando
I
Con lo que vimos hoy, podemos hacer programas bastante piolas y
practicar bastante.
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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.
Comenzando a programar
UBA
Programar
Programación imperativa
Debugger
Errores
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