Pontificia Universidad Cat´olica de Chile Escuela de Ingenier´ıa
Departamento de Ciencias de la Computaci´on
Clase 19: POO aplicado a Simulaci´
on
Rodrigo Toro Icarte (rntoro@uc.cl)
IIC1103 Introducci´on a la Programaci´on - Secci´on 5Alguna vez les dije: “En computaci´
on aspiramos a modelar el
mundo para solucionar problemas reales”.
Simulaci´on Ejercicios
Simulaci´
on
Alguna vez les dije: “En computaci´
on aspiramos a modelar el
mundo para solucionar problemas reales”.
Simulaci´on Ejercicios
Simulaci´
on
Objetivo: Aprender a modelar problemas reales y simularlos.
En el banco. En un tsunami.
Simular caudal cuenca hidr´
aulica.
Simular funcionamiento de una f´
abrica.
Simulaci´on Ejercicios
Simulaci´
on
Objetivo: Aprender a modelar problemas reales y simularlos.
Ejemplos:
Simular el flujo de personas:
En el metro. En el banco. En un tsunami.
Simular caudal cuenca hidr´
aulica.
Simular funcionamiento de una f´
abrica.
Objetivo: Aprender a modelar problemas reales y simularlos.
Ejemplos:
Simular el flujo de personas:
En el metro. En el banco. En un tsunami.
Simular caudal cuenca hidr´
aulica.
Simular funcionamiento de una f´
abrica.
Simulaci´on Ejercicios
Simulaci´
on
Observaci´
on: Un modelo es una simplificaci´
on de la realidad.
... mientras m´
as parecido, m´
as confiables ser´
an las conclusiones.
Observaci´
on: Un modelo es una simplificaci´
on de la realidad.
... mientras m´
as parecido, m´
as confiables ser´
an las conclusiones.
4Simulaci´on Ejercicios
Simulaci´
on
Hoy en d´ıa se obtienen modelos de simulaci´
on muy preciosos
(entre 80% y 95%).
http://www.simula.uc.cl/index.php
Hoy en d´ıa se obtienen modelos de simulaci´
on muy preciosos
(entre 80% y 95%).
http://www.simula.uc.cl/index.php
Simulaci´on Ejercicios
Simulaci´
on
Idea: Tendremos un loop principal que haga avanzar la
simulaci´
on paso a paso (generalmente es minuto a minuto).
Dentro del loop, ocurrir´
an o no eventos con cierta probabilidad.
Los eventos cambiar´
an nuestras m´
etricas de rendimiento.
Simulaci´on Ejercicios
Simulaci´
on
Ejemplo: ¿Cu´
al es la espera media en la cola del cajero del
metro San Joaqu´ın entre las 19.00 y las 21.00?
Cada persona demora entre 1 y 5 minutos usando el cajero
(distribuye uniforme).
Simulaci´on Ejercicios
Simulaci´
on
Ejemplo: ¿Cu´
al es la espera media en la cola del cajero del
metro San Joaqu´ın entre las 19.00 y las 21.00?
Datos hist´
oricos:
En cada minuto, llega una persona al cajero con
probabilidad 0.2.
Cada persona demora entre 1 y 5 minutos usando el cajero
(distribuye uniforme).
Simulaci´on Ejercicios
Simulaci´
on
Primero hago un loop para que avance el tiempo (de minuto en
minuto).
1 def s i m u l a r () : 2 T = 0 3 w h i l e( T < 2 * 6 0 ) : # s i m u l a m o s 2 h o r a s 4 # Aqu ´ı r e a l i z o s i m u l a c i ´o n 5 T += 1 8Simulaci´on Ejercicios
Simulaci´
on
Primero hago un loop para que avance el tiempo (de minuto en
minuto).
1 def s i m u l a r () : 2 T = 0 3 w h i l e( T < 2 * 6 0 ) : # s i m u l a m o s 2 h o r a s 4 # Aqu ´ı r e a l i z o s i m u l a c i ´o n 5 T += 1En cada minuto llega alguien con probabilidad 0.2 ¿C´
omo
modelamos esto?
Simulaci´on Ejercicios
Simulaci´
on
¿C´
omo modelo que cierto evento ocurra con probabilidad p?
3 r e t u r n r a n d o m . r a n d o m () < p 4 5 p r i n t( s u c e d e _ e v e n t o (0) ) # S i e m p r e F a l s e 6 p r i n t( s u c e d e _ e v e n t o ( 0 . 7 ) ) # 70% de las v e c e s T r u e 7 p r i n t( s u c e d e _ e v e n t o (1) ) # S i e m p r e T r u e 9
Simulaci´on Ejercicios
Simulaci´
on
¿C´
omo modelo que cierto evento ocurra con probabilidad p?
En c´
odigo:
1 i m p o r t r a n d o m 2 def s u c e d e _ e v e n t o ( p ) : 3 r e t u r n r a n d o m . r a n d o m () < p 4 5 p r i n t( s u c e d e _ e v e n t o (0) ) # S i e m p r e F a l s e 6 p r i n t( s u c e d e _ e v e n t o ( 0 . 7 ) ) # 70% de las v e c e s T r u e 7 p r i n t( s u c e d e _ e v e n t o (1) ) # S i e m p r e T r u e 9Simulaci´on Ejercicios
Simulaci´
on
Agreguemos esta idea el c´
odigo:
1 f r o m r a n d o m i m p o r t r a n d o m 2 3 def s i m u l a r () : 4 T = 0 5 w h i l e( T < 2 * 6 0 ) : # s i m u l a m o s 2 h o r a s 6 if( r a n d o m () < 0 . 2 ) : 7 # L l e g a una p e r s o n a ... 8 T += 1Se agrega a la cola.
10Simulaci´on Ejercicios
Simulaci´
on
Agreguemos esta idea el c´
odigo:
1 f r o m r a n d o m i m p o r t r a n d o m 2 3 def s i m u l a r () : 4 T = 0 5 w h i l e( T < 2 * 6 0 ) : # s i m u l a m o s 2 h o r a s 6 if( r a n d o m () < 0 . 2 ) : 7 # L l e g a una p e r s o n a ... 8 T += 1¿Qu´
e pasa cuando llega una persona?
Usa el cajero.
Se agrega a la cola.
Agreguemos esta idea el c´
odigo:
1 f r o m r a n d o m i m p o r t r a n d o m 2 3 def s i m u l a r () : 4 T = 0 5 w h i l e( T < 2 * 6 0 ) : # s i m u l a m o s 2 h o r a s 6 if( r a n d o m () < 0 . 2 ) : 7 # L l e g a una p e r s o n a ... 8 T += 1¿Qu´
e pasa cuando llega una persona?
Usa el cajero.
Se agrega a la cola.
Simulaci´on Ejercicios
Simulaci´
on
Creemos una variable que recuerde la cantidad de personas en
cola (que incluya a quien usa el cajero).
1 f r o m r a n d o m i m p o r t r a n d o m 2 3 def s i m u l a r () : 4 T = 0 5 e n _ c o l a = 0 6 w h i l e( T < 2 * 6 0 ) : # s i m u l a m o s 2 h o r a s 7 if( r a n d o m () < 0 . 2 ) : 8 e n _ c o l a += 1 9 T += 1
¿C´
omo modelamos que “el cajero se demora uniforme entre 1 y
5 minutos.”?
Simulaci´on Ejercicios
Simulaci´
on
Creemos una variable que recuerde la cantidad de personas en
cola (que incluya a quien usa el cajero).
1 f r o m r a n d o m i m p o r t r a n d o m 2 3 def s i m u l a r () : 4 T = 0 5 e n _ c o l a = 0 6 w h i l e( T < 2 * 6 0 ) : # s i m u l a m o s 2 h o r a s 7 if( r a n d o m () < 0 . 2 ) : 8 e n _ c o l a += 1 9 T += 1 11
Simulaci´on Ejercicios
Simulaci´
on
Creemos una variable que recuerde la cantidad de personas en
cola (que incluya a quien usa el cajero).
1 f r o m r a n d o m i m p o r t r a n d o m 2 3 def s i m u l a r () : 4 T = 0 5 e n _ c o l a = 0 6 w h i l e( T < 2 * 6 0 ) : # s i m u l a m o s 2 h o r a s 7 if( r a n d o m () < 0 . 2 ) : 8 e n _ c o l a += 1 9 T += 1
¿C´
omo modelamos que “el cajero se demora uniforme entre 1 y
5 minutos.”?
Simulaci´on Ejercicios
Simulaci´
on
¿C´
omo obtengo valor aleatorio uniforme entre a y b?
3 r e t u r n r a n d o m . r a n d i n t ( a , b )
Caso continuo:
1 i m p o r t r a n d o m 2 def o b t e n e r _ n u m e r o ( a , b ) : 3 r e t u r n a + ( b - a ) * r a n d o m . r a n d o m () 12Simulaci´on Ejercicios
Simulaci´
on
¿C´
omo obtengo valor aleatorio uniforme entre a y b?
Caso discreto:
1 i m p o r t r a n d o m 2 def o b t e n e r _ n u m e r o ( a , b ) : 3 r e t u r n r a n d o m . r a n d i n t ( a , b )Caso continuo:
1 i m p o r t r a n d o m 2 def o b t e n e r _ n u m e r o ( a , b ) : 3 r e t u r n a + ( b - a ) * r a n d o m . r a n d o m () 12Simulaci´on Ejercicios
Simulaci´
on
Idea: Cuando alguien comience a usar el cajero, fijemos su
tiempo de ida.
5 e n _ c o l a = 0 6 w h i l e( T < 2 * 6 0 ) : 7 if( r a n d o m () < 0 . 2 ) : 8 e n _ c o l a += 1 9 # r e v i s o si p u e d o u s a r el c a j e r o 10 if( e n _ c o l a == 1) : 11 # F i j o t i e m p o en que c a j e r o de d e s o c u p a r ´a 12 T _ i d a = r a n d i n t (1 ,5) 13 T += 1 14 # d i s m i n u y o t i e m p o de ida 15 T _ i d a -= 1 13Simulaci´on Ejercicios
Simulaci´
on
Idea: Cuando alguien comience a usar el cajero, fijemos su
tiempo de ida.
1 f r o m r a n d o m i m p o r t random , r a n d i n t 2 def s i m u l a r () : 3 T = 0 4 T _ i d a = -1 # < - t i e m p o en que se d e s o c u p a el c a j e r o 5 e n _ c o l a = 0 6 w h i l e( T < 2 * 6 0 ) : 7 if( r a n d o m () < 0 . 2 ) : 8 e n _ c o l a += 1 9 # r e v i s o si p u e d o u s a r el c a j e r o 10 if( e n _ c o l a == 1) : 11 # F i j o t i e m p o en que c a j e r o de d e s o c u p a r ´a 12 T _ i d a = r a n d i n t (1 ,5) 13 T += 1 14 # d i s m i n u y o t i e m p o de ida 15 T _ i d a -= 1 13Simulaci´on Ejercicios
Simulaci´
on
Si T ida llega a cero, alguien se va...
5 if( r a n d o m () < 0 . 2 ) : 6 e n _ c o l a += 1 7 if( e n _ c o l a == 1) : 8 T _ i d a = r a n d i n t (1 ,5) 9 if( T _ i d a == 0) : 10 e n _ c o l a -= 1 # a l g u i e n se va 11 if( e n _ c o l a > 0) : # a l g u i e n m ´a s usa el c a j e r o 12 T _ i d a = r a n d i n t (1 ,5) 13 T += 1 14 T _ i d a -= 1
¿Qu´
e estad´ısticas interesantes podemos sacar de este c´
odigo?
Simulaci´on Ejercicios
Simulaci´
on
Si T ida llega a cero, alguien se va...
1 f r o m r a n d o m i m p o r t random , r a n d i n t 2 def s i m u l a r () : 3 T = 0; T _ i d a = -1; e n _ c o l a = 0 4 w h i l e( T < 2 * 6 0 ) : 5 if( r a n d o m () < 0 . 2 ) : 6 e n _ c o l a += 1 7 if( e n _ c o l a == 1) : 8 T _ i d a = r a n d i n t (1 ,5) 9 if( T _ i d a == 0) : 10 e n _ c o l a -= 1 # a l g u i e n se va 11 if( e n _ c o l a > 0) : # a l g u i e n m ´a s usa el c a j e r o 12 T _ i d a = r a n d i n t (1 ,5) 13 T += 1 14 T _ i d a -= 1¿Qu´
e estad´ısticas interesantes podemos sacar de este c´
odigo?
Si T ida llega a cero, alguien se va...
1 f r o m r a n d o m i m p o r t random , r a n d i n t 2 def s i m u l a r () : 3 T = 0; T _ i d a = -1; e n _ c o l a = 0 4 w h i l e( T < 2 * 6 0 ) : 5 if( r a n d o m () < 0 . 2 ) : 6 e n _ c o l a += 1 7 if( e n _ c o l a == 1) : 8 T _ i d a = r a n d i n t (1 ,5) 9 if( T _ i d a == 0) : 10 e n _ c o l a -= 1 # a l g u i e n se va 11 if( e n _ c o l a > 0) : # a l g u i e n m ´a s usa el c a j e r o 12 T _ i d a = r a n d i n t (1 ,5) 13 T += 1 14 T _ i d a -= 1¿Qu´
e estad´ısticas interesantes podemos sacar de este c´
odigo?
Simulaci´on Ejercicios
Simulaci´
on
¿C´
omo calculamos el tiempo medio de espera en cola?
1 f r o m r a n d o m i m p o r t random , r a n d i n t 2 def s i m u l a r () : 3 T = 0; T _ i d a = -1; e n _ c o l a = 0 4 w h i l e( T < 2 * 6 0 ) : 5 if( r a n d o m () < 0 . 2 ) : 6 e n _ c o l a += 1 7 if( e n _ c o l a == 1) : 8 T _ i d a = r a n d i n t (1 ,5) 9 if( T _ i d a == 0) : 10 e n _ c o l a -= 1 # a l g u i e n se va 11 if( e n _ c o l a > 0) : # a l g u i e n m ´a s usa el c a j e r o 12 T _ i d a = r a n d i n t (1 ,5) 13 T += 1 14 T _ i d a -= 1... necesitamos recordar la hora a la que llega cada usuario.
¿C´
omo calculamos el tiempo medio de espera en cola?
1 f r o m r a n d o m i m p o r t random , r a n d i n t 2 def s i m u l a r () : 3 T = 0; T _ i d a = -1; e n _ c o l a = 0 4 w h i l e( T < 2 * 6 0 ) : 5 if( r a n d o m () < 0 . 2 ) : 6 e n _ c o l a += 1 7 if( e n _ c o l a == 1) : 8 T _ i d a = r a n d i n t (1 ,5) 9 if( T _ i d a == 0) : 10 e n _ c o l a -= 1 # a l g u i e n se va 11 if( e n _ c o l a > 0) : # a l g u i e n m ´a s usa el c a j e r o 12 T _ i d a = r a n d i n t (1 ,5) 13 T += 1 14 T _ i d a -= 1... necesitamos recordar la hora a la que llega cada usuario.
Simulaci´on Ejercicios
Simulaci´
on
Convirtamos la cola en una lista con los tiempos de llegada.
1 f r o m r a n d o m i m p o r t random , r a n d i n t 2 def s i m u l a r () : 3 T = 0; T _ i d a = -1; c o l a = [] 4 w h i l e( T < 2 * 6 0 ) : 5 if( r a n d o m () < 0 . 2 ) : 6 c o l a . a p p e n d ( T ) # < - a g r e g o t i e m p o de l l e g a d a 7 if(len( c o l a ) == 1) : 8 T _ i d a = r a n d i n t (1 ,5) 9 if( T _ i d a == 0) : 10 # s a c o a la p e r s o n a de la c o l a 11 c o l a . r e m o v e ( c o l a [ 0 ] ) 12 if(len( c o l a ) > 0) : 13 T _ i d a = r a n d i n t (1 ,5) 14 T += 1 15 T _ i d a -= 1
... As´ı, cuando alguien tome el cajero, calculamos cu´
anto estuvo
en cola.
Simulaci´on Ejercicios
Simulaci´
on
Convirtamos la cola en una lista con los tiempos de llegada.
1 f r o m r a n d o m i m p o r t random , r a n d i n t 2 def s i m u l a r () : 3 T = 0; T _ i d a = -1; c o l a = [] 4 w h i l e( T < 2 * 6 0 ) : 5 if( r a n d o m () < 0 . 2 ) : 6 c o l a . a p p e n d ( T ) # < - a g r e g o t i e m p o de l l e g a d a 7 if(len( c o l a ) == 1) : 8 T _ i d a = r a n d i n t (1 ,5) 9 if( T _ i d a == 0) : 10 # s a c o a la p e r s o n a de la c o l a 11 c o l a . r e m o v e ( c o l a [ 0 ] ) 12 if(len( c o l a ) > 0) : 13 T _ i d a = r a n d i n t (1 ,5) 14 T += 1 15 T _ i d a -= 1 16Simulaci´on Ejercicios
Simulaci´
on
Convirtamos la cola en una lista con los tiempos de llegada.
1 f r o m r a n d o m i m p o r t random , r a n d i n t 2 def s i m u l a r () : 3 T = 0; T _ i d a = -1; c o l a = [] 4 w h i l e( T < 2 * 6 0 ) : 5 if( r a n d o m () < 0 . 2 ) : 6 c o l a . a p p e n d ( T ) # < - a g r e g o t i e m p o de l l e g a d a 7 if(len( c o l a ) == 1) : 8 T _ i d a = r a n d i n t (1 ,5) 9 if( T _ i d a == 0) : 10 # s a c o a la p e r s o n a de la c o l a 11 c o l a . r e m o v e ( c o l a [ 0 ] ) 12 if(len( c o l a ) > 0) : 13 T _ i d a = r a n d i n t (1 ,5) 14 T += 1 15 T _ i d a -= 1... As´ı, cuando alguien tome el cajero, calculamos cu´
anto estuvo
en cola.
2 def s i m u l a r () : 3 T = 0; T _ i d a = -1; c o l a = [] 4 e s p e r a = 0 # < - g u a r d o la e s p e r a 5 a t e n d i d o s = 0 # < - n ´u m e r o de p e r s o n a s a t e n d i d a s 6 w h i l e( T < 2 * 6 0 ) : 7 if( r a n d o m () < 0 . 2 ) : 8 c o l a . a p p e n d ( T ) 9 if(len( c o l a ) == 1) : 10 T _ i d a = r a n d i n t (1 ,5) 11 # a g r e g o t i e m p o de e s p e r a 12 a t e n d i d o s += 1 13 if( T _ i d a == 0) : 14 c o l a . r e m o v e ( c o l a [ 0 ] ) 15 if(len( c o l a ) > 0) : 16 T _ i d a = r a n d i n t (1 ,5) 17 # a g r e g o t i e m p o de e s p e r a 18 e s p e r a += T - c o l a [0] 19 a t e n d i d o s += 1 20 T += 1; T _ i d a -= 1 17
Simulaci´on Ejercicios
Simulaci´
on
Finalmente retornamos la espera media en cola:
1 f r o m r a n d o m i m p o r t random , r a n d i n t 2 def s i m u l a r () : 3 T = 0; T _ i d a = -1; c o l a = [] 4 e s p e r a = 0; a t e n d i d o s = 0 5 w h i l e( T < 2 * 6 0 ) : 6 if( r a n d o m () < 0 . 2 ) : 7 c o l a . a p p e n d ( T ) 8 if(len( c o l a ) == 1) : 9 T _ i d a = r a n d i n t (1 ,5) 10 a t e n d i d o s += 1 11 if( T _ i d a == 0) : 12 c o l a . r e m o v e ( c o l a [ 0 ] ) 13 if(len( c o l a ) > 0) : 14 T _ i d a = r a n d i n t (1 ,5) 15 e s p e r a += T - c o l a [0] 16 a t e n d i d o s += 1 17 T += 1; T _ i d a -= 1 18 r e t u r n e s p e r a / a t e n d i d o s # R e t o r n o 18
Finalmente retornamos la espera media en cola:
1 f r o m r a n d o m i m p o r t random , r a n d i n t 2 def s i m u l a r () : 3 T = 0; T _ i d a = -1; c o l a = [] 4 e s p e r a = 0; a t e n d i d o s = 0 5 w h i l e( T < 2 * 6 0 ) : 6 if( r a n d o m () < 0 . 2 ) : 7 c o l a . a p p e n d ( T ) 8 if(len( c o l a ) == 1) : 9 T _ i d a = r a n d i n t (1 ,5) 10 a t e n d i d o s += 1 11 if( T _ i d a == 0) : 12 c o l a . r e m o v e ( c o l a [ 0 ] ) 13 if(len( c o l a ) > 0) : 14 T _ i d a = r a n d i n t (1 ,5) 15 e s p e r a += T - c o l a [0] 16 a t e n d i d o s += 1 17 T += 1; T _ i d a -= 1 18 r e t u r n e s p e r a / a t e n d i d o s # R e t o r n o 18Simulaci´on Ejercicios
Simulaci´
on
Ahora podemos ver el resultado de simular:
26 p r i n t(" e s p e r a m e d i a ", s i m u l a r () )¿Es este resultado estable?
Ahora podemos ver el resultado de simular:
26 p r i n t(" e s p e r a m e d i a ", s i m u l a r () )¿Es este resultado estable?
Simulaci´on Ejercicios
Simulaci´
on
Para obtener el resultado final se calcula el promedio de
ejecutar varias replicas (mientras m´
as mejor).
20 def o b t e n e r _ p r o m e d i o ( n ) :
21 res = 0
22 for i in r a n g e( n ) : 23 res += s i m u l a r () 24 r e t u r n res / n
Luego llamamos a la funci´
on:
27 p r i n t(" e s p e r a m e d i a ", o b t e n e r _ p r o m e d i o ( 1 0 0 0 0 ) )
Para obtener el resultado final se calcula el promedio de
ejecutar varias replicas (mientras m´
as mejor).
20 def o b t e n e r _ p r o m e d i o ( n ) :
21 res = 0
22 for i in r a n g e( n ) : 23 res += s i m u l a r () 24 r e t u r n res / n
Luego llamamos a la funci´
on:
27 p r i n t(" e s p e r a m e d i a ", o b t e n e r _ p r o m e d i o ( 1 0 0 0 0 ) )
Simulaci´on Ejercicios
Simulaci´
on
Ejemplo: Simule un ataque zombie.
Reglas:
Un humano y un zombie se encuentran con probabilidad
0.05 cada minuto.
La probabilidad de que el zombie gane el encuentro es 0.4
La probabilidad de que el humano mate al zombie es 0.2
La probabilidad de que el humano escape es 0.4
Simulaci´on Ejercicios
Simulaci´
on
1 i m p o r t r a n d o m 2 def s i m u l a r ( t _ m i n ) : 3 # V a r i a b l e s i n i c i a l e s 4 z o m b i e s = 10; h u m a n o s = 1 0 0 0 0 ; T = 0 5 w h i l e( T < t _ m i n ) : 6 # Un z o m b i e y un h u m a n o se e n c u e n t r a n 7 if( r a n d o m . r a n d o m () < 0 . 0 5 ) : 8 r = r a n d o m . r a n d o m () 9 if( r < 0 . 4 ) : # G a n a z o m b i e 10 h u m a n o s -= 1 11 z o m b i e s += 1 12 e l i f( r < 0 . 6 ) : # G a n a h u m a n o 13 z o m b i e s -= 1 14 # S a l g o si h u m a n o s o z o m b i e s l l e g a n a c e r o 15 if( z o m b i e s == 0 or h u m a n o s == 0) : b r e a k 16 # a u m e n t o r e l o j 17 T += 1 23Al finalizar muestro estad´ısticas:
18 # M u e s t r o e s t a d ´ı s t i c a s19 p r i n t(" D ´ı as t r a n s c u r r i d o s : ", T / / ( 6 0 * 2 4 ) ) 20 p r i n t(" H u m a n o s : ", h u m a n o s )
21 p r i n t(" Z o m b i e s : ", z o m b i e s )
Simulo 2 a˜
nos:
23 s i m u l a r ( 6 0 * 2 4 * 3 6 5 * 2 )
Simulaci´on Ejercicios
Simulaci´
on
[Ex 2014-2]:
El ministro G´
omez Lobo te ha pedido que implementes una
simulaci´
on para determinar la necesidad de buses en los
recorridos del Transantiago. Cada recorrido tiene una cantidad
determinada de paraderos; la separaci´
on entre paraderos es
siempre la misma para un recorrido; y la velocidad de las micros
fluct´
ua entre los 100 y 900 metros por minuto, y cambia minuto
a minuto. Interesa saber la cantidad m´
axima y el promedio de
micros en un recorrido dado, entre 8.00 AM y 8.00 PM.
Simulaci´on Ejercicios
Simulaci´
on
Para simularlo debes implementar dos clases: Micro y
Recorrido.
ultimo paradero: Que representa el ´
ultimo paradero
visitado.
distancia del paradero: Que corresponde a los metros
recorridos despu´
es de pasar por el ultimo paradero.
La clase Recorrido tiene como atributos:
numero de paraderos
distancia entre paraderos
micros: Lista con las micros en el recorrido.
Simulaci´on Ejercicios
Simulaci´
on
Para simularlo debes implementar dos clases: Micro y
Recorrido.
La clase Micro tiene como atributos:
velocidad
ultimo paradero: Que representa el ´
ultimo paradero
visitado.
distancia del paradero: Que corresponde a los metros
recorridos despu´
es de pasar por el ultimo paradero.
La clase Recorrido tiene como atributos:
numero de paraderos
distancia entre paraderos
micros: Lista con las micros en el recorrido.
Para simularlo debes implementar dos clases: Micro y
Recorrido.
La clase Micro tiene como atributos:
velocidad
ultimo paradero: Que representa el ´
ultimo paradero
visitado.
distancia del paradero: Que corresponde a los metros
recorridos despu´
es de pasar por el ultimo paradero.
La clase Recorrido tiene como atributos:
numero de paraderos
distancia entre paraderos
micros: Lista con las micros en el recorrido.
Simulaci´on Ejercicios
Simulaci´
on
a) Implementa los constructores de ambas clases. El de la clase
Micro debe asignar a las micros una velocidad al azar entre 100
y 900 metros (considera solo n´
umeros enteros) y comenzar justo
en el paradero 1. El de Recorrido debe comenzar sin micros y
recibir el valor de sus otros atributos como par´
ametro.
Simulaci´on Ejercicios
Simulaci´
on
Primero definimos nuestra clase Micro:
1 c l a s s M i c r o :¿Qu´
e pongo en el constructor?
¿Qu´
e par´
ametros debiera recibir?
Simulaci´on Ejercicios
Simulaci´
on
Primero definimos nuestra clase Micro:
1 c l a s s M i c r o :Luego defino el constructor:
1 c l a s s M i c r o :2 def _ _ i n i t _ _ ( s e l f ) :
¿Qu´
e pongo en el constructor?
¿Qu´
e par´
ametros debiera recibir?
Primero definimos nuestra clase Micro:
1 c l a s s M i c r o :Luego defino el constructor:
1 c l a s s M i c r o :2 def _ _ i n i t _ _ ( s e l f ) :
¿Qu´
e pongo en el constructor?
¿Qu´
e par´
ametros debiera recibir?
Simulaci´on Ejercicios
Simulaci´
on
La clase Micro tiene como atributos:
velocidad.
ultimo paradero.
distancia del paradero.
“El constructor de la clase Micro debe asignar a las micros una
velocidad al azar entre 100 y 900 metros (considera solo
n´
umeros enteros) y comenzar justo en el paradero 1”.
¿Qu´
e pongo en el constructor?
¿Qu´
e par´
ametros debiera recibir?
Simulaci´on Ejercicios
Simulaci´
on
La clase Micro tiene como atributos:
velocidad.
ultimo paradero.
distancia del paradero.
“El constructor de la clase Micro debe asignar a las micros una
velocidad al azar entre 100 y 900 metros (considera solo
n´
umeros enteros) y comenzar justo en el paradero 1”.
Simulaci´on Ejercicios
Simulaci´
on
La clase Micro tiene como atributos:
velocidad.
ultimo paradero.
distancia del paradero.
“El constructor de la clase Micro debe asignar a las micros una
velocidad al azar entre 100 y 900 metros (considera solo
n´
umeros enteros) y comenzar justo en el paradero 1”.
¿Qu´
e pongo en el constructor?
¿Qu´
e par´
ametros debiera recibir?
Simulaci´on Ejercicios
Simulaci´
on
Debe iniciar en el primer paradero:
1 c l a s s M i c r o : 2 def _ _ i n i t _ _ ( s e l f ) : 3 s e l f . u l t i m o _ p a r a d e r o = 1 4 s e l f . d i s t a n c i a _ d e l _ p a r a d e r o = 0 5 s e l f . v e l o c i d a d = # ??? 30Simulaci´on Ejercicios
Simulaci´
on
Debe iniciar en el primer paradero:
1 c l a s s M i c r o :2 def _ _ i n i t _ _ ( s e l f ) :
3 s e l f . u l t i m o _ p a r a d e r o = 1
4 s e l f . d i s t a n c i a _ d e l _ p a r a d e r o = 0 5 s e l f . v e l o c i d a d = # ???
¿C´
omo asigno a velocidad un n´
umero random entre 100 y 900?
... necesitamos random.randint(100,900)
Debe iniciar en el primer paradero:
1 c l a s s M i c r o : 2 def _ _ i n i t _ _ ( s e l f ) : 3 s e l f . u l t i m o _ p a r a d e r o = 1 4 s e l f . d i s t a n c i a _ d e l _ p a r a d e r o = 0 5 s e l f . v e l o c i d a d = # ???¿C´
omo asigno a velocidad un n´
umero random entre 100 y 900?
... necesitamos random.randint(100,900)
Simulaci´on Ejercicios
Simulaci´
on
Asignamos la velocidad:
1 i m p o r t r a n d o m 2 3 c l a s s M i c r o : 4 def _ _ i n i t _ _ ( s e l f ) : 5 s e l f . u l t i m o _ p a r a d e r o = 1 6 s e l f . d i s t a n c i a _ d e l _ p a r a d e r o = 0 7 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 )... con esto ya podr´ıamos crear una micro y ver sus atributos:
9 m = M i c r o ()10 p r i n t( m . u l t i m o _ p a r a d e r o ) # > > > 1 11 p r i n t( m . d i s t a n c i a _ d e l _ p a r a d e r o ) # > > > 0
12 p r i n t( m . v e l o c i d a d ) # > > > e n t r e 100 y 900
Asignamos la velocidad:
1 i m p o r t r a n d o m 2 3 c l a s s M i c r o : 4 def _ _ i n i t _ _ ( s e l f ) : 5 s e l f . u l t i m o _ p a r a d e r o = 1 6 s e l f . d i s t a n c i a _ d e l _ p a r a d e r o = 0 7 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 )... con esto ya podr´ıamos crear una micro y ver sus atributos:
9 m = M i c r o ()10 p r i n t( m . u l t i m o _ p a r a d e r o ) # > > > 1 11 p r i n t( m . d i s t a n c i a _ d e l _ p a r a d e r o ) # > > > 0
12 p r i n t( m . v e l o c i d a d ) # > > > e n t r e 100 y 900
Simulaci´on Ejercicios
Simulaci´
on
Ahora creemos la clase Recorrido:
9 c l a s s R e c o r r i d o :10 def _ _ i n i t _ _ ( s e l f ) :
¿Qu´
e pongo en el constructor?
¿Qu´
e par´
ametros debiera recibir?
Ahora creemos la clase Recorrido:
9 c l a s s R e c o r r i d o :10 def _ _ i n i t _ _ ( s e l f ) :
¿Qu´
e pongo en el constructor?
¿Qu´
e par´
ametros debiera recibir?
Simulaci´on Ejercicios
Simulaci´
on
La clase Recorrido tiene como atributos:
numero de paraderos
distancia entre paraderos
micros: Lista con las micros en el recorrido.
“El constructor de Recorrido debe comenzar sin micros y
recibir el valor de sus otros atributos como par´
ametro”.
¿Qu´
e pongo en el constructor?
¿Qu´
e par´
ametros debiera recibir?
Simulaci´on Ejercicios
Simulaci´
on
La clase Recorrido tiene como atributos:
numero de paraderos
distancia entre paraderos
micros: Lista con las micros en el recorrido.
“El constructor de Recorrido debe comenzar sin micros y
recibir el valor de sus otros atributos como par´
ametro”.
Simulaci´on Ejercicios
Simulaci´
on
La clase Recorrido tiene como atributos:
numero de paraderos
distancia entre paraderos
micros: Lista con las micros en el recorrido.
“El constructor de Recorrido debe comenzar sin micros y
recibir el valor de sus otros atributos como par´
ametro”.
¿Qu´
e pongo en el constructor?
¿Qu´
e par´
ametros debiera recibir?
Simulaci´on Ejercicios
Simulaci´
on
Las micros comienzan como una lista vac´ıa:
9 c l a s s R e c o r r i d o : 10 def _ _ i n i t _ _ ( s e l f ) : 11 s e l f . m i c r o s =[] 11 s e l f . m i c r o s =[] 12 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 13 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 34Simulaci´on Ejercicios
Simulaci´
on
Las micros comienzan como una lista vac´ıa:
9 c l a s s R e c o r r i d o :10 def _ _ i n i t _ _ ( s e l f ) : 11 s e l f . m i c r o s =[]
El resto se reciben como par´
ametro:
9 c l a s s R e c o r r i d o : 10 def _ _ i n i t _ _ ( self , np , dp ) : 11 s e l f . m i c r o s =[] 12 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 13 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 34b) Para la clase Micro debes implementar un m´
etodo que
recalcula la velocidad de la micro como un entero al azar entre
100 y 900.
Simulaci´on Ejercicios
Simulaci´
on
Agrego el m´
etodo a Micro:
3 c l a s s M i c r o : 4 def _ _ i n i t _ _ ( s e l f ) : 5 s e l f . u l t i m o _ p a r a d e r o = 1 6 s e l f . d i s t a n c i a _ d e l _ p a r a d e r o = 0 7 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 8 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) :¿Qu´
e par´
ametros debiera recibir?
¿Qu´
e pongo en el c´
odigo?
Agrego el m´
etodo a Micro:
3 c l a s s M i c r o : 4 def _ _ i n i t _ _ ( s e l f ) : 5 s e l f . u l t i m o _ p a r a d e r o = 1 6 s e l f . d i s t a n c i a _ d e l _ p a r a d e r o = 0 7 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 8 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) :¿Qu´
e par´
ametros debiera recibir?
¿Qu´
e pongo en el c´
odigo?
Simulaci´on Ejercicios
Simulaci´
on
“recalcula la velocidad de la micro como un entero al azar entre
100 y 900”
... luego no necesito par´
ametros externos.
3 c l a s s M i c r o : 4 def _ _ i n i t _ _ ( s e l f ) : 5 s e l f . u l t i m o _ p a r a d e r o = 1 6 s e l f . d i s t a n c i a _ d e l _ p a r a d e r o = 0 7 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 8 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) : 37“recalcula la velocidad de la micro como un entero al azar entre
100 y 900”
... luego no necesito par´
ametros externos.
3 c l a s s M i c r o : 4 def _ _ i n i t _ _ ( s e l f ) : 5 s e l f . u l t i m o _ p a r a d e r o = 1 6 s e l f . d i s t a n c i a _ d e l _ p a r a d e r o = 0 7 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 8 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) : 37Simulaci´on Ejercicios
Simulaci´
on
¿C´
omo actualizo el valor de la velocidad?
¿Basta con velocidad = random.randint(100,900)?
Debemos
usar el self para cambiar el valor del atributo.
3 c l a s s M i c r o : 4 def _ _ i n i t _ _ ( s e l f ) : 5 s e l f . u l t i m o _ p a r a d e r o = 1 6 s e l f . d i s t a n c i a _ d e l _ p a r a d e r o = 0 7 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 8 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) : 9 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 38Simulaci´on Ejercicios
Simulaci´
on
¿C´
omo actualizo el valor de la velocidad?
¿Basta con velocidad = random.randint(100,900)?
5 s e l f . u l t i m o _ p a r a d e r o = 1 6 s e l f . d i s t a n c i a _ d e l _ p a r a d e r o = 0 7 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 8 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) : 9 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 38
Simulaci´on Ejercicios
Simulaci´
on
¿C´
omo actualizo el valor de la velocidad?
¿Basta con velocidad = random.randint(100,900)?
Debemos
usar el self para cambiar el valor del atributo.
3 c l a s s M i c r o : 4 def _ _ i n i t _ _ ( s e l f ) : 5 s e l f . u l t i m o _ p a r a d e r o = 1 6 s e l f . d i s t a n c i a _ d e l _ p a r a d e r o = 0 7 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 8 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) : 9 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 38c) Para la clase Recorrido deber´
as implementar tres m´
etodos.
i) Un m´
etodo agregar micro que agregue una micro en el
primer paradero del recorrido.
Simulaci´on Ejercicios
Simulaci´
on
Agregamos el m´
etodo:
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( s e l f ) :¿Qu´
e par´
ametros debiera recibir?
¿Qu´
e pongo en el c´
odigo?
Agregamos el m´
etodo:
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( s e l f ) :¿Qu´
e par´
ametros debiera recibir?
¿Qu´
e pongo en el c´
odigo?
Simulaci´on Ejercicios
Simulaci´
on
Debemos recibir una micro como par´
ametro:
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) :¿C´
omo agregamos la micro a la lista de micros?
¿Basta con micros.append(m)?
Debemos recibir una micro como par´
ametro:
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) :¿C´
omo agregamos la micro a la lista de micros?
¿Basta con micros.append(m)?
Simulaci´on Ejercicios
Simulaci´
on
Para obtener/modificar un atributo debemos usar el self.
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) : 17 s e l f . m i c r o s . a p p e n d ( m ) 42ii) Un m´
etodo avanzar micro que recibe una micro m y ajusta
la posici´
on de la micro m de acuerdo a lo que avanza en un
minuto, considerando la posici´
on actual, la velocidad y
considerando adem´
as que cuando una micro visita un paradero
no contin´
ua avanzando ese minuto. M´
as espec´ıficamente, sup´
on
que la micro est´
a ` metros m´
as adelante del paradero p y que v
es la velocidad actual. Si ` + v es mayor a la distancia entre
paraderos, entonces la nueva posici´
on de la micro es justo en el
paradero p + 1. De lo contrario, se ubicar´
a a ` + v metros m´
as
adelante del paradero p.
Simulaci´on Ejercicios
Simulaci´
on
Primero, creamos el m´
etodo:
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) : 17 s e l f . m i c r o s . a p p e n d ( m ) 18 def a v a n z a r _ m i c r o ( s e l f ) :¿Qu´
e par´
ametros debiera recibir?
¿Qu´
e pongo en el c´
odigo?
Primero, creamos el m´
etodo:
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) : 17 s e l f . m i c r o s . a p p e n d ( m ) 18 def a v a n z a r _ m i c r o ( s e l f ) :¿Qu´
e par´
ametros debiera recibir?
¿Qu´
e pongo en el c´
odigo?
Simulaci´on Ejercicios
Simulaci´
on
“Un m´
etodo avanzar micro que recibe una micro m”
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) : 17 s e l f . m i c r o s . a p p e n d ( m ) 18 def a v a n z a r _ m i c r o ( self , m ) : 45
“Un m´
etodo avanzar micro que recibe una micro m”
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) : 17 s e l f . m i c r o s . a p p e n d ( m ) 18 def a v a n z a r _ m i c r o ( self , m ) : 45Simulaci´on Ejercicios
Simulaci´
on
“... ajusta la posici´
on de la micro m de acuerdo a lo que avanza
en un minuto, considerando la posici´
on actual, la velocidad y
considerando adem´
as que cuando una micro visita un paradero
no contin´
ua avanzando ese minuto.”
Es decir, si micro est´
a a l metro del paradero p, su velocidad es
v y la distancia entre paraderos es d ¿D´
onde estar´
a en el
siguiente minuto?
Si v + l < d, estar´
a a v + l metros de p.
Si v + l ≥ d, estar´
a a 0 metros de p + 1.
Simulaci´on Ejercicios
Simulaci´
on
“... ajusta la posici´
on de la micro m de acuerdo a lo que avanza
en un minuto, considerando la posici´
on actual, la velocidad y
considerando adem´
as que cuando una micro visita un paradero
no contin´
ua avanzando ese minuto.”
Es decir, si micro est´
a a l metro del paradero p, su velocidad es
v y la distancia entre paraderos es d ¿D´
onde estar´
a en el
siguiente minuto?
Simulaci´on Ejercicios
Simulaci´
on
“... ajusta la posici´
on de la micro m de acuerdo a lo que avanza
en un minuto, considerando la posici´
on actual, la velocidad y
considerando adem´
as que cuando una micro visita un paradero
no contin´
ua avanzando ese minuto.”
Es decir, si micro est´
a a l metro del paradero p, su velocidad es
v y la distancia entre paraderos es d ¿D´
onde estar´
a en el
siguiente minuto?
Si v + l < d, estar´
a a v + l metros de p.
Si v + l ≥ d, estar´
a a 0 metros de p + 1.
Simulaci´on Ejercicios
Simulaci´
on
Problema: ¿C´
omo obtengo l, v, d y p?
l: Distancia micro al ´
ultimo paradero.
p: ´
Ultimo paradero de la micro.
v: Velocidad micro.
d: Distancia entre paraderos.
p: m.ultimo paradero.
v: m.velocidad.
d: self.distancia entre paraderos.
Simulaci´on Ejercicios
Simulaci´
on
Problema: ¿C´
omo obtengo l, v, d y p?
l: Distancia micro al ´
ultimo paradero.
p: ´
Ultimo paradero de la micro.
v: Velocidad micro.
d: Distancia entre paraderos.
Son atributos de la micro m y del recorrido self:
l: m.distanca del paradero.
p: m.ultimo paradero.
v: m.velocidad.
d: self.distancia entre paraderos.
Simulaci´on Ejercicios
Simulaci´
on
Calculo nueva posici´
on y pongo condicionales:
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) : 17 s e l f . m i c r o s . a p p e n d ( m ) 18 def a v a n z a r _ m i c r o ( self , m ) : 19 n u e v a _ p o s = m . d i s t a n c i a _ d e l _ p a r a d e r o + m . v e l o c i d a d 20 if( n u e v a _ p o s < s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s ) : 21 # a j u s t o p o s i c i ´o n de la m i c r o 22 e l s e: 23 # L l e g o al pr ´o x i m o p a r a d e r o 48Simulaci´on Ejercicios
Simulaci´
on
Calculo nueva posici´
on y pongo condicionales:
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) : 17 s e l f . m i c r o s . a p p e n d ( m ) 18 def a v a n z a r _ m i c r o ( self , m ) : 19 n u e v a _ p o s = m . d i s t a n c i a _ d e l _ p a r a d e r o + m . v e l o c i d a d 20 if( n u e v a _ p o s < s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s ) : 21 # a j u s t o p o s i c i ´o n de la m i c r o 22 e l s e: 23 # L l e g o al pr ´o x i m o p a r a d e r o¿C´
omo modifico la posici´
on y paradero de la micro?
Modifico posici´
on de la micro:
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) : 17 s e l f . m i c r o s . a p p e n d ( m ) 18 def a v a n z a r _ m i c r o ( self , m ) : 19 n u e v a _ p o s = m . d i s t a n c i a _ d e l _ p a r a d e r o + m . v e l o c i d a d 20 if( n u e v a _ p o s < s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s ) : 21 m . d i s t a n c i a _ d e l _ p a r a d e r o = n u e v a _ p o s 22 e l s e: 23 m . d i s t a n c i a _ d e l _ p a r a d e r o = 0 24 m . u l t i m o _ p a r a d e r o += 1 49Simulaci´on Ejercicios
Simulaci´
on
iii) Un m´
etodo simular minuto, que se encargue de simular un
minuto en la simulaci´
on: debe avanzar todas las micros,
eliminar las que llegan al ´
ultimo paradero y, finalmente,
recalcular la velocidad de cada micro para el pr´
oximo minuto.
Recuerda que puedes eliminar un elemento e de una lista lista
usando lista.remove(e).
Simulaci´on Ejercicios
Simulaci´
on
Creamos el m´
etodo:
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 # ( . . . ) 14 def a g r e g a r _ m i c r o ( self , m ) : 15 # ( . . . ) 16 def a v a n z a r _ m i c r o ( self , m ) : 17 # ( . . . ) 18 def s i m u l a r _ m i n u t o ( s e l f ) : 51Simulaci´on Ejercicios
Simulaci´
on
Creamos el m´
etodo:
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 # ( . . . ) 14 def a g r e g a r _ m i c r o ( self , m ) : 15 # ( . . . ) 16 def a v a n z a r _ m i c r o ( self , m ) : 17 # ( . . . ) 18 def s i m u l a r _ m i n u t o ( s e l f ) :¿Qu´
e par´
ametros debiera recibir?
¿Qu´
e pongo en el c´
odigo?
Simulaci´on Ejercicios
Simulaci´
on
“...debe avanzar todas las micros, eliminar las que llegan al
´
ultimo paradero y, finalmente, recalcular la velocidad de cada
micro para el pr´
oximo minuto”
Avanzar todas las micros.
Eliminar micros en ´
ultimo paradero.
Recalcular velocidades.
Simulaci´on Ejercicios
Simulaci´
on
“...debe avanzar todas las micros, eliminar las que llegan al
´
ultimo paradero y, finalmente, recalcular la velocidad de cada
micro para el pr´
oximo minuto”
¿Par´
ametros?
Ninguno
¿C´
odigo?
Avanzar todas las micros.
Eliminar micros en ´
ultimo paradero.
Recalcular velocidades.
Simulaci´on Ejercicios
Simulaci´
on
“...debe avanzar todas las micros, eliminar las que llegan al
´
ultimo paradero y, finalmente, recalcular la velocidad de cada
micro para el pr´
oximo minuto”
¿Par´
ametros? Ninguno
Eliminar micros en ´
ultimo paradero.
Recalcular velocidades.
Simulaci´on Ejercicios
Simulaci´
on
“...debe avanzar todas las micros, eliminar las que llegan al
´
ultimo paradero y, finalmente, recalcular la velocidad de cada
micro para el pr´
oximo minuto”
¿Par´
ametros? Ninguno
¿C´
odigo?
Avanzar todas las micros.
Eliminar micros en ´
ultimo paradero.
Recalcular velocidades.
“...debe avanzar todas las micros, eliminar las que llegan al
´
ultimo paradero y, finalmente, recalcular la velocidad de cada
micro para el pr´
oximo minuto”
¿Par´
ametros? Ninguno
¿C´
odigo?
Avanzar todas las micros.
Eliminar micros en ´
ultimo paradero.
Recalcular velocidades.
Simulaci´on Ejercicios
Simulaci´
on
¿C´
omo hago avanzar a todas las micros?
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) : 17 # ( . . . ) 18 def a v a n z a r _ m i c r o ( self , m ) : 19 # ( . . . ) 20 def s i m u l a r _ m i n u t o ( s e l f ) : 53Simulaci´on Ejercicios
Simulaci´
on
Podemos hacer un for sobre self.micros y llamar a
avanzar micro(...).
15 # ( . . . ) 16 def a v a n z a r _ m i c r o ( self , m ) : 17 # ( . . . ) 18 def s i m u l a r _ m i n u t o ( s e l f ) : 19 for m in s e l f . m i c r o s : 20 # L l a m a r a a v a n z a r _ m i c r o¿C´
omo llamo a avanzar micro desde Recorrido?
¿Basta con avanzar micro(m)?
Simulaci´on Ejercicios
Simulaci´
on
Podemos hacer un for sobre self.micros y llamar a
avanzar micro(...).
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 # ( . . . ) 14 def a g r e g a r _ m i c r o ( self , m ) : 15 # ( . . . ) 16 def a v a n z a r _ m i c r o ( self , m ) : 17 # ( . . . ) 18 def s i m u l a r _ m i n u t o ( s e l f ) : 19 for m in s e l f . m i c r o s : 20 # L l a m a r a a v a n z a r _ m i c r o¿C´
omo llamo a avanzar micro desde Recorrido?
¿Basta con avanzar micro(m)?
Podemos hacer un for sobre self.micros y llamar a
avanzar micro(...).
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 # ( . . . ) 14 def a g r e g a r _ m i c r o ( self , m ) : 15 # ( . . . ) 16 def a v a n z a r _ m i c r o ( self , m ) : 17 # ( . . . ) 18 def s i m u l a r _ m i n u t o ( s e l f ) : 19 for m in s e l f . m i c r o s : 20 # L l a m a r a a v a n z a r _ m i c r o¿C´
omo llamo a avanzar micro desde Recorrido?
¿Basta con avanzar micro(m)?
Simulaci´on Ejercicios
Simulaci´
on
Para llamar a un m´
etodo desde dentro de una clase usamos
self.
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 # ( . . . ) 14 def a g r e g a r _ m i c r o ( self , m ) : 15 # ( . . . ) 16 def a v a n z a r _ m i c r o ( self , m ) : 17 # ( . . . ) 18 def s i m u l a r _ m i n u t o ( s e l f ) : 19 for m in s e l f . m i c r o s : 20 s e l f . a v a n z a r _ m i c r o ( m ) 55Simulaci´on Ejercicios
Simulaci´
on
¿C´
omo elimino las micros del ´
ultimo paradero?
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) : 17 # ( . . . ) 18 def a v a n z a r _ m i c r o ( self , m ) : 19 # ( . . . ) 20 def s i m u l a r _ m i n u t o ( s e l f ) : 21 for m in s e l f . m i c r o s : 22 s e l f . a v a n z a r _ m i c r o ( m ) 56
Simulaci´on Ejercicios
Simulaci´
on
¿C´
omo elimino las micros del ´
ultimo paradero?
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 s e l f . m i c r o s =[] 14 s e l f . n u m e r o _ d e _ p a r a d e r o s = np 15 s e l f . d i s t a n c i a _ e n t r e _ p a r a d e r o s = dp 16 def a g r e g a r _ m i c r o ( self , m ) : 17 # ( . . . ) 18 def a v a n z a r _ m i c r o ( self , m ) : 19 # ( . . . ) 20 def s i m u l a r _ m i n u t o ( s e l f ) : 21 for m in s e l f . m i c r o s : 22 s e l f . a v a n z a r _ m i c r o ( m )
... ¿C´
omo s´
e si una micro est´
a en el ´
ultimo paradero?
56Simulaci´on Ejercicios
Simulaci´
on
Una micro est´
a en el ´
ultimo paradero si m.ultimo paradero es
igual a self.numero de paraderos.
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 # ( . . . ) 14 def a g r e g a r _ m i c r o ( self , m ) : 15 # ( . . . ) 16 def a v a n z a r _ m i c r o ( self , m ) : 17 # ( . . . ) 18 def s i m u l a r _ m i n u t o ( s e l f ) : 19 for m in s e l f . m i c r o s : 20 s e l f . a v a n z a r _ m i c r o ( m ) 21 for m in s e l f . m i c r o s : 22 if( m . u l t i m o _ p a r a d e r o == s e l f . n u m e r o _ d e _ p a r a d e r o s ) : 23 # e l i m i n o m de la l i s t a de m i c r o s 57
Simulaci´on Ejercicios
Simulaci´
on
Una micro est´
a en el ´
ultimo paradero si m.ultimo paradero es
igual a self.numero de paraderos.
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 # ( . . . ) 14 def a g r e g a r _ m i c r o ( self , m ) : 15 # ( . . . ) 16 def a v a n z a r _ m i c r o ( self , m ) : 17 # ( . . . ) 18 def s i m u l a r _ m i n u t o ( s e l f ) : 19 for m in s e l f . m i c r o s : 20 s e l f . a v a n z a r _ m i c r o ( m ) 21 for m in s e l f . m i c r o s : 22 if( m . u l t i m o _ p a r a d e r o == s e l f . n u m e r o _ d e _ p a r a d e r o s ) : 23 # e l i m i n o m de la l i s t a de m i c r o s
¿C´
omo elimino m?
57Basta con self.micros.remove(m)
11 c l a s s R e c o r r i d o : 12 def _ _ i n i t _ _ ( self , np , dp ) : 13 # ( . . . ) 14 def a g r e g a r _ m i c r o ( self , m ) : 15 # ( . . . ) 16 def a v a n z a r _ m i c r o ( self , m ) : 17 # ( . . . ) 18 def s i m u l a r _ m i n u t o ( s e l f ) : 19 for m in s e l f . m i c r o s : 20 s e l f . a v a n z a r _ m i c r o ( m ) 21 for m in s e l f . m i c r o s : 22 if( m . u l t i m o _ p a r a d e r o == s e l f . n u m e r o _ d e _ p a r a d e r o s ) : 23 s e l f . m i c r o s . r e m o v e ( m ) 58Simulaci´on Ejercicios
Simulaci´
on
¿C´
omo recalculo las velocidades?
3 c l a s s M i c r o : 4 # ( . . . ) 5 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) : 6 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 7 8 c l a s s R e c o r r i d o : 9 # ( . . . ) 10 def s i m u l a r _ m i n u t o ( s e l f ) : 11 for m in s e l f . m i c r o s : 12 s e l f . a v a n z a r _ m i c r o ( m ) 13 for m in s e l f . m i c r o s : 14 if( m . u l t i m o _ p a r a d e r o == s e l f . n u m e r o _ d e _ p a r a d e r o s ) : 15 s e l f . m i c r o s . r e m o v e ( m ) 59Simulaci´on Ejercicios
Simulaci´
on
Recorremos las micros y llamamos a recalcular su velocidad.
3 c l a s s M i c r o : 4 # ( . . . ) 5 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) : 6 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 7 8 c l a s s R e c o r r i d o : 9 # ( . . . ) 10 def s i m u l a r _ m i n u t o ( s e l f ) : 11 for m in s e l f . m i c r o s : 12 s e l f . a v a n z a r _ m i c r o ( m ) 13 for m in s e l f . m i c r o s : 14 if( m . u l t i m o _ p a r a d e r o == s e l f . n u m e r o _ d e _ p a r a d e r o s ) : 15 s e l f . m i c r o s . r e m o v e ( m ) 16 for m in s e l f . m i c r o s : 17 # L l a m o a r e c a l c u l a r _ v e l o c i d a d 60Simulaci´on Ejercicios
Simulaci´
on
Recorremos las micros y llamamos a recalcular su velocidad.
3 c l a s s M i c r o : 4 # ( . . . ) 5 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) : 6 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 7 8 c l a s s R e c o r r i d o : 9 # ( . . . ) 10 def s i m u l a r _ m i n u t o ( s e l f ) : 11 for m in s e l f . m i c r o s : 12 s e l f . a v a n z a r _ m i c r o ( m ) 13 for m in s e l f . m i c r o s : 14 if( m . u l t i m o _ p a r a d e r o == s e l f . n u m e r o _ d e _ p a r a d e r o s ) : 15 s e l f . m i c r o s . r e m o v e ( m ) 16 for m in s e l f . m i c r o s : 17 # L l a m o a r e c a l c u l a r _ v e l o c i d a d... ¿C´
omo llamo a recalcular velocidad?
Simulaci´on Ejercicios
Simulaci´
on
Lo llamo a trav´
es de la micro particular.
3 c l a s s M i c r o : 4 # ( . . . ) 5 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) : 6 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 7 8 c l a s s R e c o r r i d o : 9 # ( . . . ) 10 def s i m u l a r _ m i n u t o ( s e l f ) : 11 for m in s e l f . m i c r o s : 12 s e l f . a v a n z a r _ m i c r o ( m ) 13 for m in s e l f . m i c r o s : 14 if( m . u l t i m o _ p a r a d e r o == s e l f . n u m e r o _ d e _ p a r a d e r o s ) : 15 s e l f . m i c r o s . r e m o v e ( m ) 16 for m in s e l f . m i c r o s : 17 m . r e c a l c u l a r _ v e l o c i d a d () 61Simulaci´on Ejercicios
Simulaci´
on
Lo llamo a trav´
es de la micro particular.
3 c l a s s M i c r o : 4 # ( . . . ) 5 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) : 6 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 7 8 c l a s s R e c o r r i d o : 9 # ( . . . ) 10 def s i m u l a r _ m i n u t o ( s e l f ) : 11 for m in s e l f . m i c r o s : 12 s e l f . a v a n z a r _ m i c r o ( m ) 13 for m in s e l f . m i c r o s : 14 if( m . u l t i m o _ p a r a d e r o == s e l f . n u m e r o _ d e _ p a r a d e r o s ) : 15 s e l f . m i c r o s . r e m o v e ( m ) 16 for m in s e l f . m i c r o s : 17 m . r e c a l c u l a r _ v e l o c i d a d ()¿Es esto suficiente?
... S´ı.
Lo llamo a trav´
es de la micro particular.
3 c l a s s M i c r o : 4 # ( . . . ) 5 def r e c a l c u l a r _ v e l o c i d a d ( s e l f ) : 6 s e l f . v e l o c i d a d = r a n d o m . r a n d i n t ( 1 0 0 , 9 0 0 ) 7 8 c l a s s R e c o r r i d o : 9 # ( . . . ) 10 def s i m u l a r _ m i n u t o ( s e l f ) : 11 for m in s e l f . m i c r o s : 12 s e l f . a v a n z a r _ m i c r o ( m ) 13 for m in s e l f . m i c r o s : 14 if( m . u l t i m o _ p a r a d e r o == s e l f . n u m e r o _ d e _ p a r a d e r o s ) : 15 s e l f . m i c r o s . r e m o v e ( m ) 16 for m in s e l f . m i c r o s : 17 m . r e c a l c u l a r _ v e l o c i d a d ()¿Es esto suficiente? ... S´ı.
Simulaci´on Ejercicios
Simulaci´
on
d) Implementa una funci´
on simular que reciba como
par´
ametros un n´
umero n de paraderos, la distancia d entre
paraderos y la cantidad mins de minutos que transcurren entre
la salida de una micro y la pr´
oxima. Esta funci´
on debe
imprimir el m´
aximo y el promedio de la cantidad de micros que
hubo en el recorrido. Cada iteraci´
on corresponde a un minuto,
y deber´
as simular por 12 horas. Inicialmente el recorrido
comienza con una micro en el primer paradero y se genera una
nueva micro en ese paradero cada mins minutos.
Simulaci´on Ejercicios
Simulaci´
on
¿D´
onde implemento la funci´
on simular?
1 i m p o r t r a n d o m 2 c l a s s M i c r o : 3 # ( . . . ) 4 c l a s s R e c o r r i d o : 5 # ( . . . ) 3 # ( . . . ) 4 c l a s s R e c o r r i d o : 5 # ( . . . ) 6 7 def s i m u l a r () : 63Simulaci´on Ejercicios
Simulaci´
on
¿D´
onde implemento la funci´
on simular?
1 i m p o r t r a n d o m 2 c l a s s M i c r o : 3 # ( . . . ) 4 c l a s s R e c o r r i d o : 5 # ( . . . )... en el c´
odigo principal:
1 i m p o r t r a n d o m 2 c l a s s M i c r o : 3 # ( . . . ) 4 c l a s s R e c o r r i d o : 5 # ( . . . ) 6 7 def s i m u l a r () : 63Simulaci´on Ejercicios
Simulaci´
on
¿Qu´
e par´
ametros recibe?
1 i m p o r t r a n d o m 2 c l a s s M i c r o : 3 # ( . . . ) 4 c l a s s R e c o r r i d o : 5 # ( . . . ) 6 7 def s i m u l a r ( n , d , m i n s ) : 64
Simulaci´on Ejercicios
Simulaci´
on
¿Qu´
e par´
ametros recibe?
“... que reciba como par´
ametros un n´
umero n de paraderos, la
distancia d entre paraderos y la cantidad mins de minutos que
transcurren entre la salida de una micro y la pr´
oxima.”
1 i m p o r t r a n d o m 2 c l a s s M i c r o : 3 # ( . . . ) 4 c l a s s R e c o r r i d o : 5 # ( . . . ) 6 7 def s i m u l a r ( n , d , m i n s ) : 64
¿Qu´
e par´
ametros recibe?
“... que reciba como par´
ametros un n´
umero n de paraderos, la
distancia d entre paraderos y la cantidad mins de minutos que
transcurren entre la salida de una micro y la pr´
oxima.”
1 i m p o r t r a n d o m 2 c l a s s M i c r o : 3 # ( . . . ) 4 c l a s s R e c o r r i d o : 5 # ( . . . ) 6 7 def s i m u l a r ( n , d , m i n s ) : 64
Simulaci´on Ejercicios
Simulaci´
on
¿C´
odigo de la funci´
on?
“Esta funci´
on debe imprimir el m´
aximo y el promedio de la
cantidad de micros que hubo en el recorrido. Cada iteraci´
on
corresponde a un minuto, y deber´
as simular por 12 horas.
Inicialmente el recorrido comienza con una micro en el primer
paradero y se genera una nueva micro en ese paradero cada
mins minutos.”
¿C´
odigo de la funci´
on?
“Esta funci´
on debe imprimir el m´
aximo y el promedio de la
cantidad de micros que hubo en el recorrido. Cada iteraci´
on
corresponde a un minuto, y deber´
as simular por 12 horas.
Inicialmente el recorrido comienza con una micro en el primer
paradero y se genera una nueva micro en ese paradero cada
mins minutos.”
Simulaci´on Ejercicios