Clase 17: Programaci On Orientada A Objetos - Department Of Computer .

Transcription

Pontificia Universidad Católica de ChileEscuela de Ingenierı́aDepartamento de Ciencias de la ComputaciónClase 17: Programación Orientada aObjetosRodrigo Toro Icarte (rntoro@uc.cl)IIC1103 Introducción a la Programación - Sección 518 de Mayo, 2015

Clase pasadaPOOEjemploEjerciciosClases pasadasHemos visto distintos tipos de datos en Python:int, float, complex, bool, string, list y tuple. de hecho podemos saber la clase de un objeto con elcomando type().2

Clase pasadaPOOEjemploEjerciciosClases pasadasHemos visto distintos tipos de datos en Python:int, float, complex, bool, string, list y tuple. de hecho podemos saber la clase de un objeto con elcomando type().123a 4.5; b " 4.5 "c [1 ,2 ,3 ,4]d (1 ,2 ,3 ,4)45678print ( type ( a ) )print ( type ( b ) )print ( type ( c ) )print ( type ( d ) )#### class class class class’ float ’ ’ str ’ ’ list ’ ’ tuple ’ 2

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a ObjetosEn computación aspiramos a modelar el mundo para solucionarproblemas reales.3

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a ObjetosEn computación aspiramos a modelar el mundo para solucionarproblemas reales.3

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a Objetos. o para matar el tiempo.4

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a Objetos. o para matar el tiempo.4

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a ObjetosQueremos modelar el mundo.5

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a ObjetosQueremos modelar el mundo.Miren a su alrededor. ¿qué ven?5

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a Objetos“Hay Objetos que pertenecen a cierta Clase”.6

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a Objetos“Hay Objetos que pertenecen a cierta Clase”.Ejemplos:PuertaVentanaPlumónPersona6

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a Objetos“Hay Objetos que pertenecen a cierta ajemos un poco con la clase persona.6

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a ObjetosEjercicio: Diseñe un mini-siding, donde se pueda agregarnotas a cada estudiante y calcular promedios.7

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a ObjetosEjercicio: Diseñe un mini-siding, donde se pueda agregarnotas a cada estudiante y calcular promedios.Solución: Tenemos que manejar una lista de estudiantes.¿Cómo los representamos?7

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a ObjetosEjercicio: Diseñe un mini-siding, donde se pueda agregarnotas a cada estudiante y calcular promedios.Solución: Tenemos que manejar una lista de estudiantes.¿Cómo los representamos?Opción: Con tuplas (nombre, apellido, n de alumno, notas)1234estudiantes []estudiantes . append (( ’ Juan ’ , ’ Á guila ’ , ’ 14000000 ’ ,[]) )estudiantes . append (( ’ Aldo ’ , ’ Verri ’ , ’ 14000001 ’ ,[]) )estudiantes . append (( ’ Mar ı́ a ’ , ’ Pinto ’ , ’ 14000002 ’ ,[]) )7

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a Objetos1234estudiantes []estudiantes . append (( ’ Juan ’ , ’ Á guila ’ , ’ 14000000 ’ ,[]) )estudiantes . append (( ’ Aldo ’ , ’ Verri ’ , ’ 14000001 ’ ,[]) )estudiantes . append (( ’ Mar ı́ a ’ , ’ Pinto ’ , ’ 14000002 ’ ,[]) )56789# Agrego notasestudiantes [0][3]. append (6.5)estudiantes [0][3]. append (7.0)estudiantes [0][3]. append (6.7)10111213estudiantes [1][3]. append (3.0)estudiantes [1][3]. append (2.7)estudiantes [1][3]. append (3.8)14151617estudiantes [2][3]. append (5.7)estudiantes [2][3]. append (7.0)estudiantes [2][3]. append (6.2)8

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a Objetos19202122# Muestro promediosfor e in estudiantes :promedio sum ( e [3]) / len ( e [3])print ( e [1] , " \ t " , ’ %0.2 f ’% promedio )2324252627# Salida :# Á guila# Verri# Pinto 6.73 3.17 6.309

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a Objetos¿No les parecen incómodas las tuplas?10

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a Objetos¿No les parecen incómodas las tuplas?Debemos recordar el significado de cada id.Con muchos atributos equivocarse con los id es fácil.No podemos cambiar los valores de los atributos.Se pueden agregar tuplas en orden incorrecto.10

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a Objetos¿No les parecen incómodas las tuplas?Debemos recordar el significado de cada id.Con muchos atributos equivocarse con los id es fácil.No podemos cambiar los valores de los atributos.Se pueden agregar tuplas en orden incorrecto. Serı́a útil si Python nos permitiera crear nuestros propiostipos de datos.10

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a ObjetosPython nos permite definir nuestras propias clases.Sintaxisclass nombre clase:bloque codigo clase11

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a ObjetosPython nos permite definir nuestras propias clases.Sintaxisclass nombre clase:bloque codigo claseAhora podemos crear un objeto del tipo nombre clase.Sintaxisvariable nombre clase()11

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a ObjetosEjemplo:123# Defino el tipo de dato ( clase ) " persona "class persona :pass45678# Creo un objeto de la clase personap persona ()print ( type ( p ) )# class ’ main . persona ’ 12

Clase pasadaPOOEjemploEjerciciosProgramación Orientada a ObjetosEjemplo:123# Defino el tipo de dato ( clase ) " persona "class persona :pass45678# Creo un objeto de la clase personap persona ()print ( type ( p ) )# class ’ main . persona ’ . por ahora persona no hace nada.12

Clase pasadaPOOEjemploEjerciciosAtributosA cada objeto le podemos agregar atributos (variables) yver/modificar sus valores.13

Clase pasadaPOOEjemploEjerciciosAtributosA cada objeto le podemos agregar atributos (variables) yver/modificar sus valores.Sintaxisvar nombre clase()var.nombre atributo valorprint(var.nombre atributo)13

Clase pasadaPOOEjemploEjerciciosAtributosEjemplo: En nuestro problema cada persona tiene un nombre,apellido, número de alumno y lista de notas.14

Clase pasadaPOOEjemploEjerciciosAtributosEjemplo: En nuestro problema cada persona tiene un nombre,apellido, número de alumno y lista de notas.Primero defino la clase persona.123# Defino el tipo de dato ( clase ) " persona "class persona :pass14

Clase pasadaPOOEjemploEjerciciosAtributos. luego creo personas y agrego sus atributos.56789# Creo una persona y le damos valor a sus atributosjuan persona ()juan . nombre ’ Juan ’juan . apellido ’ Á guila ’juan . n alumno ’ 14000000 ’101112131415# Creo otra personaaldo persona ()aldo . nombre ’ Aldo ’aldo . apellido ’ Verri ’aldo . n alumno ’ 14000001 ’161718192021# Creo ú ltimo estudiantemaria persona ()maria . nombre ’ Mar ı́ a ’maria . apellido ’ Pinto ’maria . n alumno ’ 14000002 ’15

Clase pasadaPOOEjemploEjerciciosAtributosFinalmente, podrı́amos agregarlos a una lista y mostrar susnombres.16

Clase pasadaPOOEjemploEjerciciosAtributosFinalmente, podrı́amos agregarlos a una lista y mostrar susnombres.2324252627# Agrego estudiantes a mi listaestudiantes []estudiantes . append ( juan )estudiantes . append ( aldo )estudiantes . append ( maria )28293031# Muestro los nombresfor e in estudiantes :print ( e . nombre )16

Clase pasadaPOOEjemploEjerciciosAtributosFinalmente, podrı́amos agregarlos a una lista y mostrar susnombres.2324252627# Agrego estudiantes a mi listaestudiantes []estudiantes . append ( juan )estudiantes . append ( aldo )estudiantes . append ( maria )28293031# Muestro los nombresfor e in estudiantes :print ( e . nombre )¿Qué cosas pueden fallar con este enfoque?16

Clase : Es un método que se llama cuando se crea unnuevo objeto de la clase.Sintaxisclass nombre clase:def init (self, par 1, par 2, .):Bloque código constructor17

Clase : Es un método que se llama cuando se crea unnuevo objeto de la clase.Sintaxisclass nombre clase:def init (self, par 1, par 2, .):Bloque código constructorAl hacer var nombre clase(val 1,val 2,.) se ejecutainit ().17

Clase 45# Defino el tipo de dato ( clase ) " persona "class persona :# Constructordef init ( self , nombre ) :print ( " Persona creada : " , nombre )678# Creo una personaj persona ( " juan " )18

Clase 45# Defino el tipo de dato ( clase ) " persona "class persona :# Constructordef init ( self , nombre ) :print ( " Persona creada : " , nombre )678# Creo una personaj persona ( " juan " )Preguntas:¿Qué muestra el código anterior?¿Qué es self?18

Clase pasadaPOOEjemploEjerciciosConstructoresself : Es una variable especial que contiene el objeto reciéncreado.19

Clase pasadaPOOEjemploEjerciciosConstructoresself : Es una variable especial que contiene el objeto reciéncreado.12345# Defino el tipo de dato ( clase ) " persona "class persona :# Constructordef init ( self , nombre ) :print ( " Persona creada : " , nombre )67891011# Creo una personaj persona ( " juan " )j . nombre ’ Juan ’j . apellido ’ Á guila ’j . n alumno ’ 14000000 ’. en este caso, self equivale a j.19

Clase pasadaPOOEjemploEjerciciosConstructores¿De qué nos podrı́a servir tener self (i.e. j) en el constructor?12345# Defino el tipo de dato ( clase ) " persona "class persona :# Constructordef init ( self , nombre ) :print ( " Persona creada : " , nombre )67891011# Creo una personaj persona ( " juan " )j . nombre ’ Juan ’j . apellido ’ Á guila ’j . n alumno ’ 14000000 ’20

Clase pasadaPOOEjemploEjerciciosConstructores¿De qué nos podrı́a servir tener self (i.e. j) en el constructor?12345# Defino el tipo de dato ( clase ) " persona "class persona :# Constructordef init ( self , nombre ) :print ( " Persona creada : " , nombre )67891011# Creo una personaj persona ( " juan " )j . nombre ’ Juan ’j . apellido ’ Á guila ’j . n alumno ’ 14000000 ’. podemos agregar los atributos en el constructor20

Clase pasadaPOOEjemploEjerciciosConstructoresCon self.var valor agregamos un atributo al objeto.23456789class persona :# Constructordef init ( self , nombre , apellido , n alumno ) :# Agrego atributos a personaself . nombre nombreself . apellido apellidoself . n alumno n alumnoself . notas []21

Clase pasadaPOOEjemploEjerciciosConstructoresCon self.var valor agregamos un atributo al objeto.23456789class persona :# Constructordef init ( self , nombre , apellido , n alumno ) :# Agrego atributos a personaself . nombre nombreself . apellido apellidoself . n alumno n alumnoself . notas []Creo objetos de la clase persona mediante su constructor:121314juan persona ( ’ Juan ’ , ’ Á guila ’ , ’ 14000000 ’)aldo persona ( ’ Aldo ’ , ’ Verri ’ , ’ 14000001 ’)maria persona ( ’ Mar ı́ a ’ , ’ Pinto ’ , ’ 14000002 ’)21

Clase pasadaPOOEjemploEjerciciosConstructores16171819# Agrego notasjuan . notas . extend ([6.5 , 7.0 , 6.7])aldo . notas . extend ([3.0 , 2.7 , 3.8])maria . notas . extend ([5.7 , 7.0 , 6.2])202122# Formo lista con los estudiantesestudiantes [ juan , aldo , maria ]2324252627# Muestro promediosfor e in estudiantes :promedio sum ( e . notas ) / len ( e . notas )print ( e . apellido , " \ t " , ’ %0.2 f ’% promedio )2829303132# Salida :# Á guila# Verri# Pinto 6.73 3.17 6.3022

Clase pasadaPOOEjemploEjerciciosConstructoresVentaja constructores:Lógica para asignar atributos dentro de la definición de laclase.Obligamos asignación de atributos.Podemos ejecutar código cada vez que se crea el objeto.23

Clase es conocidos24

Clase es conocidos12# input cualquieran input ( " Ingrese input : " )34567891011#ifcbsltconstructores que hemos utilizado int ( n ) float ( n ) complex ( n ) bool ( n ) str ( n ) list () tuple ()24

Clase pasadaPOOEjemploEjerciciosMétodosIdea: Además de atributos, los objetos tienen comportamiento.comportamiento acción método código25

Clase pasadaPOOEjemploEjerciciosMétodosEjemplo 1: ¿Qué objetos importantes hay aquı́?26

Clase pasadaPOOEjemploEjerciciosMétodos¿Qué atributos y acciones nos interesan de ellos?(a) Usuario.(b) Guardia.(c) Metro.27

Clase pasadaPOOEjemploEjerciciosMétodosusuario- volumen- posición- destino intentar entrar() intentar salir()28

Clase pasadaPOOEjemploEjerciciosMétodosguardia- volumen- posición señal cerrar puertas()29

Clase pasadaPOOEjemploEjerciciosMétodosmetro- volumen interior- personas interior- posición avanzar() detenerse() abrir puertas() cerrar puertas()30

Clase pasadaPOOEjemploEjerciciosMétodosEjemplo 2: ¿Qué objetos importantes hay aquı́?31

Clase pasadaPOOEjemploEjerciciosMétodos¿Qué atributos y acciones nos interesan de ellos?(a) Girasol.(b) Zombie.(c) Planta.32

Clase pasadaPOOEjemploEjerciciosMétodosgirasol- vida- frecuencia sol- posición- dibujo lanzar sol()33

Clase pasadaPOOEjemploEjerciciosMétodoszombie- vida- daño- velocidad- posición- dibujo comer() avanzar()34

Clase pasadaPOOEjemploEjerciciosMétodosplanta- vida- daño- frecuencia ataque- posición- dibujo atacar()35

Clase pasadaPOOEjemploEjerciciosMétodosMétodo: Función asociada a una clase particular.Sintaxisclass nombre clase:def init (self, par 1, par 2, .):Bloque código constructordef nombre método(self, par 1, par 2, .):Bloque código método36

Clase pasadaPOOEjemploEjerciciosMétodosMétodo: Función asociada a una clase particular.Sintaxisclass nombre clase:def init (self, par 1, par 2, .):Bloque código constructordef nombre método(self, par 1, par 2, .):Bloque código métodoPara llamar al método:Sintaxisvar nombre clase()var.nombre método(val 1, val 2, .)36

Clase pasadaPOOEjemploEjerciciosMétodosEn mini-siding ¿Qué métodos podrı́amos agregar a persona?37

Clase pasadaPOOEjemploEjerciciosMétodosEn mini-siding ¿Qué métodos podrı́amos agregar a persona?persona- nombre- apellido- n alumno- notas agregar nota(n) agregar notas(l) obtener promedio()37

Clase pasadaPOOEjemploEjerciciosMétodosEn mini-siding ¿Qué métodos podrı́amos agregar a persona?persona- nombre- apellido- n alumno- notas agregar nota(n) agregar notas(l) obtener promedio()¿Cómo programarı́an obtener promedio()?37

Clase 13141516# Defino el tipo de dato ( clase ) " persona "class persona :# Constructordef init ( self , nombre , apellido , n alumno ) :# Atributos de personaself . nombre nombreself . apellido apellidoself . n alumno n alumnoself . notas []# M é todosdef agregar nota ( self , n ) :self . notas . append ( n )def agregar notas ( self , l ) :self . notas . extend ( l )def get promedio ( self ) :return sum ( self . notas ) / len ( self . notas )38

Clase pasadaPOOEjemploEjerciciosMétodos20212223# Creo las personas y doy valores a sus atributosjuan persona ( ’ Juan ’ , ’ Á guila ’ , ’ 14000000 ’)aldo persona ( ’ Aldo ’ , ’ Verri ’ , ’ 14000001 ’)maria persona ( ’ Mar ı́ a ’ , ’ Pinto ’ , ’ 14000002 ’)2425262728# Agrego notasjuan . agregar notas ([6.5 , 7.0 , 6.7])aldo . agregar notas ([3.0 , 2.7 , 3.8])maria . agregar notas ([5.7 , 7.0 , 6.2])2930313233# Formo lista y muestro promediosestudiantes [ juan , aldo , maria ]for e in estudiantes :print ( e . apellido , " \ t " , ’ %0.2 f ’% e . get promedio () )3435363738# Salida :# Á guila# Verri# Pinto 6.73 3.17 6.3039

Clase pasadaPOOEjemploEjerciciosMétodosSelf es una variable especial que contiene al objeto sobre el quese ejecuta la función.40

Clase pasadaPOOEjemploEjerciciosMétodosSelf es una variable especial que contiene al objeto sobre el quese ejecuta la función.Definición método agregar notas(l).1314def agregar notas ( self , l ) :self . notas . extend ( l )Llamados a agregar notas(l) son sin el self.262728juan . agregar notas ([6.5 , 7.0 , 6.7])aldo . agregar notas ([3.0 , 2.7 , 3.8])maria . agregar notas ([5.7 , 7.0 , 6.2])40

Clase pasadaPOOEjemploEjerciciosMétodosSelf es una variable especial que contiene al objeto sobre el quese ejecuta la función.Definición método agregar notas(l).1314def agregar notas ( self , l ) :self . notas . extend ( l )Llamados a agregar notas(l) son sin el self.262728juan . agregar notas ([6.5 , 7.0 , 6.7])aldo . agregar notas ([3.0 , 2.7 , 3.8])maria . agregar notas ([5.7 , 7.0 , 6.2])Obs: Necesitamos self para acceder a atributos y métodos.40

Clase pasadaPOOEjemploEjerciciosMétodosVentajas métodos:Asociamos funcionalidades propias de una clase, a sudefinición.Ganamos semántica.Código reutilizable.41

Clase pasadaPOOEjemploEjerciciosMétodosMétodos conocidos42

Clase pasadaPOOEjemploEjerciciosMétodosMétodos conocidosAlgunos métodos sobre strings.2345s " hola "s . replace ( ’h ’ , ’ ’)s . lower ()s . count ( ’a ’)Algunos métodos sobre listas.89101112l [1 ,2 ,3 ,4 ,5]l . append (6)l . extend ([7 ,8 ,9])l . sort ()l . reverse ()42

Clase pasadaPOOEjemploEjerciciosClases vs Objetos¿Cuál es la diferencia entre la clase y el objeto?43

Clase pasadaPOOEjemploEjerciciosClases vs Objetos¿Cuál es la diferencia entre la clase y el objeto?ClaseLa clase es el template del objeto ( su molde).43

Clase pasadaPOOEjemploEjerciciosClases vs Objetos¿Cuál es la diferencia entre la clase y el objeto?ClaseLa clase es el template del objeto ( su molde).A partir del molde podemos construir objetos.ObjetoUn objeto es una instancia particular de una clase.43

Clase pasadaPOOEjemploEjerciciosClases vs Objetoszombie- vida- daño- velocidad- dibujo atacar() avanzar()44

Clase pasadaPOOEjemploEjerciciosClases vs ObjetosClase:23456789class persona :# Constructordef init ( self , nombre , apellido , n alumno ) :# Agrego atributos a personaself . nombre nombreself . apellido apellidoself . n alumno n alumnoself . notas []Objetos (instancias) de la clase:121314juan persona ( ’ Juan ’ , ’ Á guila ’ , ’ 14000000 ’)aldo persona ( ’ Aldo ’ , ’ Verri ’ , ’ 14000001 ’)maria persona ( ’ Mar ı́ a ’ , ’ Pinto ’ , ’ 14000002 ’)45

Clase pasadaPOOEjemploEjerciciosEjemploPrograme un simulador de batallas entre:46

Clase pasadaPOOEjemploEjerciciosEjemploPrograme un simulador de batallas entre:(a) Súperman.46

Clase pasadaPOOEjemploEjerciciosEjemploPrograme un simulador de batallas entre:(a) Súperman.(b) Gokú.46

Clase pasadaPOOEjemploEjerciciosEjemploPrograme un simulador de batallas entre:(a) Súperman.(b) Gokú.(c) Chuck Norris.46

Clase pasadaPOOEjemploEjerciciosEjemploUsaremos una sola clase:guerrero- nombre- vida- fuerza- precisión- velocidad- defensa golpear(g)47

Clase pasadaPOOEjemploEjerciciosEjemploConsideremos que están luchando j1 contra j2 :Se golpea por turnos.Comienza el jugador con mayor velocidad.Si j1 intenta golpear a j2 , la probabilidad de acierto es:j1 .precision j2 .velocidad100Si j1 golpea a j2 , el daño será:max(j1 .f uerza j2 .def ensa randrange( 10, 11), 1)Pelea finaliza cuando algún guerrero llega a vida 0.48

Clase pasadaPOOEjemploEjerciciosEjemplo1import random234567class guerrero :def init ( self , nombre , vida , fuerza , precision ,velocidad , defensa ) :self . nombre nombre ; self . vida vidaself . fuerza fuerza ; self . precision precisionself . velocidad velocidad ; self . defensa defensa891011121314151617def golpear ( self , g ) :# veo si acierto el golpeif ( random . random () ( self . precision - g .velocidad ) / 100) :# en caso de acertar , agrego da n o al oponenteg . vida - max ([( self . fuerza - g . defensa ) random . randrange ( -10 ,11) ,1])print ( " Golpe certero de " , self . nombre )else :print ( g . nombre , " esquiva el golpe ! " )49

Clase pasadaPOOEjemploEjerciciosEjemploFunción que simula la batalla:20212223242526272829303132333435def simular batalla ( j1 , j2 ) :# comienza jugador m á s velozgolpeador , receptor j1 , j2if ( j1 . velocidad j2 . velocidad ) :golpeador , receptor j2 , j1# se golpean hasta que alguno tenga vida cerowhile ( j1 . vida 0 and j2 . vida 0) :print ( " \ n " j1 . nombre , j1 . vida , " vs " ,j2 . vida , j2 . nombre )golpeador . golpear ( receptor )# cambio de turnosgolpeador , receptor receptor , golpeador# finprint ( " \ n " j1 . nombre , j1 . vida , " vs " ,j2 . vida , j2 . nombre )print ( " Ganador : " , receptor . nombre )50

Clase pasadaPOOEjemploEjerciciosEjemploCreamos objetos y simulamos una batalla:37383940# batalla de ejemplosuperman guerrero ( ’ Superman ’ ,100 ,50 ,80 ,30 ,20)goku guerrero ( ’ Gok ú ’ ,100 ,60 ,80 ,40 ,20)chuck guerrero ( ’ Chuck Norris ’ ,200 ,99 ,99 ,99 ,99)414243# simula batallasimular batalla ( goku , chuck )51

Clase pasadaPOOEjemploEjerciciosEjercicios1) Agregue a la clase persona del mini-siding un método queborre las notas de un estudiante.2) Agregue un nuevo guerrero al simulador de batallas con lossiguientes atributos:Nombre: Aldo VerriVida: 10Fuerza: 1Precisión: 1Velocidad: 1Resistencia: 1. luego haga que pelee contra Chuck Norris.52

Clase pasadaPOOEjemploEjerciciosEjercicios3) Cree una clase ampolleta con un método para cambiar suestado (si estaba apagada pasa a estar prendida y viceversa).Luego cree 4 ampolletas y que el usuario sea capaz deprenderlas y apagarlas.4) Cree un mini-plants vs zombies. Para ello debe programaruna clase planta y una clase zombie. Ambos tienen vida y seencuentran a n metros de distancia. En cada turno, la plantaataca al zombie (desde lejos) y el zombie se acerca a la planta(un metro). Cuando el zombie se encuentre a 1 metro de laplanta, puede atacarla (2 mordiscos por turno). El daño decada ataque de la planta es p.ataque random.randrange(-10,11), y el daño del ataque del zombiees z.ataque 2*random.randrange(-10,11). El juego acabacuando el zombie se come a la planta o la planta mata alzombie.53

Clase pasadaPOOEjemploEjerciciosEjercicios5) Cree un tablero de n n donde existan 5 objetos: un lápiz,un cuaderno, un computador, un pase escolar y una mochila.También hay una persona en alguna posición del tablero. Encada turno, la persona se puede mover una casilla en cualquierdirección (izquierda, derecha, arriba, abajo). Para ello utilicelas teclas asdw. El juego consiste en obtener cada objeto ydejarlo en la mochila. La persona sólo puede cargar un objeto ala vez y no puede mover de lugar la mochila. El juego terminacuando todos los objetos están en la mochila. La idea es haceresto en el mı́nimo número de pasos. Para mostrar los distintoselementos del tablero en consola, use letras. Ejemplo: Lapersona es una O, la mochila una M, etc.54

Clase pasada POOEjemploEjercicios Constructores Con self.var valor agregamos un atributo al objeto. 2 classpersona: 3 #Constructor 4 def_init_(self, nombre, apellido, n_alumno): 5 #Agregoatributosapersona 6 self.nombre nombre 7 self.apellido apellido 8 self.n_alumno n_alumno 9 self.notas [] Creo objetos de la clase persona mediante .