Después de resolver la tarea 3, usted será capaz de:
Estamos a días del comienzo de la Copa América y como buenos anfitriones queremos saber qué es lo que está ocurriendo con todos los equipos de esta gran copa. Es por esto que surge la necesidad de tener un sistema que vaya almacenando la información de los resultados de los partidos en todo momento. Para lograr esto, se les pide a ustedes, los estudiantes del ramo de Programación de la UTFSM, que implementen un sistema en python que sea capaz de manipular distintos tipos de archivos, con la información más importante de la copa América, con el objetivo de alimentar un sitio web que vaya mostrando el avance de esta copa, en donde podrán visualizar los distintos resultados de los partidos.
Para esta tarea, usted deberá implementar un sistema de gestión de resultados de los distintos partidos llevados de la copa América. El sistema, una vez que haya sido implementado, deberá contar con las siguientes funcionalidades:
Para permitir que el sitio web cumpla con las funciones anteriores, se les entregará un conjunto de archivos que les proveerá de algunas funciones ya implementadas y otras que ustedes deben implementar con su equipo para el correcto funcionamiento.
Los archivos que se le entregarán los puede descargar acá. A continuación se mencionan los distintos archivos y la función que cumplen dentro del sistema.
Una vez descargado el archivo para comenzar la tarea, descomprímalo y ejecute el archivo main.py. Se abrirá una ventana como la que se muestra a continuación:
# Iniciando Sistema de Registro de Copa América en http://localhost:8080
Este mensaje indica que el servidor web que contiene el sitio se está ejecutando de manera local. Abra su navegador preferido (chrome, internet explorer, safari u otro) y escriba la dirección http://localhost:8080/, se debería mostrar la página web que aparece en el video.
El sitio se divide en las siguientes secciones:
El sitio cuenta con una barra de navegación que permite entrar a cada uno de los sitios mostrados anteriormente.
El sitio web permite que cualquier persona realice cambios en la información. Para mantener la completa integridad del sistema es importante respetar la representación de las distintas estructuras que se les entrega a continuación. De lo contrario, el sistema podría responder de una forma inesperada.
Todos los archivos de texto presentes en el sistema mantienen una estructura similar. Cada valor se encuentra separado por el siguiente caracter ”;”. Por ejemplo, el archivo grupos.dat se presenta de la siguiente forma
# grupos.dat: país;grupo
Por lo tanto, cuando usted realice inserciones sobre el archivo, para mantener actualizada la información de los equipos en el sistema, deberá realizarlo manteniendo dicha estructura.
El archivo partidos.dat mantiene la siguiente estructura
# partidos.dat: país1;país2;marcador1;marcador2
Es imporante señalar que este es un archivo temporal que permite que sea posible agregar la información final del marcador sólo cuando se agrega un partido. Por lo tanto, cuando ustedes creen un partido, deberán guardar en este archivo la información del partido tal cual se plantea acá. Una vez que el partido haya sido procesado y que los resultados hayan sido guardados en el archivo correspondiente, este archivo debe cambiar su estructura manteniendo solamente una línea con el dato NULL (tal cual viene adjunto con los archivos de la tarea).
El archivo resultados.dat mantiene la información final de los partidos. Este archivo no se debe sobrescribir, solamente debemos insertar registros al final de este. Su estructura es la que se presenta a continuación
# resultados.dat: país1;país2;marcador1Final;marcador2Final
Manteniendo este formato es posible obtener la información que se necesita para poder actualizar la tabla de posiciones y almacenar dicha información en el fichero.
detalles_partidos.dat. Al igual que resultados.dat, este archivo no se debe sobrescribir, sino que las inserciones deben hacerse siempre al final. Su estructura es la que se presenta a continuación
# detalle_partidos.dat: país;PJ;PG;PP;PE;GF;GC;DI;PTS
con
# PJ: Partidos Jugados.
# PG: Partidos Ganados.
# PP: Partidos Perdidos.
# PE: Partidos Empatados.
# GF: Goles a favor.
# GC: Goles en contra.
# DI: Diferencia de goles.
# PTS: Puntos.
Al momento de realizar el cálculo de los equipos clasificados, en caso de empate el orden de desempate es el que se presenta a continuación: puntos, diferencia de goles, goles a favor. De mantenerse el empate, escoger a cualquiera de los dos equipos.
Para el conteo de puntos se consideran 1 punto por empate, 3 puntos por partido ganado y 0 puntos por partido perdido.
El archivo cuarto_de_final.dat mantiene el registro de los equipos en cuarto de final junto al resultado que se obtuvo entre ambos, la estructura que presenta es la siguiente
# cuarto_de_final.dat: CodigoPartido;Equipo1;Equipo2;GolesEquipo1;GolesEquipo2
Este archivo inicialmente presenta por defecto la siguiente estructura, que corresponde a la información general de cuartos de final, esta información debe ser sobreescrita una vez se hayan jugado los partidos de la primera fase y se sepan la tabla de posición final de cada grupo
# cuarto_de_final.dat:
# P2;A2;C2;0;0
# P3;B1;3ero2;0;0
# P1;A1;3ero1;0;0
# P4;C1;B2;0;0
En donde
# PX: Significa el partido X de los cuartos de finales.
# A1: Se entiende como el primer lugar del grupo A, se aplica lo mismo para los grupos B y C, es decir quedaría, B1 y C1
# A2: Se entiende como el segundo lugar del grupo A, se aplica lo mismo para los grupos B y C, es decir quedaría, B2 y C2
# 3ero1: Se entiende como el mejor tercero. (El equipo que obtuvo mejor puntación de los que están en tercer lugar.)
# 3ero2: Se entiende como el segundo mejor tercero. (El equipo que obtuvo la segunda mejor puntación de los que están en tercer lugar.)
El archivo semi_finales.dat mantiene el registro de los equipos en semi final junto al resultado que se obtuvo entre ambos, la estructura que presenta es la siguiente
# semi_finales.dat: CodigoPartido;Equipo1;Equipo2;GolesEquipo1;GolesEquipo2
Este archivo inicialmente presenta por defecto la siguiente estructura, que corresponde a la información general de semi finales, notar que acá los equipos que se enfrentarán corresponden a los ganadores de los partidos PX y Py, por ejemplo para el caso del partido 6 (P6) los equipos que se enfrentan son los ganadores del partido 1 y 2 de los cuartos de final
# semi_finales.dat:
# P6;P1;P2;0;0
# P5;P3;P4;0;0
El archivo finales.dat mantiene el registro de los equipos en final junto al resultado que se obtuvo entre ambos, la estructura que presenta es la siguiente
# finales.dat: CodigoPartido;Equipo1;Equipo2;GolesEquipo1;GolesEquipo2
Este archivo inicialmente presenta por defecto la siguiente estructura, que corresponde a la información general de la final
# finales.dat:
# P7;PerP5;PerP6;0;0
# P8;GanP5;GanP6;0;0
importate Existe una estructura de datos que describe todo el proceso de clasificación una vez terminada la fase de grupos. Esta estructura está definida en el archivo definiciones.py y debe ser actualizada cada vez que se obtengan resultados de marcadores durante cuartos, semi o final respectivamente. Actualizar esta estructura permite que el sistema muestre en el sitio web el nombre de los equipos una vez que se conocen los ganadores. Este diccionario es enviado en main.py a los distintos templates para mostrar su información.
Las funciones que usted debe implementar con su equipo de trabajo son las siguientes:
registrar_partidos(partido): esta función recibe como parámetro el diccionario,``partido``,que contiene el nombre de de los equipos que se enfrentarán en un partido. Su estructura se describe como sigue, notar que esta función se realiza sólo para la primera ronda de partidos, para los partidos de cuartos de finales hacia adelante se debe realizar de forma automática en base a las reglas de la competencia, descritas en cada archivo correspondiente a la etapa que se deba juagar (cuartos, semi, final)
# partido = {"equipo1": nombre_equipo, "equipo2": nombre_equipo2}
El resultado de esta función es el de escribir en el archivo partidos.dat la información de los dos equipos que se enfrentarán en un partido, en base a la descripción que se dió anteriormente. Importante: se debe validar que los equipos pertenezcan a un mismo grupo a la hora de enfrentarse a un partido o que no hayan jugado un partido anteriormente. La función devuelve True o False según se pueda o no agregar el partido.
obtener_equipos(): esta función devuelve una lista con la información de todos los países que están registrados en el sistema, para ello, debe hacer uso del archivo grupos.dat que mantiene la información de los países y grupos. No recibe parámetros de entrada y la estructura de la lista que devuelve se presenta a continuación
# equipos = [pais1, pais2, pais3, ... , paisN]
ingresar_equipos(equipo): esta función recibe como parámetro un diccionario con la información del equipo que se quiere ingresar al sistema. Luego de validar esta información, la función devuelve True o False según se pueda o no agregar el equipo. El resultado de esta función corresponde a una inserción en el archivo grupos.dat con la información del equipo y el grupo al cual pertenece (Esta información es útil para la función obtener_equipos()). Asimismo, se debe crear un registro en detalle_partido.dat con todos los valores inicializados en 0 (con excepción del nombre del equipo). Esto se debe a que a partir de este momento el equipo es considerado para la tabla de posiciones.
importante: para validar los equipos y los grupos, se dispone de una estructura de datos en definiciones.py. Esta corresponde a un diccionario con la información correcta de cada equipo y grupo. Úsela para validar.
actualizar_fecha(): esta función debe procesar la información que se va registrando tras cada partido en resultados.dat para escribir la información de cada fecha en detalle_partidos.dat. En otras palabras, según el resultado de los partidos, esta función debe determinar los ganadores, perdedores, puntajes y goles asociados, información que es escrita en detalle_partidos.dat. La información que se almacena en este archivo detalle es tomado luego por la función tabla_de_posiciones para desplegar el contenido en localhost:8080/resultados/. Esta función no retorna ni recibe ningún parámetro. Para el tratamiento de la información, esta función sobre escribe el archivo detalle_partido.dat cada vez que es invocada.
actualizar_partido(partido): esta función debe agregar el resultado de un partido al archivo resultados.dat. Para ello recibe como parámetro un diccionario que presenta la siguiente estructura
# partido = {"equipo1": (nombre_equipo,cantidad_goles), "equipo2": (nombre_equipo2,cantidad_goles)}
A partir de esta información se debe registrar el partido en el archivo antes mencionado. Es importante destacar que una vez que sea registrado el partido en su archivo correspondiente, al archivo partidos.dat debe sobrescribirse con un único registro que contenga el string ‘NULL’ (de esta forma main.py reconoce que no hay partidos jugándose en un determinado momento)
Esta función no recibe ningún parámetro, ni devuelve ningún valor.
La fecha de entrega es el Lunes 29 de Junio a las 23:00 hrs vía Aula`_.
La tarea debe ser resuelta en equipos de dos o tres personas.
Sólo uno de los integrantes del equipo debe subir la tarea en la sección Tareas de la plataforma Aula, en el ramo de Programación IWI131.
Se debe entregar un archivo comprimido (.zip) que debe contener todos los archivos para hacer funcionar la tarea con el nombre tarea-3-RUT.zip, reemplazando RUT con el RUT del integrante que subirá la tarea. Sólo debe ir la parte del RUT hasta antes de la raya. Por ejemplo: tarea-3-18000123.zip.
Al principio del archivo funciones.py se debe poner un comentario indicando los RUT de los integrantes del equipo como en el siguiente ejemplo:
# Integrantes:
# 18000123-0 Perico Los Palotes
# 18000456-7 Fulanita de Tal
# 18000890-k Federico Santa Maria
No se puede subir ningún archivo adicional.
Evite dejar para última hora la entrega de la tarea. Cerca del plazo final, la plataforma seguramente estará sobrecargada.
Las tareas atrasadas (máximo un día de retraso) tendrán el descuento especificado en la rúbrica de corrección. NO se recibirán tareas por por correo electrónico.
Los equipos de trabajo pueden ser los mismos de la tarea anterior, pero recuerde que deben ser de 2 ó 3 personas.
Usted puede discutir la tarea con compañeros de otros grupos, pero bajo ningún motivo puede compartir o copiar el código de su tarea. Cada equipo debe escribir su propio código.
Las políticas de copia de la asignatura rigen para la tarea.
En caso de tener problemas con el desarrollo de la tarea, asista a las ayudantías o consulte en el grupo de facebook.