Materia
Ejercicios


Tarea 3: El Mercado Python

Objetivos de aprendizaje

Después de resolver la tarea 3, usted será capaz de:

  • Operar sobre un archivo con una estructura pre-definida de datos,
  • Realizar procesamiento de texto sobre datos con un formato específico,
  • Conocer código html para el desarrollo de una página web,
  • Guardar datos en un archivo.

Enunciado

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:

  • Crear cuentas de usuarios para el sitio.
  • Publicar artículos para ponerlos en venta.
  • Buscar artículos que hayan sido publicados.

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.

Archivos

Los archivos que se le entregarán los puede descargar acá y cada uno de ellos se describe a continuación:

  • store.py, este archivo es el encargado de levantar el servidor que permite ver el sitio. No modificar, a menos que quieran personalizar su tarea.
  • funciones.py, archivo que contiene algunas funciones implementadas y otras que deberá implementar usted para el correcto funcionamiento del sitio.
  • definiciones.py, archivo que contiene algunas definiciones de nombres e íconos que utiliza el sitio.
  • articulos.txt, archivo de texto que contiene los artículo que se han publicado en el sitio.
  • cuentas.txt, archivo de texto que contiene las cuentas de los usuarios del sitio, que están habilitados para publicar artículos.

Nota

Todos estos archivos deben estar en el mismo directorio de trabajo.

Además encontrará las siguientes carpetas:

  • templates, contiene los archivos html usados para el sitio.
  • web, contiene módulos de python que se encargan de ejecutar el servidor web.
  • static, contiene otros archivos y carpetas que se encargan de la apariencia del sitio web.

Personalización del sitio web

Opcionalmente se podrá personalizar el sitio web, ver el siguiente link. para mayor información.

Funcionamiento

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:

  • Página Principal: se muestra al escribir la dirección http://localhost:8080. En este sitio se muestran recomendaciones de artículos y últimos artículos publicados en el sitio.
  • Crear Cuentas: se muestra al escribir http://localhost:8080/cuentas. Aquí una persona puede crearse una cuenta para poder publicar artículos.
  • Publicar Artículos: se muestra al escribir la dirección http://localhost:8080/publicar. En esta página se publican nuevos artículos para su venta.
  • Buscar Artículos: se muestra al escribir http://localhost:8080/buscar. Permite encontrar artículos publicados en el sitio utilizando ciertos filtros.

El sitio cuenta con una barra de navegación que permite entrar a cada uno de los sitios mostrados anteriormente.

Representación

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:

  • Nombre del artículo
  • Una breve descripción que explique el artículo. Puede establecer características o algún dato que pueda proporcionar más información de lo que se desea publicar.
  • El precio, que corresponde al valor en que se venderá el artículo publicado.
  • El tipo de artículo, que es una clasificación con la palabra relacionada. Hay seis tipos distintos: “Accesorios”, “Animales”, “Computación”, “Deportes”,”Inmuebles” y “Videojuegos”. En el caso de que el artículo no tenga relación con uno de los conceptos anteriores está el tipo de artículo “Otro tipo”.
  • El nombre de la persona que publica el artículo.
  • Fecha de publicación del artículo.

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"}

Qué hay que implementar

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 es el retorno de la función filtrar_articulos(). 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.

Bonificación

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:

    • Se escogen los artículos que hayan sido publicados con la fecha más antigua.
    • De los artículos escogidos en el punto anterior, se promociona el que tiene menor valor. De esta manera se promocionan las ofertas que lleven más tiempo en el sitio.

    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”.

Consideraciones

  • Sólo están permitidos los siguientes caracteres: espacios, letras minúsculas (a-z), letras mayúsculas (A-Z) y números (0-9). Algunos campos en las páginas limitan el uso de ciertos caracteres. Para el campo descripción se podrá usar además el punto ”.” y para el correo electrónico se permitirá el uso de los caracteres arroba “@” y punto ”.”
  • No utilice otros caracteres, ni eñes (“ñ”), ni acentos.
  • Puede implementar otras funciones, además de las que se solicitan para pasos intermedios que le permitan obtener la información solicitada en las funciones.
  • Puede utilizar comentarios en las funciones para explicarlas.

Ayuda

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.

Entrega

La fecha de entrega es el Viernes 13 de Diciembre 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.

Políticas de copia

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.