Después de resolver la tarea 3, usted será capaz de:
En esta tarea usted deberá implementar un sitio de compra y venta de artículos. El sitio se llama Mercado Python y debe contar con las siguientes funcionalidades:
Se les entregará un conjunto de archivos que les proveerá de algunas funciones ya implementadas y otras que deben implementar con su equipo de trabajo.
Los archivos que se le entregarán los puede descargar acá y cada uno de ellos se describe a continuación:
Nota
Todos estos archivos deben estar en el mismo directorio de trabajo.
Además encontrará las siguientes carpetas: img, templates y web las que contienen las imágenes, plantillas y módulos mecesarios para el funcionamiento del sitio. NO modifique ni mueva los archivos que se encuentran dentro de estas carpetas
Una vez descargado el archivo para comenzar la tarea, descomprímalo y ejecute el archivo python store.py. Se mostrará el siguiente mensaje:
Iniciando Mercado Python 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 permite que cualquier persona pueda crear una cuenta para poder publicar artículos. Sólo debe ingresar su nombre, teléfono y correo electrónico. Esto datos servirán para establecer contacto entre cada persona y los potenciales compradores. Los datos de las personas están representados por la tupla:
persona = ("Juanito Perez", "92839283", "juanito@correo.com")
Los artículos son elementos que las personas publican en el sitio para su venta. Por lo tanto existen ciertos campos asociados al artículo propiamente tal:
Un ejemplo de un artículo en esta tarea se muestra a continuación:
articulo={"nombre": "La batalla de los tanques",
"descripcion": "Juego de tanques usando Pygame",
"precio": "10000",
"tipo": "Videojuegos",
"persona": "Juanito Perez",
"fecha": "2013-06-24"}
Las funciones que usted debe implementar con su equipo de trabajo son las siguientes:
crear_cuenta(persona): esta función debe ingresar una nueva cuenta al final del archivo cuentas.txt. Recibe como entrada una tupla con los datos de la persona ingresados en el formulario, con la estructura mostrada en la representación. La función no debe retornar nada. El formato del archivo es el siguiente:
Juanito Perez: 92839283: Juanito@correo.com
En el archivo cada línea contiene los datos de una cuenta. El nombre, teléfono y correo electrónico se encuentran separados por el caracter ”:” seguido de un espacio.
obtener_cuentas(): Esta función debe leer el archivo cuentas.txt y retornar una lista de tuplas con los datos de las personas inscritas en el sitio. La estructura de la tupla debe ser la misma señalada anteriormente.
publicar_articulo(articulo): esta función debe ingresar un nuevo artículo al final del archivo articulos.txt La función recibe como entrada el diccionario articulo y no debe retornar nada. El archivo que guarda los artículos codifica la información de la siguiente manera:
[2013-06-09][persona]: nombrearticulo% descripcion% precio% tipo
Cada línea representa un artículo distinto. Entre corchetes [] se guarda la fecha de publicación y el nombre de la persona que publica el artículo, luego sigue el caracter dos puntos ”:”, seguido por el nombre, descripción, precio y tipo de artículo, separados por el caracter “%”. Después de cada caracter “%” y después de los dos puntos ”:” hay un espacio.
filtrar_articulos(busqueda): Esta función debe filtar los artículos de acuerdo a las palabras ingresadas en el buscador. La función recibe el String busqueda que contiene las palabras ingresadas en el buscador y debe retornar un conjunto con los nombres de los artículos que coincidan exactamente con alguna de las palabras ingresadas. Considere que no importan las mayúsculas o minúsculas en las palabras de la búsqueda. Por ejemplo, al filtrar por “eL Tanque” o “El tanQUE” debe entregarse el mismo conjunto como salida de la función.
resultado_busqueda(filtro): Esta función debe entregar los resultados del filtro de la búsqueda. La función recibe como parámetro la estructura filtro que corresponde a un conjunto de nombres de artículos. Esta función debe retornar una lista de diccionarios con los artículos asociados a ese nombre.
ultimos_articulos(): Esta función debe entregar una lista de diccionarios con los dos últimos artículos publicados. Si hay un sólo artículo se debe retornar una lista con el diccionario correspondiente a este artículo. En el caso de que no hayan artículos se debería retornar una lista vacía.
palabras_clave(busqueda, texto): esta función debe destacar las palabras (busqueda) que fueron escritas en el buscador. La función recibe como entrada la variable busqueda, que representa el string de las palabras claves ingresadas en el buscador y el parámetro texto que corresponde a un string cualquiera que puede contener o no las palabras ingresadas. Para destacar una palabra debe coincidir exactamente con la palabra que se busca, no considere si están en mayúsculas o minúsculas. Por ejemplo, si se busca “tanque”, deberá destacar “Tanque” y “tanQUE”, pero no así “Tanques”. Utilice la función resaltar_texto(texto) que se encarga de cambiar el formato de la variable texto.
Se otorgará puntaje adicional si el equipo de trabajo, además de implementar las funciones señaladas anteriormente, desarrolla las siguiente función:
recomendar_articulo(): esta función se encarga de mostrar en la página principal un artículo con la finalidad de promocionarlo. La función deber retornar el diccionario que represente al artículo correspondiente. El artículo a recomendar se rige por los siguientes criterios:
Puede apoyarse con la función diferencia_tiempo(fecha) que entrega la cantidad de tiempo transcurrido en segundos entre la fecha de hoy con la variable fecha que debe ser un String del tipo “año-mes-día”.
Usted puede hacerse miembro del grupo facebook Tareas de programación. Ahí habrá ayudantes y profesores que podrían ayudarlo con dudas o consultas de la tarea.
La fecha de entrega es el domingo XX de Julio a las 23:00.
La tarea debe ser resuelta en equipos de dos o tres personas. De lo contrario habrá penalización en la nota.
Sólo uno de los integrantes del equipo debe subir la tarea en la sección Aula Virtual de la plataforma Moodle, ingresando al campus que corresponda. ¡No la suba a la sección de su paralelo!
Se debe entregar un archivo comprimido (.zip) con todos los archivos para hacer funcionar la tarea con el nombre tarea-3-RUT.zip, reemplazando RUT por 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.
Se recibirán tareas con 1 día de retraso como máximo, las cuales tienen el descuento estipulado en la rúbrica de la tarea. Si hay entregas posterior a este plazo serán evaluadas con nota cero.
Recuerde que para que todos los miembros del equipo sean evaluados, deben estar matriculados en “Alumnos de CAMPUS” (donde CAMPUS es el campus al cual usted pertenece).
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, consulte a su profesor o asista a las ayudantías.