Ricardo Torres
Preguntaalguien podría explicarme como funciona o que fue lo que se hizo con exactitud en este código, por favor no me queda todo muy claro 😦
- Clase Borracho. Primero en la clase borracho simplemente tenemos un atributo que es el nombre.
1.1. Clase BorrachoTradicional. Esta es la que vamos a ocupar en nuestro programa, y esta tiene un método muy importante que es el de aquí es básicamente donde sucede toda la magia, ya que aquí se obtienen la coordenada random.
camina(self) - Clase Coordenada. Una coordenada recibe dos datos, "x" y "y" para poder ubicarla dentro de un plano cartesiano.
- Método . Este es muy importante ya que es donde se modifica la coordenada del borracho.
mover(self, delta_x, delta_y) - Método . Este nos sirve para obtener la distancia entre dos coordenadas, preferiblemente entre la coordenada inicial y final, para ver dónde quedo el borracho.
distancia(self, otra_coordenada)
- Método
- Clase Campo. Podríamos decir que esta es una representación de nuestro plano cartesiano.
- Método . Sirve para añadir un borracho al campo(ya que podemos tener mas de uno) y a este borracho se le da una coordenada, que sería la de origen.
anadir_borracho(self, borracho, coordenada) - Método . Lo que hace es obtener un nuevo movimiento de coordenadas y crea la nueva coordenada del borracho con base a la coordenada actual.
mover_borracho(self, borracho) - Método . Nos sirve para obtener la coordenada en la que esta el borracho.
obtener_coordenada(self, borracho)
- Método
- Primero, le preguntamos al usuario del programa cuántos pasos(distancias_de_caminata) quiere que de el borracho. La variable sirve para indicar cuántas veces va a correr la simulación, recordemos que entre más una simulación corre más precisa es.
numero_de_intentos - Después, a nuestra función le pasamos los parámetros correspondientes. Un dato importante es que el BorrachoTradicional lo estamos pasando como la clase que es, no como una instancia.
main(distancias_de_caminata, numero_de_intentos, BorrachoTradicional) - Después en la función haremos un ciclo for por cada paso de nuestro número de pasos. Y creamos la variable distancias que equivale a la función
main(), ya que al final queremos hacer operaciones con las distancias.simular_caminata(pasos, numero_de_intentos, tipo_de_borracho) - Una vez llamada la función hacemos lo siguiente. 4.1. Creamos una instancia de la clase BorrachoTradicional, ahora hacemos referencia a BorrachoTradicional con
simular_caminata(pasos, numero_de_intentos, tipo_de_borracho), ya que llevamos pasando esta clase como parámetro desde hace dos funciones. 4.2. Después creamos una instancia de Coordenada llamada origen, que es básicamente la coordenada donde inicia a caminar nuestro borracho. 4.3. Después creamos una lista llamada distancias() que es donde vamos a estar guardando las distancias. 4.4. Después recorremos con un ciclo for la veces de nuestrotipo_de_borracho. 4.5. Una vez dentro del ciclo for creamos una instancia de nuestro clasenumero_de_intentosy en este campo añadimos a nuestro borracho haciendo uso del métodoCampo()de nuestra clase Campo, el método recibe dos parámetros, el borracho y la coordenada, por lo tanto pasamos la instancia de borracho y la coordenada de nombre origen que creamos. 4.6. Después de esto creamos una variable llamadaanadir_borracho()que es igual a la funciónsimulacion_caminata, y le pasamos cada uno de los parámetros que requiere.caminata(campo, borracho, pasos) - Ahora estamos en función . 5.1. Declaramos una variable
caminata()que hace referencia al métodoiniciode nuestra clase campo. La cual nos devuelve la coordenada en la que esta el borracho que le acabamos de pasar por parámetro. Si vemos nuestro métodoobtener_coordenada(borracho)de la clase campo, lo que devuelve esobtener_coordenada(), que hace referencia a un diccionario en nuestro métodoself.coordenadas_de_borrachos[borracho]de esa misma clase Campo. Y el diccionario tiene el valor del borracho, porque cuando añadimos al borracho, dentro del método__init__lo que hace es que en ese diccionario creamos un nuevo elemento con llave borracho(la llave es nuestro borracho, la instancia de la clase borracho), y a esa llave le asignamos el valor de la coordenada, que recordemos que fue la variable origen 5.2. Después recorremos un ciclo for por cada paso. 5.3. Dentro del ciclo for ejecutamos el métodoanadir_borracho(), que es un método de la clase Campo.mover_borracho(borracho) - Ahora estamos en el método en la clase Campo. Lo que hace este método es lo siguiente. 6.1. Obtenemos una coordenada(no nos referimos a una instancia de la clase Coordenada, sino a una tupla de dos valores, x y) random con nuestro método
mover_borracho(borracho). Si miras nuestro método camina() es la clase Borracho() verás que ahí es donde obtenemos la coordenada random. Esa función devuelve a la tuplas, que para separarla hacemosborracho.camina(). Delta en física y matemáticas significa cambio, así que estas dos variables hacen referencia al cambio que va a haber en "x" y "y". 6.2. Ahora creamos una variable llamadadelta_x y delta_yque hace reference al atributo que esta en nuestro métodocoordenada_actualque a su vez hace referencia a la coordenada en la que esta el borracho actualmente. 6.3. Después creamos una variable llamada__init__que equivale anueva_coordenada().coordenada_actual.mover(delta_x, delta_y)es una instancia de la clase coordenada, la cual tiene el método mover que recibe delta_x y delta_y como parámetros. Si vemos en nuestra funcióncoordenada_actualde la clase Coordenada() lo que hace es que retorna una nueva coordenada, y ahora x y y equivalen a lo que había antes más sus respectivos deltas. 6.4. De regreso en la funciónmover()de nuestra clase Campo, lo que sucede es que nuestra coordenada del borracho es igual a la nueva coordenada, y esto se hace mediante:mover_borracho()self.coordenadas_de_borrachos[borracho] = nueva_coordenada - Una vez hecho esto, volvemos a nuestra función , que es donde esta corriendo todo nuestro programa. Una vez terminando todo el ciclo
caminata()nuestro borracho habrá terminado de caminar. Y lo que hacemos es retornar la distancia haciendo referencia al métodoforde nuestra clasedistancia.Coordenada() - Ahora ya terminamos en la función , y volvemos a la función
caminata(), y estamos en la variablesimular_caminata()que es básicamente la distancia, por que es igual a lo que devolvía la funciónsimulacion_caminata, ahora esta variable se la agregamos a nuestro listacaminata()redondeando a un decimal. Y posteriormente, fuera del ciclo for retornamos nuestra distancia.distancias - Si recordamos, ahora estamos en nuestra función y la variable
main()ya tiene las distancias. Ahora proseguimos a hacer operaciones con estas distancias, como la distancia media, la distancia maxima, la distancia, minima, y en una lista llamadadistanciasagregamos las distancias medias.distancias_media_por_caminata - Después imprimimos esos valores y graficamos los datos. 10.1. NOTA: El profesor Aroesti lo que grafico fueron las distancias_media_por_caminata.
Pedro Alvarado Garcia
Claro que sí. Bueno como ya viste primero creamos las clases de los objetos principales de nuestro programa.
Esas son las clases de cada objeto con sus respectivos métodos. Ahora veamos el curso del programa y como se implementa todo esto.
Como ya lo mencioné anteriormente, el profesor Aroesti graficado la relación entre la distancia_de_caminata, que son los pasos, y las distancias_media_por_caminata. Algunos compañeros y compañeras graficaron cada paso que dio el borracho, por eso en la sección de aportes puedes ver las graficas con demasiados puntos. Si deseas hacer esto puedes basarte en el mío, aquí esta el código: https://github.com/pegadro/drunk-walk. La lógica es la misma, solo que en esta versión por cada paso agregas el paso en una lista tanto para x como para y.
Y básicamente ese es la lógica de todo el programa, al inicio es muy complejo, pero cuando lo entiendes verás que la lógica es simple y tiene mucho sentido. Espero que esto te haya ayudado.
Ricardo Torres
UFFF 1000 GRACIAS! Ya me quedo todo muy claro. Gracias por la explicación, muy buena!!
