Clase2

716 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
716
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
29
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Clase2

  1. 1. Algoritmos y Programación Clase 2: Repaso PyGame - Recursión www.unaj.edu.ar
  2. 2. Algoritmos y Programación Temario • Repaso de PyGame – Funciones básicas – Animaciones y Juegos sencillos – Manejo de eventos • Recursión – Definicion de Recursion. – Pila de Ejecucion. – Backtracking – Recursion infinita. – Recursion vs Iteracion. www.unaj.edu.ar
  3. 3. Algoritmos y Programación Repaso: PyGame www.unaj.edu.ar
  4. 4. Algoritmos y Programación ¿Qué es PyGame? • PyGame es un conjunto de módulos escritos en Python diseñados para escribir juegos en dos dimensiones. • Incluye gráficos y bibliotecas de sonido diseñadas para ser utilizadas directamente bajo Python. • No es nuevo: desde año 2000... • Es portable y libre. • Url: http://www.pygame.org/ www.unaj.edu.ar
  5. 5. Algoritmos y Programación Modulos PyGame • Vamos a ver primero algunos módulos para realizar gráficos sencillos. – Cómo crear una ventana y dibujar luego en ella. • PyGame provee varios módulos para representar líneas, polígonos, círculos, etc. • Para utilizarlos, debemos importar la librería PyGame y otras más que serán necesarias: import pygame import pygame import os import os Import sys Import sys from pygame.locals import ** from pygame.locals import www.unaj.edu.ar
  6. 6. Algoritmos y Programación Inicialización • Luego de importar las librerías, hay que inicializar el módulo: pygame.init() pygame.init() • ¿Abrimos una ventana? ventana = pygame.display.set_mode((ancho,alto)) ventana = pygame.display.set_mode((ancho,alto)) pygame.display.set_caption(‘TítuloVentana) pygame.display.set_caption(‘TítuloVentana) www.unaj.edu.ar
  7. 7. Algoritmos y Programación Ventanas www.unaj.edu.ar
  8. 8. Algoritmos y Programación El módulo Draw • Permite trabajar con las siguientes formas: rect polygon circle rect polygon circle ellipse arc ellipse arc line lines line lines aaline aaline aalines aalines • Los dibujos se realizan sobre una superficie y todas las funciones de dibujo se limitan al área de recorte para esa superficie. • Generalmente las funciones contienen un argumento width que representa el tamaño del borde del dibujo. Si tiene valor 0, la función pintará la figura entera como sólida. • La mayoría de las funciones aceptan un argumento color, que en general es una terna o tupla RGB. www.unaj.edu.ar
  9. 9. Algoritmos y Programación ¿Y estas funciones? • ¿Se acuerdan? – copy(): Realizamos una copia de la superficie. En este caso, de la ventana – blit(): Nos permite representar un objeto sobre una superficie. • ¿Para qué las usábamos? www.unaj.edu.ar
  10. 10. Algoritmos y Programación Imagenes en PyGame Cargando imágenes ... • pygame.image.load(filename): return Surface • pygame.image.save(Surface, filename): return None www.unaj.edu.ar
  11. 11. Algoritmos y Programación ¿Nos vamos al espacio? www.unaj.edu.ar
  12. 12. Algoritmos y Programación Eventos El manejo de eventos está sólo aquí (QUI www.unaj.edu.ar
  13. 13. Algoritmos y Programación Manejo de Eventos import pygame, sys, os from pygame.locals import * . . . . while True: events=pygame.event.get() for event in events: Este bucle sencillo ejecuta el if event.type == QUIT: programa hasta que el evento pygame.quit() QUIT se produzca. sys.exit() www.unaj.edu.ar
  14. 14. Algoritmos y Programación Manejo de Eventos Existe un módulo especial para manejar eventos. Los eventos se manejan a través de una cola de eventos. Se manejan como objetos que contienen un tipo de evento y un conjunto de datos de sólo lectura. Funciones get y poll: Obtienen eventos de la cola y los elimina. • pygame.event.get(): return EventList • pygame.event.poll(): return Event www.unaj.edu.ar
  15. 15. Algoritmos y Programación Manejo de Eventos Event.type: Eventos relacionados al mouse: MOUSEMOTION – MOUSEBUTTONUP – MOUSEBUTTONDOWN - Eventos relacionados al teclado: KEYDOWN – KEYUP Eventos relacionados al Joystick JOYAXISMOTION – JOYBALLMOTION – JOYHATMOTION - JOYBUTTONUP - JOYBUTTONDOWN Eventos generales QUIT – ACTIVEEVENT - VIDEORESIZE - VIDEOEXPOSE Se pueden generar eventos definidos por el usuario. www.unaj.edu.ar
  16. 16. Algoritmos y Programación ¿Nos vamos al espacio?(parte II) Establecemos la sup a mover En nuestro caso, el que delimita al cohete Obtenemos los eventos de la cola de eventos event.type:KEYDOWN / KEYUP / etc event.key: código tecla Muestro las imágenes y actualizo el rectángulo que contiene al cohete www.unaj.edu.ar
  17. 17. Algoritmos y Programación Resumiendo Evento atributos QUIT noneResumiendo... ACTIVEEVENT gain, state pygame.event.get() o KEYDOWN unicode, key, modpygame.event.poll() KEYUP key, moden un loop .... MOUSEMOTION pos, rel, buttons event.type MOUSEBUTTONUP pos, button Dependiendo del MOUSEBUTTONDOWN pos, button evento: JOYAXISMOTION joy, axis, value JOYBALLMOTION joy, ball, rel JOYHATMOTION joy, hat, value JOYBUTTONUP joy, button JOYBUTTONDOWN joy, button VIDEORESIZE size VIDEOEXPOSE none USEREVENT code www.unaj.edu.ar
  18. 18. Algoritmos y Programación ¿Llegamos a la luna? Textos ... fuente=pygame.font.SysFont(None, 48) texto=fuente.render( Llegaste! , True, (255,255,255), (255,0,0))) www.unaj.edu.ar
  19. 19. Algoritmos y Programación Recursion www.unaj.edu.ar
  20. 20. Algoritmos y Programación Conceptos • La recursión es una técnica de programación muy poderosa, en la cual una función realiza llamadas a misma en pos de resolver un problema. • Razones para su uso: – Problemas “casi” irresolubles con las estructuras iterativas. – Soluciones elegantes. – Soluciones más simples. www.unaj.edu.ar
  21. 21. Algoritmos y Programación Identificación de casos • En las funciones recursivas bien definidas se puede identificar dos elementos: – Caso Base: Se da cuando el calculo es tan simple que se puede resolver directamente sin necesidad de hacer una llamada recursiva. – Caso Recursivo: aquí la función realiza algunas operaciones con las que se reduce la complejidad del problema y luego realiza un llamado a si misma. www.unaj.edu.ar
  22. 22. Algoritmos y Programación Comenzando... • Codificar una función que tome un parámetro numérico y que cuente hacia atrás comenzando desde el numero ingresado. www.unaj.edu.ar
  23. 23. Algoritmos y Programación Resolución en Python Caso Base: Cuando el parametro es 0, la función imprime “Fin!” y termina. Caso Recursivo: Cuando el parametro distinto de 0, la función imprime el parametro y vuelve a invocar a la función con el parametro disminuido en 1. www.unaj.edu.ar
  24. 24. Algoritmos y Programación Ejecución Resultado de ejecutar la función recursiva enviandole como parametro el numero 3. www.unaj.edu.ar
  25. 25. Algoritmos y Programación Pila de Ejecución Imprime 3 en la consola y realiza un llamado recursivo con n-1=3-1=2 cuenta_atras n=3 www.unaj.edu.ar
  26. 26. Algoritmos y Programación Pila de Ejecución Imprime 2 en la consola y realiza un llamado recursivo con n-1=2-1=1 cuenta_atras n=2 cuenta_atras n=3 www.unaj.edu.ar
  27. 27. Algoritmos y Programación Pila de Ejecución cuenta_atras Imprime 1 en la consola n=1 y realiza un llamado recursivo con n-1=1-1=0 cuenta_atras n=2 cuenta_atras n=3 www.unaj.edu.ar
  28. 28. Algoritmos y Programación cuenta_atras n=0 Pila de Ejecución cuenta_atras Imprime “Fin!” y termina la funcion. n=1 cuenta_atras n=2 cuenta_atras n=3 www.unaj.edu.ar
  29. 29. Algoritmos y Programación cuenta_atras n=0 Pila de Ejecución cuenta_atras Cuando concluye el llamado • recursivo la ejecucion se retoma en este punto n=1 • cuenta_atras n=2 cuenta_atras n=3 www.unaj.edu.ar
  30. 30. Algoritmos y Programación Pila de Ejecución • • Finaliza la ejecución del programa. www.unaj.edu.ar
  31. 31. Algoritmos y Programación Backtracking • El backtracking (ó vuelta atrás) es una estrategia para solucionar problemas utilizando algoritmos recursivos. • El backtracking va construyendo soluciones parciales a medida que progresa la ejecución del algoritmo recursivo. Estas soluciones parciales van construyendo una solución completa. www.unaj.edu.ar
  32. 32. Algoritmos y Programación Backtracking • El algoritmo tiene éxito si, procediendo de esta forma, se puede encontrar una solución. – En este caso el algoritmo puede bien detenerse (si solo se necesita una solución) o bien seguir buscando soluciones alternativas (si se necesitan todas). • Por otra parte, el algoritmo falla si en alguna etapa la solución parcial construida hasta el momento no se puede completar. – En tal caso, el recorrido vuelve atrás eliminando sobre la marcha los elementos que se hubieran añadido en cada etapa. www.unaj.edu.ar
  33. 33. Algoritmos y Programación Ejemplo con backtracking • Codificar una función que tome una lista de números y retorne una tupla en la cual contenga en la primera posición el promedio y en la segunda los números de la lista mayores al promedio. www.unaj.edu.ar
  34. 34. Algoritmos y Programación mayores_al_promedio mayores_al_promedioEjemplo con backtracking lista=[] lista=[4] suma_total=10 suma_total=6 cantidad=4 cantidad=3 mayores_al_promedio lista=[3,4] suma_total=3 cantidad=2 mayores_al_promedio lista=[2,3,4] suma_total=1 cantidad=1 mayores_al_promedio lista=[1,2,3,4] suma_total=0 cantidad=0 www.unaj.edu.ar
  35. 35. Algoritmos y Programación mayores_al_promedio mayores_al_promedioEjemplo con backtracking lista=[] lista=[4] Retorna una tupla con el suma_total=10 promedio suma_total=6 y una lista vacia. cantidad=4 cantidad=3 mayores_al_promedio lista=[3,4] suma_total=3 cantidad=2 mayores_al_promedio lista=[2,3,4] suma_total=1 cantidad=1 mayores_al_promedio lista=[1,2,3,4] suma_total=0 cantidad=0 www.unaj.edu.ar
  36. 36. Algoritmos y Programación mayores_al_promedioEjemplo con backtracking lista=[4] suma_total=6 cantidad=3Cuando concluye el llamado mayores_al_promediorecursivo la ejecucion se retoma en lista=[3,4]este punto suma_total=3 cantidad=2 mayores_al_promedio lista=[2,3,4] Retorna una tupla con el promedio suma_total=1 y la lista [4]. cantidad=1 mayores_al_promedio lista=[1,2,3,4] suma_total=0 cantidad=0 www.unaj.edu.ar
  37. 37. Algoritmos y ProgramaciónEjemplo con backtrackingCuando concluye el llamado mayores_al_promediorecursivo la ejecucion se retoma en lista=[3,4]este punto suma_total=3 cantidad=2 mayores_al_promedio lista=[2,3,4] Retorna una tupla con el promedio suma_total=1 y la lista [4]. [4,3]. cantidad=1 mayores_al_promedio lista=[1,2,3,4] suma_total=0 cantidad=0 www.unaj.edu.ar
  38. 38. Algoritmos y ProgramaciónEjemplo con backtrackingCuando concluye el llamadorecursivo la ejecucion se retoma eneste punto mayores_al_promedio lista=[2,3,4] Retorna una tupla con el promedio suma_total=1 y la lista [4]. [4,3]. cantidad=1 mayores_al_promedio lista=[1,2,3,4] suma_total=0 cantidad=0 www.unaj.edu.ar
  39. 39. Algoritmos y ProgramaciónEjemplo con backtrackingCuando concluye el llamadorecursivo la ejecucion se retoma eneste punto Retorna una tupla con el promedio y la lista [4]. [4,3]. mayores_al_promedio lista=[1,2,3,4] suma_total=0 cantidad=0 www.unaj.edu.ar
  40. 40. Algoritmos y ProgramaciónEjemplo con backtracking Finaliza el programa e imprime como resultado (2, [4,3]) www.unaj.edu.ar
  41. 41. Algoritmos y Programación Recursividad infinita • Si una función recursiva no alcanza nunca el caso base, seguirá haciendo llamadas recursivas para siempre y nunca terminaría. Esta circunstancia se conoce como recursion infinita. • Un programa con recursividad infinita no se ejecuta realmente para siempre. Python informara con un mensaje de error cuando se alcance el nivel máximo de recursividad. www.unaj.edu.ar
  42. 42. Algoritmos y Programación Ejemplos Ejemplo de una función que al no definir un caso base y ser def recurre(): invocada, esta no finaliza nunca. recurre() En este caso se llama a la función con un dato en el parametro que hace que nunca se alcance el caso base. www.unaj.edu.ar
  43. 43. Algoritmos y Programación Calculando el factorial • Se necesita un función en Python para calcular el numero factorial de un numero pasado por parámetro. • La definición matemática del factorial es la siguiente: www.unaj.edu.ar
  44. 44. Algoritmos y Programación Alternativas • Existen dos alternativas para resolver el problema del calculo del factorial: – Codificar una función iterativa. – Codificar una función recursiva. www.unaj.edu.ar
  45. 45. Algoritmos y Programación Versiones del Factorial Versión Iterativa Versión Recursiva www.unaj.edu.ar
  46. 46. Algoritmos y Programación Comparación • Ahora si comparamos las dos alternativas: – ambas están basadas en una estructura de control. – ambas involucran repetición. – ambas incluyen una condición para terminar. – Si no se tiene cuidado en ambas se puede incurrir en un loop infinito. www.unaj.edu.ar
  47. 47. Algoritmos y Programación ¿Recursión o Iteración? • Ventajas de la Recursión ya conocidas: – Soluciones simples, claras. – Soluciones elegantes. – Soluciones a problemas complejos. www.unaj.edu.ar
  48. 48. Algoritmos y Programación ¿Recursión o Iteración? • Desventajas de la Recursión: INEFICIENCIA – Sobrecarga asociada con las llamadas recursivas, una llamada puede generar un gran numero de llamadas recursivas.(factorial_recursivo(n) genera n llamadas recursivas) • ¿La claridad compensa la sobrecarga? • El valor de la recursividad reside en el hecho de que se puede usar para resolver problemas sin fácil solución iterativa. www.unaj.edu.ar

×