You are on page 1of 4

PONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE

ESCUELA DE INGENIERÍA
DEPARTAMENTO DE CIENCIA DE LA COMPUTACIÓN

IIC1103 2018-2 Introducción a la Programación

Ayudantı́a I2
Ayudantes: José Pablo Dominguez - Nicolás Quiroz - Jerónimo Salazar - Tien Villalobos

Listas
Cada año, el club deportivo del DCC (DCClub), debe realizar un proceso de admisión para sus nuevos
seleccionados en las distintas áreas deportivas que hay en la universidad. Sin embargo, debido al rápido
creicimiento de alumnos en el DCC, la cosa se les esta escapando de las manos. Es por eso, que han
solicitado tu ayuda. Como alumno de Introducción a la Programación, deberás diseñar un conjunto
de funciones que facilitarán el cálculo de estadı́sticas e información sobre el estado actual del
DCClub. Te entregarán (cuando sea necesario) los siguientes datos :

Ojo: no puedes asumir que son variables de tu código


• lista de alumnos: Cuando se te entregue una lista alumnos, esta contendrá todos los alumnos en una
lista, donde cada elemento de esta es un a lista: [nombre alumno, numero alumno, deporte inscrito].
Puedes asumir que siempre vendrán de esta forma. Si el alumno forma parte de un deporte, deporte inscrito
te entregará el valor. Si el alumno es una alumno regular, deporte inscrito será un string vacı́o ('').

• lista de profesores: Contiene a todos los profesores de todos los deportes en una listas, donde
cada elemento es de la forma: [nombre profesor, deporte adherido]. Puedes asumir que todos
los profesores son válidos, y sólo hay un profesor por deporte.
• postulaciones: Corresponde a las postulaciones en un semestre. Todos los elementos son de la forma
[numero alumno, nombre profesor]. No puedes asumir que todos las postulaciones son
válidas.
Un ejemplo de una postulación válida serı́a:
[10614820, 'Juanito Perez']
Y ejemplos de postulaciones inválidas serı́an:

– [10614820, 'Juanito Perez', 'Juanita Doe'] : Esto se considerarı́a una postulación am-
bigua.
– [10614820]: Esto se considerarı́a una postulación vacı́a.
– [10614820, 'asdadasd']: Asumiendo que 'asdadasd' no no existe, este serı́a una posutlación
invalida.

Debes considerar además, que otro tipo de postulacióñ inválida, es cuando un alumno que ya es seleccionado,
intenta postular nuevamente.

Para ayudar al DCClub con este complejo problema, deberás realizar las siguientes funciones.

1
a) [0.5 ptos] def alumno_valido(numero_alumno, lista_alumnos): Esta función deberá ver si el numero
de alumno existe en la lista de alumnos, y si este no está seleccionado en ningún deporte. Recibe un
número de alumno y la lista de todos los alumnos inscritos en la universidad. La función debe retornar
True si el alumno es válido y False en el caso contrario.
b) [1.5 ptos] def posulacion_valida(postulacion, lista_alumnos, lista_profesores): Esta función
deberá verificar si la postulación es valida. Para que esto sea cierto, el alumno en la postulación debe ser
válido, debe haber al menos un profesor por postulación, y este debe existir. En otras palabras, pueden
haber postulaciones con más de dos elementos (un alumno, un profesor, y mas profesores),
o con un sólo elemento (un alumno). En cualquiera de estos dos casos, siempre se tendrá el número
de alumno. Si se cumple entonces, que se tiene al menos un alumno, y 0 profesores, ó al menos 1 profesor
válido, entonces el voto debe considerarse para calcular las estadı́sticas. Ahora bien, la postulación se
considera ambigua si hay mas de un profesor (donde al menos uno de estos es válido), y vacı́a si no se en-
trega profesor. La función debe retornar los siguientes valores en los siguientes casos, 0 -> postulación
inválida, 1 -> postulación vacı́a, 2 -> postulación ambigua, 3 -> postulación válida.
c) [1 ptos] def equipo_completo(lista_alumnos, nombre_deporte): Esta función debe retornar una
lista donde cada elementos es el conjunto completo de los nombres de los alumnos que pertenecen a la
misma selección del mismo deporte, con el nombre nombre_deporte.
d) [3 ptos] def simular_calculos(lista_alumnos, lista_profesores, postulaciones): Esta función
debe simular unas postulaciones con todo lo mencionado anteriormente. Para esto, deberá primero
imprimir las selecciones de distintos deportes, con todos sus seleccionados. Luego deberá imprimir la
cantidad de postulaciones inválidas.
Finalmente, ignorando las postulaciones inválidas, deberá imprimir los resultados. Esto es, la cantidad
de postulaciones vacı́as, postulaciones ambiguas, y postulaciones por deporte..

Archivos
Un hacker anónimo ha infiltrado la base de datos de la Universidad y ha dejado a todos los alumnos con
promedio 7. Afortunadamente (?), se encontraron las últimas notas del semestre en uno de los servidores del
DCC, pero repartidas en múltiples archivos y formatos, junto con el promedio que cada alumno necesitaba
tener en esas notas para pasar el semestre completo. Esto incluye un archivo de alumnos (alumnos.csv), un
archivo de notas (notas.csv) y el archivo de promedio requerido para pasar (requisito.csv). El formato
de estos archivos es el siguiente:

alumnos.csv notas.csv requisito.csv


id,alumno id; ramo; nota id,nota
1,tien 2; estatica; 4.5 1, 5.5
2,pablo 4; calculo2; 3.8 2, 2.1
3,constanza 7; introprogra; 6.8 3, 4.7
4,eliana 4; calculo2; 5.2 4, 7.9
... ... ...
Deberás procesar estos archivos y generar un nuevo final.csv con la información buscada por la uni-
versidad, de la forma:
final.csv

id,nombre,estatica,calculo2,introprogra,let,economia,pasado
1,tien,5.5,6.7,5.7,5.8,5.1,True
2,pablo,5.1,1.8,6.1,3.4,5.7,False
...

Siendo las columnas de cada ramo el promedio parcial obtenido en ese ramo, y la columna pasado True
cuando todos los promedios de un alumno se encuentran sobre su nota requisito y False en caso contrario.
Ten en mente que la cantidad de notas registradas de un ramo pueden variar por alumno.

2
Algunas consideraciones
• Cada alumno tendrá por lo menos una nota para cada ramo en notas.csv.
• Los ramos se encuentran con los nombres [estatica,calculo2,introprogra,let,economia] en notas.csv.

• No es necesario preocuparse de la cantidad de decimales de las notas.

OOP
El departamento de computación ha decidido iniciar un servicio de comida llamado DCCompletos, en el que
le venderán completos a los alumnos a través de un monitor en las salas, para motivarlos a que asistan a los
laboratorios de Introducción a la Programación. Para poner en acción este negocio, te pidieron que ayudes
a programar el manejo de las ordenes de comida que llegan a la cocina. Como eres visionario y crees que
este negocio podrı́a expandirse, decides modelar el problema con clases y ası́ permitir que en un futuro sirva
para replicarse con otros tipos de comida.

Tu tarea consiste en crear las clases Restaurante, Pedido y Producto, para modelar los pedidos que recibe
DCCompletos. En concreto, tu sistema debe realizar las siguientes tareas: 1) Llevar un registro de todos
los pedidos hechos durante el dı́a, 2) realizar un pedido que contenga uno o más productos ofrecidos por
DCCompletos (los productos se muestran en la tabla más adelante) 3) Indicar al comprador el precio de su
compra, el detalle de la misma y cuanto tiempo debe esperar.

A continuación se muestran las clases y métodos que deben ser implementados para el funcionamiento de la
aplicación:

Restaurante:

• init : debe contener los parámetros nombre y productos, con productos siendo una lista (de in-
stancias de la clase Producto) de todo lo que ofrece el restaurante.
• mostrar menu: no recibe parámetros y retorna, para imprimir en pantalla, la información de los
productos que ofrece.
• nuevo pedido: no recibe parámetros y usa el método mostrar menu, para mostrar los productos y
luego pregunta al usuario que desea comprar, para realizar un pedido nuevo y agregarlo al sistema.
Debe retornarle al usuario el ”id” de su pedido (por seguridad).
• mostrar detalle: recibe el id de un pedido y retorna toda la información de este (detalle, tiempo de
espera y precio final).

Pedido:

• init : recibe un id y una lista de todos los productos que contiene el pedido y los guarda para poder
obtener información de ellos.
• calcular precio: no recibe parámetros y calcula y retorna el precio total del pedido (este será la
suma del precio de los productos individuales que lo componen).
• calcular tiempo espera: no recibe parámetros y calcula e imprime el tiempo de espera del pedido (este
será calculado como el tiempo máximo de preparación de los productos individuales que lo componen).

• obtener detalle: no recibe parámetros y retorna, en forma de string, el detalle de la compra (pro-
ducto1 - precio, producto2 - precio...).

3
Producto:

• init : recibe la información de un producto (nombre, precio y tiempo de preparación y la guarda


para poder ser utilizada en un futuro.

A continuación se encuentran los productos que ofrece DCCompletos:

C. Italiano 2.000 5 min


C. Solo 1.000 2 min
Bebida 800 0 min
Churros 1.500 7 min

El siguiente código sirve de ejemplo para ver como serı́a el código principal de DCCompletos:

productos = [Producto("C. Italiano", 2000, 5), Producto("C. Solo", 1000, 2),


Producto("Bebida", 800, 0), Producto("Churros", 1500, 7)]
DCCompletos = Restaurante("DCCompletos", productos)
continuar = True
while continuar:
print("Bienvenido a DCCompletos, que quiere hacer?")
eleccion = input("1) Mostrar menú 2) Hacer pedido 3) Ver detalle de pedido 4) Salir: ")

if eleccion == "1":
print("El menú de DCCompletos es:")
print(DCCompletos.mostrar_menu())

elif eleccion == "2":


print("Comience a elegir su pedido")
DCCompletos.nuevo_pedido()

elif eleccion == "3":


numero_pedido = int(input("Indique el número de su pedido: "))
DCCompletos.mostrar_detalle(numero_pedido)
else:
continuar = False

print("Gracias por comprar en DCCompletos")

You might also like