Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
1 Universidad de los Andes Facultad de Ciencias Económicas y Empresariales Ingeniería Comercial Programación y Manejo de la Información 3-2020 Ayudant́ıa 1 4 Examen Consultas 23 de Noviembre de 2020 Profesores: Andrés Kipreos - Agust́ın Lagos - Stefan Elbl Ayudante: Jorge Rivas 1. SQL (Anidada con agregación) Para esta pregunta se utilizará la base de datos de Invoicing ya utilizada en ejercicios anteriores. La base está compuesta por 4 relaciones: Cliente, Invoices, Payment_methods y Payments. Para hacer un recordatorio general se abordará una pregunta que incorpora tanto componentes de una consulta anidada y como de una consulta de agregación. - A partir de los clientes que han realizado pago (total o parcial) de las facturas adeudadas, consiga el nombre del cliente que sume el mayor monto (sumando todos sus pagos realizados), la suma del monto y uno de los métodos de pago utilizado (dado que pudo utilizar más de uno. Respuesta: SELECT c.name, ii.client_id, pm.name, ii.total FROM (SELECT i.client_id, i.invoice_id, SUM(payment_total) as total FROM invoices i WHERE i.payment_date IS NOT null GROUP BY i.client_id) ii JOIN clients c ON c.client_id = ii.client_id JOIN payments p ON p.invoice_id = ii.invoice_id JOIN payment_methods pm ON pm.payment_method_id = p.payment_method WHERE ii.total IN (SELECT MAX(aa.total2) FROM (SELECT SUM(a.payment_total) as total2 FROM invoices a WHERE a.payment_date IS NOT null GROUP BY a.client_id) aa); 2 2. Condiciones borde y Validación. 2.1 Siempre que se programa se deben considerar condiciones borde, pero que es una condición borde? Es una condición que hace que el programa no funcione como estaba diseñado. Básicamente la idea es siempre programar pensando en que alguien va a querer romper o engañar tu programa. Pongamos un ejemplo, escriba un programa que le pida al usuario un número y usando un while haga un print de una cuenta regresiva de ese número hasta cero. Ahora, ¿qué pasa si el usuario ingresa un número negativo? Este sería un caso borde. ¿Cómo lo solucionaría? Solución: n=int(input("Ingrese un número: ")) while n<0: n=int(input("Numero inválido. Ingrese otro número: ")) while n>=0: print(n) n-=1 Para evitar casos borde como el anterior se pueden aplicar validaciones, es decir, se puede pedir el input del usuario en un while que valide cada vez que se ingresa el dato. Por ejemplo: 2.2 Escriba un programa que primero le pida el precio de un producto (validando que sea un número mayor a cero) y después que le pida cuanto se pagó por el producto y valide que el pago sea mayor al precio. Si el pago es menor pida al usuario que ingrese nuevamente el pago. Solución: precio=float(input("ingrese el precio del producto: ")) while precio<=0: precio=float(input("ingrese el precio del producto: ")) pago=float(input("ingrese cuanto se pagó: ")) while pago<precio: pago=float(input("ingrese cuanto se pagó: ")) print(int(pago - precio)) 3 3. Diccionario 3.1 Escribir un programa que cree un diccionario simulando una cesta de la compra. El programa debe preguntar el artículo y su precio y añadir el par al diccionario, hasta que el usuario decida terminar. Después se debe mostrar por pantalla la lista de la compra y el coste total, con el siguiente formato. Solución basket = {} more = 'Si' while more == 'Si': item = input('Introduce un artículo: ') price = float(input('Introduce el precio de ' + item + ': ')) basket[item] = price more = input('¿Quieres añadir artículos a la lista (Si/No)? ') cost = 0 print('Lista de la compra') for item, price in basket.items(): print(item, '\t', price) cost += price print('Coste total: ', cost) 3.2 a) Escribir un programa que cree un diccionario lo vaya llenado con llaves que describan a una persona (por ejemplo, nombre, edad, sexo, teléfono, correo electrónico, etc.). Inicialmente cada valor debe quedar con listas vacías. Al finalizar se debe imprimir las llaves del diccionario Solución def diccionario(): global personas personas = {} more = 'si' while more=='si': key = input('¿Qué dato quieres introducir? ') value = [] personas[key] = value more = input('¿Quieres añadir más información (si/no)? ') print("Las llaves creadas en tu diccionario personas son:",personas) 4 Para trabajar con diccionarios se pueden crear múltiples funciones y estas pueden quedar a la medida de uno según lo que uno vaya necesitando. b) Intenta crear una función en la cual se le entrega un diccionario y esta imprime las llaves de este. Solución def consultar(x): print(x.keys()) c) Inventa una función en la cual se puedan agregar valores a un diccionario ya creado. Solución def agregarValores(x): y= 'si' while (y =='si'): for key in x: valor = input('que valor quieres agregar a la llave '+ key +'?') x[key].append(valor) y=input('¿Quieres añadir mas valores a la lista (si/no)? ') print(x) Las soluciones no son únicas y existen múltiples formas de resolver un problema. Éxito en el Examen !!!!
Compartir