Sie sind auf Seite 1von 70
QEUVVGVEVESSVVVESBVIIIDIDVVGC LLU LE Eee a eee ou FUNDAMENTOS DE PROGRAMACION — 1! PARCIAL CONCEPTOS FUNDAMENTALES Fanci Una funcién es un conjunto de instrucciones que permite resolver una tarea en especifico. Las funciones, también conocidas como médulos, son muy utilizadas para dividir un problema comple en pequenios problemas mas faciles de manejar, Es una estrategia conocida como PROSRAMAGION MODULAR. ser Daramet ron) : return var lable ¥ nombrefuneiones: Nombre de la funcin v parametro1, parametro2, ..., parametroll: Son los parametros que recibe la funcion. Pueden ser: datos primitivas como valores enteras o reales, 0 también objetos tales como las coleccionas. Notese que tambien una funcian puede no recibir parametros. V instruceiones: Conjunto de sentencias que realizan la terea especificade por el programedor, dependionde de los pardmetros que recibe la funcién, ¥ return: Sentencia especial que contiene un valor, 0 un conjunto de valores que serén devueltos p7or la funcion, No todas les funelones retomnan valores, tal es el caso de les que modifican referencias de memoria como las calecciones o les que simplemente muestran mensajes al usuario, como si fuera un ment. Ejemplos: def contarl tos (numero) = totalnuneros while nunero > numero / totalNumeros return totalNumeros def rene (): print(” =) print (" r my peint(" » Parémetros Opcionales: Existen ciertos casos en donde una funcién recibe parémetros opcioneles, cuande se desea realizar una tarea en especifico. Si este panémetro no es especificada coma argumento en la funcién, al momento de llamarla en e| programa principal, tamara su valor por defecta que fue asignado cuando se definid su firma, PEPELUCHO 4 FUNDAMENTOS DE PROGRAMAGIGN ~ |! PARCIAL arametrobligatorio, parametroOpcional = valor): ¥_nombreFuncion: Nombre de la funcién. ¥” parametrollbligatario: Es el pardmetro que recibe le funcién, puede que una funcin no reciba parémetros obligatorios. pero si opcianales. Y parametroOpeionat: Es el pardmetro que va a tomar un valor por defecto, y que puede ser pasado 0 no en Ie funcién. En caso de que no se pase su valor en la funcin, se trabaja con el valor por defecta, y en casn de si hacerlo, se trabaja con el valor del parémetro naturalmente, ¥ instruceiones: Conjunto de sentencies que realizan la terea especificada por el pragramadar, dependiendo de los parémetras que recibe la funcién Fjemplo: def sumar(a, b= 1): return a +b umar (2, 3) sunar (5) Como se puede apreciar, el valor por defecta que toma el segundo parametro de la funcion es 1. En al primer caso, se le eetén pasando los valores de los dos sumandos, lo cue! retomaré una suma con un valor de 5 y seré slmacenado en la variable c. En cambio, se hace un segundo llarmado a fa funcién sumer, la cual recibe como parametro un nica nimero, el cual es el 5 y como no recibe el segundo parémetro, entonces él toma el velar por defecto asignado, 1 El valor de la suma que serd asignado en la variable d es 6 Pase de Parémetras por Valor y per Referenci Cuando se trabajan con funciones, los parémetras pueden ser de distintos tipos. Entre ellos se encuentran los numeros enveros y reales, las cadenas de caractares, les colecciones y los abjetos (FOO ~ Programacién Orientade ¢ Objetos) Sin embargo, para el alcance del curso de Fundamentos de Pragramacién, se cansideran dos Uipas en especffica: “ Datos primitives: Son los tipos de datos més sencillos en cualquier lenguaje de pragramacién. Para el caso de Python, se consideran primitives los nameros entoros y reales, las cadenas de caracteres y los booleanos. Y Datos compuestos: Son aquellos datos que estén compuestos por dos o més catos primitivos. Entre ellos se encuentran fas colecciones (aleance de Fundamentos de Programacién). y los objetos (POO - Programacién Orientada a Objatos) PEW 2 UULUVEVULUUS EDU D DUST UO VU UCU UL UL RL RLU SOS USER ELOY FUNDAMENTOS DE PROGRAMACIGN — 11 PARCIAL Resaltar esta diferencia con respecte @ los tipas de datos es importante al momenta de trabajar can funciones, dado que, en cualquier lenguaje de orogramacion, se trabaja con un concerto muy elemento respecte al paso de los parémetros hacia éstas. Quando las funciones recisen datos primitives como parametros, se lo conace coma el pasa de pardmetros por waler. En este caso, los valores que almacenan este tipo de variables son copiados dentro de la funcién, por lo que dentro de éstes se trabajan con las copias. Ejemplo: sumar (c,d) print(c, d,s) Lo que da como resultado lo siguiente: 10213 Como se puedo apreciar, en la funcién sumer, se esté alteranda el parémetro b, aumentandolo en uno, y asigndndose el valor actualizada en si mismo. Sin embargo, se esta trabajando con la copia, por lo que es correct que se muesine por pantalla e! vaior de d sin alteraciones, En cambio, cuando las funciones reciben datos compuestos como perémetros, se la conoce como el paso de pardmetros por referencia. Cuando se tiene este caso, lo que se pasa en sia le funcion, es fa direccion de memoria de la varieble que nunero // mero % 11 return =Bercicio 2 Un ndmero Armstrong, es un numero cen digitos en el cual la sumatoria de la enésima potencia de cada uno de sus digitos, da el nimere original. Ejemplo: Si os nimero Armstrong No es numero Armstrong Si es numera Armstrong 6'=6 702: 79 + 09 + 29 = 251 1634: 14 + 64434444 = 1634 Usted debe implemeniar en Python: 1. La funcion contarBigitastnumero), la cuel calculard la cantidad de digites que posee el nimero, 2. La funcién esNumeroArmstroag(numera), a cual retornaré verdadere o falso en el caso que el nimera sea Armstrong 0 no. PEPE LUCHO 11 FUNDAMENTOS DE PROGRAMACION — 11 PARGIAL # Se modifico la funclon sunarbigi to: al que se Tama expo: que edad que cual qu #a la primera pot siempre sera ¢ # Co el pardmetro ox facili # coNumeroArmst ron ele: suma es la canti # explica probl def cum tos(aumero, exponente = 1) suma = 0 while nunero > (: suma += (numero % 10) nunero //= 16 return suma dof cont ariiigi tos (mumero) : Gigitos = 0 while numero > 0: digitos +=) numero //= 16 return digitos def ostiumer Arm! rong (mumere) + totalDigitos = cont itos (numero) sunaDigitos = sumarDigitos(nunero, totalDigitos) return sumaDigitos == numero Nétese que en ningin momento el enunciado pide la funcién que realiza la suma de los digitos, sin embargo, eso no restringe el uso de ella, puasto que se la puede crear para facilitar al trabajo. = Hereicio 3 La persisteneia aditiva de un nimero entero se calcula sumando sus digitos y en caso que esta sumatoria tenga mas de un digito, se repetiné el proceso sobre esta, hasta slcanzar un tnico digito, La cantided de veces que se requiera realizar la sumatoria hasta obtener un unico digito se denorrina persistencia aditiva. Por ejemplo: ¥ Elnumero 1234 tiene una persistencia aditiva de 2 (1234 > 10-> 1} Y Elnamero 5978 tiene una persistencia aditiva de 3 (S976 -> 29 -> 11 -> 2) ¥ Elniimero 9 tiene una persistencia aditiva de O. Austed se le solicita implementar en Python: 1, Le funcién caleularPersistenciaAditiva, la cual recibe como pardémetro un numero entero positive denominado mimera y retoma su persistencia aditive. FEPELUCHD 42 FUNDAMENTOS DE PROGRAMACION — 11 PARGIAL Para la solucién de este problema, se debe idantificar el patrén asociado. Como se puede ver, la persistencia aditiva no es mas que la cantidad de veces que se suman los digitos hasta que el total de digitos sea igual @ un solo numero (Gondicién del tazo while). Con esto ya se tiene clare la idea de la solucién del problema, eer rbigitos (numero, exponente = ama while numero > 0: (uumero % 10) *® exponente numero //= 10 return suma def cont arpigitos @mumero) + gitos = ( while mmero > 0: digitos numero //= 10 return digitos def calcula: Persistenciaad (numero) : totalligitos = contarDigitos (numero) numAux = mumero persistencia = while totalDigitos >t # Una vez contados los sus digitos suma = sumerDigi tos (aumAux) # Se procede a digitos de la suma, puesto que e: actualizara la an ¢ 220 while totalDigitos — con! /suma) # Se debe actualizar el en la siguiente 1 # actual mumAux = suma persistencia += return persistencia tos del primer nimera, se procede a nimera con el valor de la suma, puesto que eracién debe sumar lo que se obtuvo en la Implemente la funcién imprimir_palabrastmensaje) que muestre la frecuencia en que cada palabre eparace on ol toxto dal mensaje y que se imprima. Ejemplo: La salud y la prosperidad en la vida en->1 » la->3 prosperidad -> 1 ‘salud -> 1 vide > 1 yor PEPE LUCHO 13 FUNDAMENTOS DE PROGRAMACION TI PARGIAL Imprimir la lista de palabras en orden y almacene las palabras en rrindsculas, cade palabra esta ‘separade por espacio en blanco en el mensaje de texto. Implementar una funcién imprimir_pals_toptmensaje) la cual es similar a la anterior pero que muestre las 5 palabras con mayor frecuencia. Esoribe un programa que solicite un mensaje de texto y luego muestre al siguiente mend: Ment de opciones: 1. Cuenta palabras 2. Palabras mas frecuentes 3. Salir Elija una opeién: Nota: Valide las entradas de texco en el programa. No debe caerse cuando se ingresa una letra 8n vez del numero solicitado, Y si se ingresa el numero, validar que est en el rango permitido ‘Tambien debe validarse de que no ingrese un mensaje vacio. El menu debe mostrerse hasta que el usuario decida salir. mejor forma de dividir el problem cipal, es dividiéndolo en # mismo que sera util en las dos opciones de meni. def Conta: Paisbras (mensaje): Si cede @ trabajar con un diccionario por oficiencia on cuante # a tiempo de ejecucién, y facilidad de busqueda # Ia clave ser4 la palabra, y el valor, 1 i de veces F que ce en el mensaje dicPalabras = () palabras = mensaje. lower () .strip() -aplit( for palabra in pelabras: #51 lag a no existe en el la procede #a crear, asignando coms valor 1, nta la 4 palabra not in dicPalabras dicPalabras{palabra] = 1 aso de cxistiz, cole se ubticne su lo procede a actualizar, aunentand dicPalabras[palab¥a] += i raturn dicPalabras PEPELUCH 14 PUSLUEUGEEDISEIISITITIIDISUIULGLVUB VDSS ST OVUULY FUNDAMENTOS DE PROSRAMACIGN ~ 11 PARCIAL # Como Las dos opciones imprimirdén en pantalla, Lo m # es realizar una f se encargue de mostrar # puesto que permitird ahorrar Lineas de cédige y opt # be cone parame! ras 1a a do po * e cada elemento es una tupla (palabra, repeticiones) # y un pardnetro opcicnal que es 1a cantidad a # mostrar. Tiene valor por defecto 5, lo cual gerd atil # pare mostrar las palabras top. det nostrartensaje(QistaPalabras, cantidadMostrar = for i in range(cantidadMos*rar): palabra = listaPalabras[i}{01 repeticiones = listaPalabras{11(2] print (” \" & (palabra, repeticiones)) # Bhora so procede a # para la primera of la funeion de impr ion del nent. r palabras dof imprimir palabras (mensaje) + palabras = contarPalabras(nensaje) palRepet = list (palabras.items()} palRept..sort 0 totalPal = len (palRepet) nostrarMensaje(palRepet , totalval) lementar la funcién de # Se procede a i ganda opcién del ment # para la def imprimir pals top(mensaie) alabras = contarPalabras (mensaje) palRepet icion list (palabras. itens()) totalPalabras = len(palRepet iciones) if totalPalabras < # Ordena los elex ), tomande en cucnta # el primer elemento de 1a tup # Es decir, ordenara con respecto a >: # Jo cual ou pide ¥en or bético ascendente. palRepeticiones. sort () nostrarMensaje(palRepeticiones, totalPalabras) eleo: ar prim > por numero de repeticiones, por esc esta llamada de funcién anéx hace s sin necesidad de crear otra funcién, # # ¥ # donde intercambia la palabra por la repeticiéa, y ésta # 5 pasa como clave. Con esto di H doscondonte, y # palabras que mas palRepeticiones palRepet iciones] palRepet iciones. sort (reverse~True) topPares = palRepet iciones{:5] topPares = [(pal, repet) for repet, pal in topPares] topParas..sort () mostrarMensaje (topPares) ordenard por repet un slicing para tea ordenadas £ Se procec alidar las entrai def valida a (moneaje) aNeusaje = mensaje.stripQ return len (mensaje) — 0 PEPE LUCHO 15. FUNDAMENTOS DE PROGRAMACION — 11 PARCIAL Menu(opcion, Limitetnferio: » Limitesuperior): opRux = int (opclony return not (opAux > limiteSuperior or opAux < limiteInfers except: roturn False mostraré ol meni por p. def mom): printc’ ? print (" 2 eine"). Yala “ " Print(". » Con todos los problemas pal con lo indi salir = False while not salir: mensaje = input ("20:0 # cede a util a funcion idacién para # Ja entrada de texto while validarEntrada(nensaje): Brant ("Hs or un) mensaje = inp %y ff Se procode a inprim menu() opcion = input ("ngrese ope fou {1 # Se procoda a validar te de ida whilo not validaropeicnttena (opcion, print ("metin ne maida") opcion = input ("! ne 3 tina: ves iada, ° nimero entero. opcion = iat (opcion) # Utiliza 1a funcién de imprimir palabras pare la opcion Af opcion = 1: imprimix palabras (mensaje) @ vtiliza 12 de imprimir pals top par elif opcion 2: inir_pals_top(meneaie) 2a salir, se cambla la cat f rompa el azo. peion # bandera elif opcion = salir = True printg PEPELUCHO 16 PUULOUVUODEVEVEEEED SSS DISET EULGVLVVVIVIISIS DEI FUNDAMENTUS DE PROSRAMACIGN ~ 1! PARCIAL * Ejercicio 5 Dada una lista de nimeros, implemerte una funcién que escriba en un archiva los nimeros ordenados de manera descondente. Solucign: Hota fancisn 0 1a lista que coutiene los nameros # ¥ el nombre del ar # Ejemplo: numeros def onoril ListaEscribir = numeros{: } ListaEscribir.sort (reverse=True) f= open(nombrearchivo, "") for numero in listaliscr ibir ren el seu guiente sentenria Dada el archivo con el siguiente formato: January,31 February, 28 Maroh,31 December,31 Implemente una funcién en Python que retorne un diccionario con los meses del afio y sus respectivos dias. # Funcién que recibe ol @ del archivo que cx del an io, donde su clave es el mes, y el valor # Los dias que posee cada mes. Je tot def cargarmeses (nombrearchivo): meses = {} f = open(nombroarchivo, ":") for line in f: elenentos = line.strip() -split(",” mes tos [0] . lower Q .stripQ dias = int (elementos[1].strip()) meses[mes] = dias F.close() return mi PEPE LUCHO 17 FUNDAMENTOS DE PROGRAMACIGN — 11 PARCIAL RESOLUCION DE PROBLEMAS (EXAMENES ANTERIORES): Medio, ** Diffcil) EXAMEN 2015 - 1, I Parcial *Bercicio 1: El cifrado César es una de las técnicas de codificacién de textos por sustitucién en el que una letra en el texto original es reemplazada por otra letra que se encuentra un numero fijo do posiciones més adelante en el alfabeto Por ejemplo, con un desplazamiento de 2 posiciones: Y LaA seria sustituide por la C (situada 2 lugares a la derecha de la A). ¥ LaB seria reamplazada por la D, y asi sucesivamente. Se supone que e| alfabeto es circular de modo que, a todos los efectas, a continuacién de la Z comienzan de nuevo las letras A, B,C, etc. Austed se le pide implementer la funcién eifrarfesar que recibe como parémetros una cadena de caractares escritos en mintisoulas. el desplazamiento y una lista con las letras del alfabato y Petorna una nueva cadena con el texto codificado, Dehe tener en cuenta que sélo s9 codifican los caractores correspondientes a las letras del alfabeto, el resto de caracteres (espacios en blanco, signos d= puntuacién, nimeros, etc) permenecerdn inalterades, Fjemplo: [ Wamada fi GifrerCesarChola mundo”, 8, alfabeta) [ ciinarCesar(‘yy2", 2, alfabato) [ cirarGesar(el yoyo, cuesta $5°, 4, alfabetol |i 50s, gyiane $5 PEPELUCHO 18 PUOLULUDUOEESOVEGESSSITTITIEULULGUUULE SUS SS ROBE Luu FUNDAMENTOS DE PROGRAMACION — 11 PARCIAL # Funcién revibe la c 3 de decpla # bebe x ar la cadena cifra ft que pueden existir caracteres que no # cn el alfabeto, y deben ser colocados sin objeciones det (cadena, desplazanicato, alfabeto): a arse (cadena ci cadenaCifrada = "" for caracter in cadena: 4€ caracter in alfabeto: indcaracter indNuevo caracter return cadenaCifre . index (caracter) Yr + desplazamiento) % Len(alfaboto) Lfabstof indtuevoCaracter] acter Como se puede apreciar en el algoritmo, se tlene una nueva cadena, misma cue representara a la cadena cifrada. Se procede a recorrer cada carecter de la cadena que se recive camo Darametro, y luego se pregunta si ésta se encuentra en el aifabato. De ser verdad, imalica que este cardcter va a ser camibiado por aque! que se encuentre la cantidad de desplezamientos establecides, La magia de |a lista circular ocurre en la utilizacién del operader médulo. Supongamos que se tiene la letra y, y un desplazamiento de 3, lo cual implicarta que la nueva letra debe ser la b. Ahora come se esté trabejando con indices, le letra y tiene un indice de 24, y surrandole los desplazamientos, dabe llegar al indice 27. Sin embargo, la lista del alfabeto tiene un maximo de 25 para los indices, con lo cual se excaderia. De ser asi, debe tomar el valor de para que ésta llegue a la letra b, Para que esto acurra, el operadar médulo entra en accion con respecto a la cantidad de elementos presentes en la lista de alfebeta, con lo que se tiene (28 + 3) % (26) = 1; obteniéndose esi el indice deseado para obtener el nuevo ceraczar. Luego se actualiza la variable caracter con el nuevo valor obtenido. y luego se la agrega a la cadens cifreda. De ser falso, e! caracter se agrega sin alteraciones, lo cual es requerimiento de este algoritma PEPE LUCHO 19. FUNDAMENTOS DE PROGRAMACIGN — 11 PARCIAL = Bercicio 2 Implemente una funcion estudiantesEamunas que recibe un diccionario con nimere de matricula ye! nivel del estudiante, un conjunto con el numero de matricula de tacos los estudiantes que estén tomando Estructuras de Datos, un conjunto con el nimero de mavricula de los estudiantes gue estan tomando POO, y retorne un diccionario (matricula, nivel) con los estudiantes que estan tomendo ambas materias. estudiantesGomunes(diccionario, conjuntoEstructuras, conjuntoPO0} Luego, implemente fa funcién nivelllaica que recibe un dicsionario con numero de matricula y nivel, yretame la coleccién de niveles Unicos extraldos en el diccionerio. nivelUnicoldiccionario). ‘Solucién: eel diceion 2 mat los estuc numeros de estudiantes = {} (diccionario, conjuntor: an con}umtoComun estudiantes [matriculal return ost def nivel! (diccionario) : niveles = set (diccionario. yvalnes()) return niveles Como se puede epreciar, la funcicn estudiantesComunes no es complicada de desarroliar. Daca que son conjuntos, se realiza Is interseccién entre ellos pare tener los numeros de matricula de los estudiantes que estén tomando ambas materias en un nuevo conjuntc. Luego, se procede a iterar el conjunto obtenido para armar el diccionario pedido coma data de retomo, ya que cada matricula representa une cleve para diccionaria y @ partir de ésta se obtiene su velor respective Luego, 0 lo asigna al nuevo diccionario estudiantes que es lo que se retorna después de haber realzad el aigoritmo, Le funcién nivelUnica, es sencilla, ya que se pide considerar los niveles Unicos presentes en el diccionario. Dado que los niveles, son considerados como los valores ascciados a los numeros de matricula, éstos se pueden repetir, por lo que, para asogurar unigidad se utilizan (os sets. Por lo que se obtianen los valores del diccioneria, y esta coleccién se la corwierte a un conjunto, lo cual es lo que se debe retornar. PEPE LUCHO 28 AOA ahah dk OM & KK OA Oe wR Oe ee eee ee oe eR es ee a ae ee Se ee eee eS SS ee FUNDAMENTOS DE PROGRAMACIGN ~ Il PARCIAL Fercicio 3 Se le he pedido ayuda con el deserrollo de un sistema para el control de campos petroleres. Se le ha indicado que la informacién de los campos petroleros se encuentra en un archivo estructurada con los siguientes atributos: cédigo, nombre, ubicacién (fila, colummnal, y numero de barriles producidos. A continuacidn, se muestra un ejemplo: Campo Bolivari0,2197 2lCampo Zemoral3,Cl86 31Campo Tungurehuel4, 31101 4lCampa Pastazal2, 1178 El atributo de la ubicacion sirve para realizar una represantacién da los campos en una matriz de nx m como si fuera e! mapa de algtin sitio. Por ejemplo: o fF 3 #4 | eee eee = ee Cee oe Esta representacion permitiré la generacion de reportes acerca de los campos petroleros. Un e necesario es uno que permite saber cudntas campos petroleros hay en un érea buscada yy cuéntos barriles en total se producen en esa area. Por ajemplo: Area dal punto (0, 1) al (4, 3) -> hay 3 campos petroleros y se producen 276 barriles. Se le pide: 1. Implementar la funcién cargarinformaciinteombreArchivo) que retorna un diccionario con fa informacién de los campos petroleros, 2. Implementar Je funcién ubicarSamposPetroleras(uiccionario, n, m) que recibe un diccionario y retomna una metriz de nx m de numpy con Ie ubicacién de los carspos petroleros, Asuma que n ym son dimensiones vélidas para que la matriz contenga los campos petroleros descrites en el archivo, 3. Implementar la funcién reporteRreatmatriz, diccionario, puntolnicio, puntoFin) que recibe una matriz de numpy, un diccionario, y dos tuplar (puntolnicio y puntoFin) que esté compueste por dos coordenadas de fils y columina; y retoma una tupla con el numero de campos petroleros y nlimeros de barriies producidos en esa éraa. PEPE LUCHO 21 FUNDAMENTOS DE PROGRAMACIGN - 11 PARCIAL Ejomplo: reporteAreatmatriz, diccionario, (0, 1), (4, 33) rotoma (8, 276) Parte I import numpy as np el nombre del archive que contiene 1a campos petrolero: una estructura definida para el diccionar el > la eatructura va a ser la mbre, "pr oordenadas!: (fila, culumna) rac ion (nombr eArchivo) t oO open (nombreArct linea in f. campos = linea.strip() split ("|") id = int (campos[0]} infoCarpo = (} infoCampol' "] = campos {1} .strip( infocampo[" int (campos [=11) £, ¢ = campos LCEAY infoCampo[' int ce), int (cr) alia] = infocampo B.close Q return d Como se puede apreciar, la estructura det- diccionario depends del programador en si. Para facilitar la busqueda de informacién de acuerdo con lus atributos presentes acerca de cada campo petrolero, se prefirié asignar como valor un diccionario, donde la clave es el atribute yel valor asociado a éste, es el valor que posee cada campo. En los comentarios do la funcién se muestra la estructura de cada par clave-vaior. Depende de la estructura del diccionario realizado en esta perte, para resolver los siguientes enunciados. PEPELUCHO 22 Sea FTF TTT T UT UU NUNN NSTI IIIT STU ULVODDOSIIES FUNDAMENTOS DE PROSRAMACIGN — 11 PARCIAL # que tendra # petroleros. Retorna # identificadores de los campos, de acuerdo a sus coordenadas def ubicarcampw: pleros(diccionario, n, m)t matr np.zeros((a, m), int) for id, infoCampo in di £, ¢ = infoCampot' “on: q matrizif, c] return matriz Parte Ill # Fuacién que recibe la matriz donda se 2 contiene ta los campos potroleros, n), que permit iran la cant octivamente cn el harride ricArea(mateiz, diccionario, puntoInicio, puntoFin): £1, cl = puntoinicio 1 eB = puntorin area = matrizift: fF + 1; cl: oF +1) area = area{np.where(area > 0)1 totalarriles = totalProduccion = 0 for id in orce produccion = diccionariofid) [*1 14 a total Produ: totalBarriles on += produccion pet] totalProduecion Como las demés funciones dependen de la estructura de! diccionario que contiene la informacién referente a los campos petroleros, era primordial resolver el primer literal Une vez obtenide la estructura con le cual se ve @ trabajar, la funcién ubicarCamposPetroleres 28 sencilla de implementan. Esta funcién debe ratomar una matriz donde las coldas senén \Wenadas de acuerdo con las coardenadas presentes par cada campo petrolero que se encuentran 2n el campo petrolero. El valor que almacenaré la celda as el identificador del campo petrolero, ye gue a partir de éste es donde se tiene la trazabilidad para obtener el reporte de produccién, y demas informacién perteneciente a éste. La funcién reporteArea internemente necesita hacer un slicing. Como se aprecia en el gréfico, los valores finalos de cada punto estén incluidos, esa es le razén por la cual se le suma uno, en al fin referente a las filas y a las colunnas. Como la matriz también contiene ceres, estos son irvelevantes pare el reporte, por lo cual se hace un slicing booleano para obtener los campos presentes (los identificadores de los campos son nérmeros positivos), Luego se recorre el arreglo obtenido, y se procede a utilizar e! diccionario, primero accediendo al diccionario interno, por su identificador, y Ivego cbteniendo el velor de la clave produccién que es lo que se necesita para este reporte. Una vez realizado el revorridg, se retorna la tupla respectiva con la cantidad de berriles y la produccién total presente en el érea barride de la metriz. PEPE LUCHO 28 FUNDAMENTOS DE PROGRAMAGIGN ~ {| PARCIAL ENAMEN 2016 — |, Hl Parcial = Bercicia 1 Suponga quo ovxiste un diccionario tendencias con un string que representa una fecha (mm-dd- aaaal.como clave y como valor un conjunto de atiquetas (hashtags) que fueron tencencias en Twitier para esa fecha, For ejemplo: tondencias = (08-22-2016': 1 #Rio2016’, ‘#BSC’, “#ECUY, '06-25-2016': {#GYE’, ‘#BRA}, .... “08-27-2018': {#YoSoyEspol’, ‘#GYE’, ‘#BSC'). Implemente las siguientes tunciones: 8. cuontaEtiquetasttendencias, listaFechas) que recive el diccionario de tendencies y une lista con strings que representan fechas (mm-dd-aaaa), Le funcién debe reternar un Nuevo diccionario con la etiqueta como clave y como valor, el nUmero de dias que asta etiqueta fue tendencia durente les fechas especificadas en listaFechas. Por ejemplo: cuentaEtiquetasttendencias, ('08-22-2016", 08-25-2016", 08-27-2016") ratorna (#Ri02 106: 1, 'HGYE' 2, ‘#YoSoyEspol’ 1, ‘#BSC': 2, ECU: 1, ‘BRA’ 1) b. reportaTendencias(tendencias, listaFechas} que recibe el diccionario de tendencias y una lista con strings que representan fechas (mm-dd-aaaa). La funcién debe mostrar par pantalla: ‘TI Las etiquetas que fueron tendencia tadas las fechas en listaFechas. 2) Las etiquetas que fueron tendencia al menos en una ce las fechas en listaFechas. ©. tendenciasExclnyentesttendeneias, fecha’, feeha®) quo recibe el diccionario de tendencias y dos sirings que reprasentan fechas (mm-dd-aaaal. La funoién debe mostrar por pantalla las etiquetes que fueron tendencies a en fectta’ o en fecha, pero no en las dos. Nota: supanga que fecha’ y fecha? existen en ol diccionario como claves. PEPE LUCHO 24 Uv PUVOVEUODVISIVIFISD IIIS PIS VIVUUV UVa eee a SDT OO FUNDAMENTOS DE PROGRAMACIGN — 1! PARCIAL uncién que Cuente el ndmere de ve etiqueta en determinadas fech, def cuenta®t iquotas(tendencias, Lis: # Diccionario que tendra c aloe el nimero de veces que se re etiquetas = {} for fecha in listaFachas: Valido on caso de que programa se cae puest Tome en cueata que par # os la focha on formate lor # 4 con las etique © Techa in tendencias: # ubtenzo e1 co etiquetasFecha # Recorre cada # contarla y actualizar el di for etiqneta in etiquetasFecha: Af otiqueta not in otiquota: eliquetas[etiqueta] = 1 nto de etiquetas tendencias [fecha] meta del conjun para proceder a else: etiquetasfetiqueta] + return otiguetas En esta parte de fa solucion, se tiene que considerer la estructure al diccionario a retornar, y sobre toda cual de las dos colecciones se debe recorrer. Dado que el conteo de las etiquetes depende exclusivamente de les fechas presentes en listafechas, entonces Ia coleacién que se debe iterar es ésta, Cada elemento de esta lista es una fecha, que es una clave dal diccionario tendencias. Sin embargo, pueden existir fechas que no se encuentren en este diccionario, par !o cual se hace la respectiva validacion pera acceder a las etiquetas que tiene asociada le fecha. Si la fecha se encuentra presente en el diccionario, significa que se puede acceder al conjunto de etiquetas que fuercn tendensia en ese dia, y luego se recorre el conjunto para proceder a contar las etiquetes, que se elmecenard en el diccionario etiquetas el cual es el que retornara la funciin cuentaEtiquetas. PEPELUCHO 25 FUNDAMENTOS DE PROGRAMACION. Parte I # # 4 ‘uncién que miestra por pantalla la en todas ias fechas que se encuent: tendencia en al menos una de ellas @ fueron Lendencia y las que fueron Wotese que esta funcién no retorna un vale pantalla. portatendencias (tendencias, listaFechas) + # Aprovecho 1a funcién que’ cucn # el diccionario con el cc ctiquetas = cuentaktiqueta # Creo dos listas vacsas, u # tondencia en todas las fechas y # tendencia por lo menos ¢ todas = [] algunas = (1 todasLasFechas = "r+ todasbasFechas #= "inc tian:\n" que solo mu ra pi a obtener Leo respect a ctiqueta. (tendencias, listafechas) a que contenga las et iqueta aga_a las que fecha presente en lista¥echas unaDeLas Fecha gan fueron me ‘ unaDelasFechas += for etiqueta, mumVeces in etiquetas. itens( # Condicién que asegura que el nimero do v1 ea igual # |cantidad ce 4 presente en if nunVeces # etiqu stuvo "format (etiqueta)) He ede la primera, por esa razén no #4 @ uma etiqueta que fue tendenci at también Io es en al menos una de las fechas, 4p a la vantidad de repeticlones tiene que ser mayor #0 igual a if nunVeces >= algunas.append(” "format (etiqueta)) Print (todaslasFechas) mostrarst iquetas (todas) print (uiabeLasFechas) mostrarst iquetas (algunas) antalla las etiquetas as, se procedié a rcalizarta se escribir e Js en Lo: > 95 pod lol cxamen, pero tambi fas Guseamtiquetasl® if len(listakt iquetas) > 0 atiquetas = ™". join(listaBtiquetas) PFAnt (et iquetas) else: print ("\) PEPE LUCHO 26 Us ak “ask ek ek We se, “mk kk eS a se a es ee ee aaa war re haem ka kk Ka FUNDAMENTOS DE PROSRAMACIGN — 11 PARCIAL Parte Ill # Funeién que mue fueron tendencia #0 em fechal oo: 1a diferencia # Mo retorna mingin valor def tenlenciasieh (tendencias, fechal, fech tiguetasfi = tendencias{techaiy etiquetasF2 = tendencias| fecha?) luyentes = otiquetasFi * ot iquetask2 Print ("endenct en " if len(excluyeates) > 0: for etiqueta in excluyentes: print(" ".formatti + 1, etiqueta)) ivel else: peint(” i) PEPE LUCHO 27 FUNDAMENTOS DE PROSRAMACIGN — 1! PARCIAL #* Ejercicin 2 Las distancias en km, expresadas en valores enteros positives, entre ciudades del Ecuador conectacas directamente por una carretera estan dadas en e! archive Ecuador Distancias. txt con el siguiente formato: Ciudad de PartidalCiuded, DistancislCiudad, Distancial... Ciudad, Distancia Por ejempita: Pedemales|Ambato,31 81Azogues,555 AmbatolAzogues, 260|Babshoyo,212...IPedemales,318 Azogues! Padernales, 585\,...Babahoyo,125 . . . BabahoyolAmbato,250 Implementar ls siguientes funciones: 8. cargarBatosfnombreRrchive) que recibe el nombre del archivo como string y retomna el diccionarto distancias con el siguiente formato {Ambato: (‘Azogues': 280, ‘Babahoyo’: 212, ..., Pedernales': 318}, ..., {Babahoyo': {Ambato’: 250} b. cindadesCercanas{distancias, km) donde km es un valor entero positiva y distancias es el diccionario generado en el litaral a. Le funcién retorna una lista de tuplas con todes los pares de ciudades conectadas directamente por una carretera que estén 2 una Separacién menor 9 igual que km. La tupla incluye ciudad’, cludad2, y distancia que les separa. Por ejemplo: sciudadesCercanes(distancias, 300) retoma {CAmbato’.'Azogues’.280), CAmbato’,’Babehoyo’.212), (Azogues’,"Babehoyo' 125), (Babahoyo' /Ambato',250)} °. guardarGiudadestercanastuistancias, listaKms) cue recibe el diccionario de distancias generado en el literal a y una lista de valores enteras positivas. La funcion deberd generar por cada valor de la lista un archivo con las ciudades separadas @ maxima dicho vaior. Por ejemplo: guardarCiudadesCercanasidistancias, {300, 109, 250)) genera los siguientes tres archivos: ciudades300 tyt, ciudades’00.txt, ciudades250. txt, El archivo ciudades300.txt tandria ef siguiente contenido: Ambato Azegues.280 Ambato,Babahoyo,272 Azogues, Babehoyo,250 Escriba un pragrama que lea el archivo Ecuador Distancias.txt y genere un diccionario de distancias, de acuerdo al formato del literal a. Luego, usando este discionaria, su programa dederé crear los archivos de las ciudades separades hasta 150, 225, 320 y 555 km. PEPELUCHO 28 'e@:6.60 82 Oe 66 Oo oO oO Oo Mw Dh AS DD ORS SO Oe Oe we ee eee ea as ks ek TFT aT F TTT T UU UU UU UR ReaD DUTT U TU FUNDAMENTOS DE PROSRAMACIGN — 11 PARCIAL Funcion que recibe el nombre de! archivo como una cadena de aracteres y retoraa un diccionario, donde la iudad de origen, y el valor es un dic © tino, y el valor de que Separ f 1 ofigen del destino. atos (nombreArchivo) : a=) f = open(nombrearchivo) for line in f: campos = line.stripQ origen = campos [0] .stripQ cestinos = (} for infest ino in camposfl: 1+ destino, dist infoDestino.strip( -split(",") destino = destino.stripQ) tancia = int (distancia) £071" destinos[dest ino] tancia dlorigen] = destinos f-closeQ) return d Parte Il # Funci jo de distancias con La estructura 8 qu or, entero posit 8 que on entre ista de tup! en, destino, die s(distanclas, km): cercanas = [] for origen, destinos in distancias.items 0+ for destino, distancie in destinos.items(): af distancia <= km: t = (origen, destino, distancia) cercanas. append (t) return cercanas Como se puede apreciar, la funcidn cargarBatos no es complicada de desarrallar. En el ejemplo, se puade apreciar la estructura del diccionario que se debe retornar., y dado que no s2 necesitan hacer validaciones, (en caso de que, existan ciudades repetidas en la misma linea, ye que el archivo esté limpio de datas repetides). Hay que considerer que el primer elemento siempre sera Ja ciudad de origen, y de ahi an adelante, los destinos estan seperados por comas, por esa razén se have el slicing desde el primer elemento hasta el fin de la lista. Por cada origen, existe un Giccionario interno, que tiene la informacién de los destinos con sus respectivas distancias de separacién. Luogo, sa abtionen los valores respectives, se asocia el destina junto con la distancia de senaracién en el diccionario interno. LUna vez obtenidas todos los destinos, se asocia la ciudad de origen con el diccionario interna, y este proceso es repetitive hasta terminar de leer todo el archivo PEPE LUCHO 28 FUNDAMENTOS DE PROGRAMACION — 1! PARCIAL Af Len(cercanas} nombrea: +" format (a) any for t in cercanas: line: : "format (e{), ttl), tl2)) f.urite(in F.closeQ) Parte IY (Programa Principal € GT a principal a = cargarbatos(* " quardarciudadesCercanas(d, [150, 225, 320, S952) En la funcién ciudadesCereanas se debe considerar lo que se va a utilizar del diccionario distaneias, Coro se aprecia en la estructura de fa tupla, Se puede tener una idea que se uelizara la clave, que en este caso representa la ciudad de partida, y también se usaré el valor, en este caso, el diccionario de destines, De éste, se utilzaré la clave y el valor, ya que representan el destino y la distancia respectivamente. Si la distancia es menor o igual al parémetro km entonoes, se procede a armar la tupla, y ésta se afade ¢ la lista que se va a reiornar al finalizar el algoritmo. La ultima funcién guardarCiudadesCereanas, hace uso de la funcidn ciudadesGercanas como se puede apreciar, ya que ésta es llamada, por cada valor presente en la listaKms. Si la longitud de {a lista obtenida es mayor a cero, indica que sf existen ciudades que estén separadas por dicha distancia, y por ende, se debe crear ol archivo con fa informacién adjunta, caso contrario, no se creara el archivo asociado a las ciudades separadas por dicho valor. PEPE LUCHO 30 POSH HHLHLKLKHHHKELKHE HOOK LOH HK LKAKKATLKKKLAKKLLKLKLCLCLKKCLKKTWRAR FUNDAMENTOS DE PROGRAMACION — 1 PARCIAL 2. Implemente una funcién buscartlistaAnidada, valor) que recive una lista de listas y rotorna verdadero o falso si valor existe en listaAnidada. contrario reterna ef buscar (istaAnidada, valor) # Re la de la 1 for fila in llstaAnidac: # Recorro cada celda de La fila for celda in fila: if celda — valor: return True ta anidada return False Nétese que en la pregunta sobre el valor de la celda sea igual al valor pasado como arémetro on Ia funcién, no existe un else, en caso de que esto see falso. Le razon es porque al realizar una prueba de escritorio, con la primera iteracién, la funcién retornard falso, inclusive si se le pasa como parémesra un valor existente en la lista, pero que no esté entre los primeros valores @ recorrer. Se dice que retornaré False una vez que haya recorride toda la lista, indicando asi que nunca lo encontrd, y esta si es la salucién correcta al prodlema plenteado. b. Utilice fa funcién tmsear del literal enterior para determiner oi el valor X existe en la lista anidada L y mostrar por pantalla "Valor s/ existe’ o “Valor no existe”. L = [[3, 2, 5], [1], [7, 91] X = int(input(“Ingrese valor por teclado”) Solucién: # Uso de la f 4£ buscar(, KX): print (" else: peint(" Dado que la funcién buscar retoma True o False, se pregunta si el resultado es True, indicando que el valor existe, y por eride se muestra por pantalla el mensaje adecuada, Anélogo es el praceso, euanda no lo encuentra, c. Implemente una funoidn que sume o multiplique valores enteros almacenados en una lista anidada, Si se invoca a lafuncién tinicarnente can la lista como angumenta, la funcién debe retorner fa sume de los valores. Si se invoca a la funcion con un segunda argument PEPE LUCHO 31 FUNDAMENTOS DE PROGRAMACIGN — 1! PARCIAL Con Valor ‘multiplicar’, la funcién debe retornar ta multipiicacion de fos valores. Para cualqvier otra valor para el segundo argumento, la funcién deberd retorner A ros; listaAntdada operac presenta la :Qistainidada, operacion=" operacionesValidas = [eunut, 4€ operacion not in operacionésval idas: retura -| resultado = ( 4£ operacion resultado = 1 for fila in listadnidada: for celda in fila 4£ operacion resultado 4= celda elif operacion resultado #= ida Foturn resultado Aqui S2 puede apreciar que ee reaiza la velidacion inmediata si ta operacién no es valida, bare que no haga un recorrio a le lista de manera inmecesarie, Sila validacign 9s false, ontonces procede a ejecutar el elgoritmo de acuerdo a les opereciones vélidas, PEPE LUCHO 32 Se le ha encargado la tarea del control del trensito, Para esto, la ciudad seré representada siempre por FUNDAMENTOS DE PROSRAMACIGN — 11 PARCIAL 2016 — Il, ti Pareial seotores (no debe creer esta matriz) une matriz de 5x5, divide en cuadrentes y sectores, donde se registraré los velores de les mutes | generadas. Cada celda de la matriz corresponde & un Norte | Norte | Norte | Norte Esta matriz muestra tinicsmente |a distribucién de cuadrante y registraré el total de multes generedes | Qeste | Centro | Centro | Centro | Este pare ese cuedrente. Habra cinco sactores: Norte, Sur, ~ Centro, Este y Oeste, que agroeén varios | Oeste | Centro | Contro dereche: i 4 b Centro | Este cuadrantes, de scuerdo con el esqueramastrados'a | gece | carta | centm | Centro | Este Pera cumplir con la terea, debera implementar Io siguierte: 1 Una funcién generarMlatriztlisteMultas} que recibe una liste de tuples, donde cede tupla es (coordenedaX, coordenadaY, velor_multa), con las coordenades del cuedrante y el valor de fa mute. La funcién deberé retornar una matriz de NumPy con el valor agragada de las multes generadas para caca cuadrante. Por ejemplo, para la lista de mutes: Se U0, 0, 1201, (1, 2, 330), 9, 4, 120, 4,2, 621, (0,0,50), | agg 4, 4, 89), (0, 3, 25), (2, 0, 43), (3, 2, 21), (0, 0, 1201 0 0 Nota: Las coondenadas empiezan en 0, 0 y s2 pueden repetinen | —— fe lista de tuplas. as 2 0 0 o | 0 Una funoién sectorToplmatriz} que recibe Ie matriz genereda en el tema anterior, calouée el sector con el valor total de multes ms elta y retorne una tuple con el nombre del sector (Norte, Sur, Centro, Esta, Oeste) y dicho valor Pera nuestro ejemplo anterior, la funcién retorneré (Centra’, 351) PEPE LUCHD 33 Sur Sur FUNDAMENTOS DE PROGRAMACIGN TPARCIAL Parte 1 import numpy as np # Funcion que recit tupla, mionc muita), que la nat riz tas on cada cel ema, 0 procederé a explicada on ol p: 1 mayor valor Top (mati: #al to} espect ivanente. sectores sectores ["i natriz{6] sumo sectores[" matriz[-1].cumQ) pectores[" Ratriz[iz -1, 0].sum() sectores ["Eo! matriz[!: -1, -1].sumQ sectores["0n't matriz{l: -1, 1: -1].sumnQ sectoresTop = sorted (sectores.items(), key=lambda sector sector{1], reverse=True) return sectorestop[0] # Prueba de funciones: listaMaltas = [(0, 0, 120), (1, 2, 330), Gy 4, 129%, Gy 2, 62), (0p Oy DOV, Gy Ay 89), (, 3, 25), (2p 0, 43), (3p 2, 20), 0,0, 12097 multas = generarMatriz(listattultas) print ("\s ge MUL "format (multas)) tuplaSectorTop = sectorTop (multas) print": : ". format (tuplasectorTop) ) Para la parte de sacteresTop, utilizo la funcicn sorted, que recibe una coleccién iterable, y retorna una lista. En este caso. e paso como argumanta la coleccién de tuplas (sector, valor], ya que requiero ordener por el valor, y @ su vez, mantener la clave. Ademas, recibe un pardmetra que se llama key, misma que se conoce como la funcién de erdenamiente, en donde podemos especificar a la funcién como queremos que se ordene la coleccién. Para esta, utiliza una funcién andnima que tiene como nombre lambda, cuya estructura es: lambda pardmetra: retamo. Como se oprecia, el perémetro en este caso es el elemento de la lista, y se retorna el segundo elemento de ésto, ya que representa el valor de la multa, y es por lo que se desea ordenar, PEPE LUCHO 34 VUVOVEREDDIDITIFSIIIFDITTSIV VG UVB VV VES S SSDS TOV UwY FUNDAMENTOS DE PROGRAMMACIGN — 11 PARCIAL ** Ejercicio 2 Usted escribiné un programa que eyudaré a persones akededor del mundo a decidir cul es el pals al cual quieren ir & vivir cuando se jubiien. Para ello su programe ofrereré informacién sobre el costo de vide usando las métricas deseritas debajo. 1. Esoriba la funcién cargarflatns{namfile} que recibe el nombre de un archivo que en cada linea contiene los siguientes campos “ciudad metrica valorDeMetrica” (ver ejemplo). La funcion retorna un diccionario con la estructura descrita a continuecién, "datos.tut" contiene: cargar dices tos ("datos.txt") retorna un nario con 1a siguiente estructur: Cuenca ,temperatura,22 fuayaquil ,precioCasas ,130000 UMouayaquil": ("preciocasas" 130000, Cuenca ,preciocasas ,120000 emperatura":29}, Bogota ,precioCasas ,100000 enca": {"precioCa: Bogota temperatura, 20 "cemperatura”:22}, ...} Guayaquil, temperatura ,29 20000, Nota: solo existen des métricas posibles ‘precioBasas’ y ‘temperatura’ y todas las ciudades tienen ambas métricas. 2. Escriba la funcidn metricaPaistdatos, paises} que resibe el diccicnerio datos con la estructura del diccionario generada en le funcién anterior y el diccionario paises que bene coma clave el nombre del pais y como velor la liste de ciudades para ese pals. Esta funcion calcula el valor promedio de cada métrics por pais y retoma un diccionario cuya clave es ol pais y cuyo valor es otra diccionario con los promedios por métrica. Por ejemplo, para Guayaquil Cuenca que pertenecen al mismo pa’ ee calcula el promedio de las métricas prenieCasas y zemperaturay se fo esigne al pais Eovedor: Ejemplo: Ecuador": {"precioc "Colombia": ("preciocasas":12 5000, “temperatura” :25.5}, 0000, "temperatura" =20}} 0,maximo} que recibe ef diccionario 8. Escriba 1a funoién generaPaises(promedios,metrica, mi promedios con ie estructura de! diccionario generado ena funcién anterior, un string denominado metrica que puede ser precioCeses'o termperatura'y un valor minime y un maximo para dicha métrica, Esta funcién busca aquellos patses en los cvalas el valor de metriea esté entre el valor ‘minima y maximo dados coma argumento y escribe en un archivo el pais y el valor de ia métrica separadas por coms, El nombre del archivo de salide es el misma nombre de fa métrics con ta extension “.esv", Por ejemplo: generaPaises (proms, "temperatura",23,26) para cl ejemplo an generaria el archivo e1 siguiente contenido PEPELUCHO 35 FUNDAMENTOS DE PROGRAMACION ~ 11 PARCIAL Parte I # Vuncién que permite cargar un archivo y retoraa un diccionario de # cludades con sus respect ivas metricas. # Ejemplo de la estructura clave — valar 8 ciudad + {metrica def carye (nomP ile! d= {} f = open (nomFi le) for line in #: campos = line.stripQ .split(",") ciudad = campos[0].strip() # Si la ciudad no existe como # procedemog a asign Af ciudad not in d: diciudad] = {} metricas = diciudad] metrica — campos[1].stripQ if metrica not in metricas: valorMetrica = int (eampost?1) motricas[metrica] = valorMetrica orl, metrica?: valor2} F.cloze() retum d Parte IL on que permite calcu’ ente en el diccic medio de las metr ario datos valor dol diccionari, 8: por sue pelurnaré # pais : (metrical: promediol, metricaz: promedio?} def netricaPain(datos, paises): pronedios = {} for pais, listaCiudadss in paio, ems () ciudades! metricas in datos. items (): ciudad in listaciudades: ciudadesxPais + for netrica, va if motric: metricasxPais{metrica] = 0 metricasxPais|metrica] += valorMetrica if ciudadeskPais > (: for netrica in metricaskPais netricasxPals {mat pronedios[pais] = metri retum promadios /= ciudadesxvais xPais En la funci6n cargarBates, el momento de precuntar si la ciudad no se encuentra en el diccionario 4, permite bajar el nivel de dificuited del diccionario, En este caso, un diccionario de dos riveles, se lo bajaré a un solo nivel, debido al concepta de referencia Recordemos este concepto con las listas. Supongamos que se tiene una lista a = [2, 4, 5]. Luego se tiene fa sentencia b = e. Y al final, se tiene bIO] = 10. Se esperaria que se trabaje con una copia, Sin embargo, considérese a la liste como si fusra une casa. La variable @ epunta ela tireeciéa de memoria donde se aloja la ‘casa’. Entonces, todo lo que esté apuntando a esa PEPELUCHO 36 PERL LLL LLL LE LCLLOLCOLKEC LLL LK KAKA KKLEKKLK KL LOCKE LKAEAAAR “casa” podré madificar su interior. Como la variable b esta apuntando a la direccién de memoria ‘como lo hace la veriable a, entonces el resultado que se obtiene es el siguiente: (10, 4, 5!. Este mismo concepte se aplica para las demas coleeciones axictantos, y se lo utiliza en esta sentenaia metricas = dlciudadl, donde metricas apunta a la direccién de memoria que aloja al diccionario que tiene la informacién referente a las métricas y Sus respeotivos valores, por cada ciudad. En la funcién metricaPais hay que decidir cual coleccién recorrer primero. Le estructura del CicsionSrio @ retomar da una idea, ya que la clave representa al pais, y el valor es un diccionario cuyas claves son los tipos de métricas y sus valores, son los promedios de esas métricas referentes a ese pais. Ahora, del diccionario paises se utilizera el par clave — valor. El pais representa la clave en el nuevo diccionario 8 retornar, y la lista de ciudades permitina saber si la ciudad pertenece a ese pais. Como se desea celcular el promedio tlo cual se realizaré al final de haber acumulado todos los valores con respecte a las métricas existentes), se debe contar las ciudades existentos por pais, al mismo tiempo que se va creando un diccionerio por pats, que serd agregato, en caso gue Ia variable cortadora ciudadesKPais sea mayor que cero. Si esta variable es mayor que cero, implica que se pusde realizar la divisién sin problemas, es decir, al velor acumulado por cade meétrica, se obtiene su respective promedio, y el diccionario metrieasKPais se actvaliza, Una vez hecho esto, se asocia la clave pals con su valor metricasXPais, en el diccionario promedios que Ja funcién retornaré une vez finalizado el algoritmo. Parte tl # Yoncién que g archivo cu r v trica <(pronedios, metrica, minim, maxino) for pais, metricas in promedios.items(): if metrica in metricas: orMetrica = netr ic if valorMetrica >= cadena = "1,1, prmat (pais, metrica, valorMetrica) s{metrica] imo and valorMetrica <= maxizo: 4£ len (cadena) > 0 f = opent™ f.write (cadena) Ficlose() En la funcién generaPaises se debe considerar al archivo @ gonorarse como una cadena de caracteres. ya que esto es fo que se va a escribir una vez ejecutado el algoritma que permite obtener los datos, dependiendo de los valores que tengan los pardmetros de ésta. Solo se crearé el archivo si la métrica es vélida, y en caso dé serio, si los valores asociados a la métrica estén en el rango limitada por los parametros minime y maximo. Como se va a escribir un archivo, se debe usar el modo w indicando que es escritura, luego se agrege Ie cadens al archivo con la funcién write y une vez hecho esto, se cierra al archivo. Con esto, ya se ha realizado en su totslidad el desarrallo de la funcién. PEPE LUCHO 37 FUNDAMENTES DE PROGRAMACIGN ~ 1! PARCIAL * Ejercicio 3 Dadi los conjuntas: 11, 2, 3, 4) 3) 14, 5, 6, 7, 8,9) 18, 4) 4-0, as {len @y,"1en(), Len (crt 3. Indique ta salida del programa. Juscifique su respuesta. =) b. Indique te salide del programa. Justifique su respuesta YSAeY Y-c Print (2) ‘Solucion: 2=¥-c #2 = setl) -> cor Prant(s) # set ( PEPE LUCHO 38 OHHKOHKLKLKLCH CHEK OL OHLH/CHKCOCLKOEKAKEKKKKLKKKLKK COLO LKLKARRARAA FFT TTT U UT U UU UU FUNDAMENTOS DE PROGRAMACION — 11 PARCIAL EXAMEN 2017 — I, |] Parsial (U2) ** Fjercicio 1 Se necesita crear un programa pare generar las estadisticas de las palabras en un texto. Por ejemplo, a partir del siguionto texto: Con, 1dyayuda,de,un, grupo, de, amigos, y, de, ppeligto aie, én ce, destrnir, ol, Anil1o,Unico, Pero, o1, Seior, Oecuro, Sauron, quien, < llo,enviara, rvidor para, persegulr, al, grupo, Si, 1,de, La, Tierra, Media, Ganado: de, cuatro, Oscars, aste, innortal, relato, sobro,ol,bien, y,el,mal, la, aistad,y,e ly Gio, te, traneportaré a, un, mundo, 114,de, tu,imaginacion ‘rodo, enprende, un yel,Ani on, lograra,recuperar, el, Anil lo, seria, el, fina Su programa generarfa el siguiente diccionario, apoyandose en las cinco funciones que se detalian abajo. Asuma que cada palabra tendrd 20 caracteres coma maximo y que el némero maximo de palabras por linea es 30. También tiene una lista de stopwords con palabras que no ‘agregan mayor significado al texto. 'NTP': 83, "NEC': 22, tpalabras': | Donda, tpnill ie @ Say be NTP = Numero total de palabras z emer ‘Numero solo de palabras comunes } | ML = Némero de lineas *Sauron': Ahora implemente: 1) La funcién cargarArchivatnombre), que leerd el texto desde el archivo membre y crear una matriz M de NumPy (con dtype=’ estadisticas (‘NP '] = palabrasMatriz = set (f.reshape(™.shape[i)] * M.shape[1])) palabrasMatriz = palabrasMatriz — set (stopwords) palabras = {} for palabra in palabracMatriz: infoPalabra = {} veces = ocurrencias (palabra, ™) filas = lineas(palabra, infoPalabral "1 = veces infoPalabral'ti,'] = filas palebras{palabra] = infoPalabra estedisticas |" ant] return estadisticas palabras En la funci6n eargarfrehive se tiene una ligers variacién, Dado que no se concce la centided de lineas del archiva, se censidera oportuno trebajar con una lista, y cada elemento de esta lista L sera un arregie de MumPy cuya longitud siempre seré de 30 celddas. Este elemento ser lienado dependiendo de la cantided de palabras presente en la linea, Una vez cargedo todo el archiva, la lista L se convierte en un arraglo de HumPy, ya que cada elemento es un arregio del mismo tipo, la lista L pas6 a ser una matriz. lo cual es lo pecida por el enunciado En la funcidn seurrencias se corsidera oportuno saber que al momento de realizar un slicing boalcano, siempre se retemneré un arregio de una sola dimensién, por lo que si se desea conocer cuantos elementos tiene, la propiedad shape tandré esta forme fm, 3, la cual as una tupla de un solo elemento, donde m representa < la cantidad de elementos presente en éste. Si el arragla no contiene elementos, @ es cero. En la funcién lineas en cambio so considera te funcién mp.where que en fa forma planteads Tetom una tupla donde cada elementa de ésta, representa in arregio, Si el arreglo del cual se estén obteniendo fos valores es de dos dimensiones, la tuple tendré dos arregios, conde el primero representa o los indices de las filas de las elementos que cumplen con la condicion establecida en el argument, y el segundo, al indice de las columnas, En este caso, se pide las lineas en las cuales esta presente, por lo que se cbtiene el primer elemento, y se le suma uno, ya que no piden indices. - En la funcién eontarPalabras, ce tiene que considerar que las palabras co repiten una sola vez, para ambos casos, por esa ra7én, se opta trabajar con las conjuntos. En la funcién concerdancia, se tiene en consideracién la estructure del diccionario que esta en e! enunciado de! problema, y no as nada més que !a utilizacién de las funciones realizadas anteriormente. Se tiene que considerar las palabras que no son stepwords y de manera tnica por esa raz6n se trabajan con conjuntos, y con la diferencia entre estos, para las palabras énicas sin los stopwords. PEPE LUCHO 41 FUNDAMENTOS DE PROGRAMACIGN — |! PARCIAL 3 Fjere 2 Pore administrar le nueva matriz energética del Ecuador, Ud. Tiene un diecionaria con fa informacién de ‘as ciudades y las plantas de energia que las atienden, Cada plante tiene: una tuple con los consumos ‘mensueles (12) del afo en megavatios-hora (MVVh) y la tarifa de consumo en délares por megavatio- hore (MWh) que le cobra a la ciudad. Una ciudad es servida por al menos una planta eléctrica. No todas {as ciudades son servidas por todas las plantas eléctricas. consuno_energia = ) Ademés, dispone del siguiente diccionario con informecién de planta por regi informacion , touitots ( tcoca code Si ‘opladora" : Laix': {*consunos": (400, 432, ‘consumos': (120, 55, 32, m, 10), h *Guayac ‘odo Sinelaiz': (*conaum 2 {"eonsunce": (400, 432, {"consumos": (50, 32, 32, + (310, 220, -, 200), "tarifa':55), 587), ‘tarifa’: 79), 40), "tar 32), ‘ (Coca Code Sinclair", =), erra': ("Sen Francisco’, ‘Agoy ‘oriente': ('Paute', *Sopladora', Implemente lo siguiente: t Una funcién total_anualfeensumo enorgis, planta, ciudad) que recibe el diccionario consumo_energia, el nombre de una planta y el nombre de une ciudad. Le funcién debe calcuir y retornar el total enual de megavatios-hore servido por planta 2 cin Una funcién total_plantas_cimad{consumo_energia, planta) que recibe el discionerio onsumo_energia y el nombre de una plenta, La funcion dabe develver un diccionario cuyes claves comresponden a (os nombres ce [es ciudades a fas que planta prove energia y fos valores corespondan al total anual de megavatis-hore servido por planta a cade ciudad. Una funcién eonsama_energia y el cicaionario informaciéa. La funcién retomna ol totel anual de megavatios: hore generados por les plantas de energia-de la regiin SIERRA. gavatios_horalconsumo_energia, informacién) que recive el diccionario Una funcion facturaciéntesnsumo_energia} que recibe el ciccionerio eonsumo_energia y genera un archivo con la facturecién total en déleres de los seis citimos meses de cada ciuded, El erchivo resultante se llamaré facturacion.txt y tenciré la siguiente estructura Ciudad, julio, agosto, septiembr Guayaquil, 2903,2145, 3010, Quito, 3102, 3234, 322 + diciembre PEPE LUCHO 42 LELLCLLLCCLKCELLLKCOLKCOLKLCCKNEKLKKKKKKL KL CLO LKKLKLLRAAAAD FUNDAMENTOS DE PROGRAMACIGN — II PARCIAL Solucisn: Parte! import mumpy as np # y la.cindad. Retorna el consumo a 4 de 12 planta en cuestién def total (consumo energia, planta, ciudad) + consumo = ( if ciudad in consumo energia: plantas = consuno_energia [ciudad] af planta in plantas: consumo += sun(plantas [planta] |’ mos") return consumo Parte I que recibe el dic scionario do la planta A(consumo energia, planta): cindades = for ciudad da consumo _energia: consumo = total_anual (consume energia, planta, ciudad) 4£ consumo > 0: ciudades [ciudad] = concumo, return ciudades Parte Ill # Funcion que recibe el dicciv f informacion, ademas plantea que rec 2 # En este caso, ol valor por defecto es # Retorna el consumo total ann # region Sierra. def nogavat ins hora(consumo_energia, informacion, region=' si total_plantas = 4 plantas region = informa: for planta in plantas for ciudad in consumo energie consumo = total_anual (cons total plantas += consumo return total plantas mo_energia, planta, ciudad) En la funcién tetal_anwal, se procade a obtener la tupla que contiene la informacién referente a les consumas. Sin embargo, se realizan dos validaciones orevies, la primera, que la ciudad sea valida, en caso de serio, se puede acceder al diccionario que contiene las plantas eléctrises que Ie cbastecen. La siguionte validacién es si la planta es valida, es decir, es una de las que brinde el servicio de generacién de electricidad. En caso de serio, entonces se puede obtener el consumo anual. Si las valideciones son falsas, el consumo enual se mantiene en cera. PEPE LUCHO 43 FUNDAMENTOS DE PROGRAMACION - II PARCIAL on que rec rgia, y generara una factura consume t seis meocs contenido + for ciudad, plantas in consumo energia.it consuno ciudad = np.zeros(e, int) for infoPla tas.values(): consumos = np.array(consumos[6: ]) * tarifa consumo ciudad + consumos consumo_ciudad = consumo ciudad.tolist Q) consuno_ciu (consumo) for consumo in consuno_ciudad] linea = "," ‘consumo_ciudad) linoa =" -fornat (ciudad, linea) contenido += linea open (nombreArchivo, '\") write (contenido) ose) En la funcion total_plantas_ciudad se tiene en consideracion cusles son las ciudiades que reciben la energfa generada por la planta en cuestién. Dado que utiliza le funcién total_anual misma que ye tiene Ia validacién en caso de que le planta no genere energia eléctrica para esa ciudad, esto implica que s6lo se agregarén en el nuevo diccionario, aquellas ciudades cuyo consumo anual sea mayor a cero megavatios-hora (MWri. Le funcién megavatios hora tiene en consideracién les plantes por regién. Por ende, se va a recorrer a la tuple que contiene las plantas de la regién pedida, Y a partir de cada planta presente en la tupla, se procede a obtener su consumo anual. Luego, se acumula el consumo de la planta a la ciudad en la variable total_plantas. Le funcin facturaeién toma en consideracién el diccionario eansuma_energia, que en este caso tiene como clave ‘a ciudad, y camo valor un diccionario con las plantas que le suministran enargia a la ciudad en cuestidn, Por ende, se tiene que sumar los consumos de todas las plantas ce los Ultimes 6 meses, y también considerar ia tarifa por cada planta. Para hacer le manipulacién sencilla, se crea un arregle de NumPy que contione 6 caldes, con lo cual fa operacién de suman, es realizada entre matrices, y al final, se arma la cadena de caracteres por cada ciudad. Una vez armedo el con:enido del archivo, se procede a guarderio en el archivo especificade par nombreArckivo. PEPELUCHO 44 mERELKELLKCLCL LLC LCHKO COCKE KLKKKKKKLKEKKLKLKLKLCLKCKECLLETRBAD FUNDAMENTOS DE PROGRAMACION — 11 PARCIAL erchivo.close() ¢Cuénias lineas de texto tiene el archivo dates.tat al final del programa y con qué contenido? Justifique su respuesta. Sol Considerando la primora linea de everttura, y lao demés, se puede apreciar que @ diferencia de write, Is funcién writelines recibe una lista con las cadenas de caracteres ‘a ser escritas en el archivo. En éste se pueden apreciar que existen dos saltas ce lineas més, con lo cual en total, seran tres saltos de linea incicando que el archivo en este caso cuenta con 4 lineas, mismo que quadaria de la siguiente manera Dias de la semana lunes martes migrcolesjuevesviernes Considere el siguiante céidiga @ indique qué se muestra por pantalla, Justifique su respuesta. a = set (13,5,6,7,81) bs set ([6,7,8,9,10)) eb (124,91) set ({len(a), len(c), (alb) &d @®-o 1a hee print (f) print (q) print (h) ‘ m1) PEPE LUCHO 45 FUNDAMENTOS DE PROGRAMACIGN — 11 PARCIAL set(13,5.6.7.80) § a= (3, 5, 6, 7, 8} 7,8/9,101) # b= (6, 7, 8, 9, 10) SS set(I2.4,5)) $c = 12, 4, 5} a= set({len(a), Len(c), len(b)]) #d = (5, 3 f=ib sa Bath =43, 556, 3, 10} $1213, 5 bo td 2 = U6) Ty By 9, 10} Sy OT) 8) % 10} {a- a) print (2) print(g) f Be 4 10h print (h) PEPE LUCHO 46 eee nad ee eae ea eee en ae ee Ae eK ee Se Oe OO Oe Se ee Oe en ES OR me ce MOREERTSDEIDS SS SDSIIDTDVIGVIVVYLVIVIVI SRDS VOGT Gy FUNDAMENTOS DE PROGRAMACIGN — 11 PARCIAL EXAMEN 2016 —1, Mejoramienta ** Elercicio 7 Una empresa de telecomunicaciones necasita automatizar el célculo del costo de enviar un Mensaje basado on el numero de palabras, el tamafio de cade palabra y el tipo de palabra, Para | calculo: 1. Se determina que una palabra corta tiene maximo M caracteres 2. So determina que una palabra larga tiene mas de M caracteres. 3. Se define como palabra especial los verbos an infinitivo, 2s decir, palebras terminadas en ‘ar’, ‘er’, ie’, sin importer su tamafo. Para calcular el costa totel de! menseje usted debe cobrar un valor por las palabras cortas, otro valor por las palabras largas y otro valor por los infnitivas. Suponga que todos los costos para este problema estén dados en délares americanos Implemente las siguientes funciones: @. cargarBatos{nembreArchiva) que recibe el nombre del archiva que espesifica en lines sSeparadas el tamafio M, e! costo de las palabras cortas, el costo de las palabras largas, yeel costo de los infinitivos, Su funcién deberd leer este archivo y retornar un diccionario con el siguiente formato de ajample: Costas.tort 10 CargarDatos(“Castos.txt"? retorna a2 (iM 10, Corta': 0.2, ‘Lerga’: 0.5, ‘infinitive: 0.9) as a3 4. caleularGestos{dates, nombreArchiva} que recibe el diccionario de datos generado en e| literal a) y un nombre de archivo. El archivo contiene el texto del mensaje grabado linea por linea. Ademés, cada linee contiene miltiples palabras separadas por espacios. El nico signo de puntuacién presente en el texto es un punto ”.” al final de! mensgje y no debera ser conciderado pare determiner el costo de esa pelebra. Le funcién debe retornar el costo total del mensaje ¢. cambiarMensaje(datos, nombreArchive1, nombreArchiva2) que recibe el diccionario de datos generade en el literal a) y dos nombres de archives. La funcién debe leer el texto del mensaje de nombreArchivel y escribir en nombrefrekive? el nuevo menssje, acortanda las palabras larges a M — 1 carecteres y colocendo el ‘#' al final de cada una de elias, y reemplazendo e! punto final con la palebra especial “END”, PEPE LUCHO 47 FUNDAMENTOS DE PROGRAMACIGN — |! PARCIAL Solucién: Parte 1 # Funcién # arc # pro! def cary a20 open(nembrehrchive, 71") etorna wh diccionaria con la e: (nombrearchivo) for linea in £: afi else: ifi= clave eligi elif i clave =" float (1inea) diclave} f.close() zetiea d F Puncién qu vo que contiene ei mensaje al # cual sel y el diccionario datos con la # informacién refer B Retorna el costo tot y los tanafios abras. def cai cularcostos (datos, nombrearchivo) : costo = 0) £ = open(nombrefrchivo, 11") for linca in palabras for in palabras labra = palabra-strip() palabra-endswith(".* palabra = palabra. costoPalabra = 0 if esVorbo (palabra) : costoPalabra = datos{’ 11! 7 rip(".") els: datos [11"1 (palabra) <> stoPalabra = datos[* rt a") else: CostoPalabra = costo += costePalabra £-closeq return costo datos ['iurgit] PEPE LUCHO 48 EKEKKKKOCLKCHKCLKCOCCHK CLK CKCKKKKEKKKKKKCLKE LOCKE LE KRAARAD TFT TTT Ta TUF UU UU FUNDAMENTOS DE PROGRAMACIGN — 11 PARCIAL wiciéa adicional qu ar, er, ire def Goverbo(@alabra): vorbo = palabra-endsuith(" verbo = verbo or palabra.endswith return verbo erar en este case, g or palabra.endawith(":") " Parte ti # Func dos nombres vo 4 que coatien je a se! el problena_ (datos, nombr £L = op; £2 = open (nombrear for linea in f auevaLinea = palabras = linea.stripQ) for palabra in palabras palabra = palabra.stripO 3 palabra.endewith ("2"): palabra = palabra. replace( else: M = datos") 4€ len (palabra) > M: palabra = palabra: M = 1] + 7" palabra +=" nuevalines 42 palabra avevahinea = nuevabinea.rstrip() Lito rabinea) La funci6n cargarBates difiere mucho de los problemas que se han ido resolvienda en este folleto. En este caso, no se tiene separador alguno por cada linge, ni siquiera un campo dafinido que permita seber quien es le clave, y quien es el valor. Sin embargo, a partir dei nimero de linea. ‘se puede apreciar cuél es la clave y el valor que se debe asociar. Considérese el ejemplo del archivo Castos.txt. Después de la primera linea, todos los valores san nimeros reales, por ese raz6n se realiza la conversién a flotante en el else cuando i sea diferente de 1. Pera la funci6n ealeularCastes se tiene que considerar prioridades, En este caso, existe una sola palabra que tiene el punto al ledo, por lo que es lo primero que se pregunta, de ser verdad, el unto es removido, y la palabra queda winger. Una vez hecho esto, se procede a pregunter sila palabra es werbo, ya que la prioridad es ésta, saber si la palabra es especial, Si esto es falso, entonoes el costo de la palabra dependerd de la longitud de ésta En cambio, on fa funcién cambiarMensaje, se prioriza Gnicamnente el punto, mismo que sord reemplazado por la palabra END. Si la pelsbra no termine con este signa, entonces solo se actican las palabras que son consideradas largas a M ~ 1 caracteres y alcanzen la longitud M cuando se agrega el signo #. Hay que considerar que el manseje cambiado an el nuevo archivo debe quedar con los mismos espacios y saltos de linea tel como el mensaje original. PEPE LUCHO 43 FUNDAMENTOS DE PROGRAMACION ~ 11 PARCIAL = Hereicio 2 Ung empresa agricola ha cecidido integrar un dron favién no tripulado} a una ce sus plantaciones de érea M x N pera poder monitorear el crecimiento de sus cultives. El dron a utilizarse tiene la capacidad de censar el nimaro de cultivos on una posicién Gi, j) por medio de la funcién censarCultives{tuplaPasicion} que mueve el dron a la posicién dads por la tupla y retoma un valor entero currespondiente al numero de cultivos en dicha posicion. Suponga que esta funcion ya existe, por lo tanta, no necesita ser desarrallada por usted. Implemente las siguientes funciones: 8. generarPlantacionttuplaBimensionPlantacian} que recibe una tupla indicando ol tama total (M, N) de la plantacion y procede a sensar los cultivos utilizando censartuitives. La funcién retomne le metriz plantacién que indica el nirmero de cultivas en cada posicion de la plantacién, b. analizarDensidad(plantacion, limite) que recibe coma parémetro la matriz plantacin del literal anterior y un valor entero positiva. La funcién debe retornar una nueva matriz indicando los grados de crecimiento de la plantacién. Una posicién (i, j} de la plantacién es considerada con crecimiento ‘BAJO’ si tiene menos de limite cultivos, caso contrario es considerade de crecimiento ‘ALTO’. Al definir la funcién, considere que el valor por defecto de limite debe ser 4, Por ojample: 5i plantacion = (15, 3, 2]. (4, 4,81, 12.3, 11 analizarDensidadlpantacién), retorna: IPALTO’, ‘BAJO’, ‘BAJO’, BAJO’, BAUCY, BAJO reporteCrecimientotplantacion, densidad) que recibe como pardmetros les matrices de los literales ay b. Suponga que “surco” es equivalente a una fila de la matnz y “parcela” es equivalents a una celda de la metriz, La funcién debe retornar una tupla de tres elementos can la siguiente informacién: a. Los promedios de cultives por surcos, b. Les posiciones, relativas @ cada surco, de les parcelas que tienen el mayor numero de cultives en dicho sureo. c. Los promedics de cultivos de las parcelas para los grados de crecimiento ‘ALTO" y BAO. Por ejemplo, si plantacion = 5, 3, 2) 1.4.81, (2,3, 111 reporteCrecimientotplantacion, densidad), rotorna: ((3.33333333, 4.39333333, 2.01, (0, 2, 11, (5.88687, 2.00 PEPE LUCHO 58 ERELKLKLCOLLK HE OHOLHKOCKK COL HCK KKK KK KKKKK KL KEKLKLKK KK AAA CTT TUT UU UU FUNDAMENTOS DE PROGRAMACION — 11 PARCIAL Solucisn: Parte [ import numpy as np # Funcién que recibe una t # que gepresenta a la plantacién # ketorna una mat onde c= o1 # cultivo, mismo que es obter def generar? lantac ion (tuplaDimens ionPlantacioa) ¢ plantacion = ap. zeros (tuplaDinensionPlantacion, int) for i in range (plantacion.shapel0]) : for j in range(plantacion.shape[ 11}? plantacion[i, }] = censarCultivos¢(, return plantacion Parte tl # Funcién que recibe 1a mat ado un cultivo tics a una matriz ¢ cada celda tiene el valor ‘arbensidad(plantacion, Limite = 4): densidad = np.where(plantacion >= limite, 010', ‘ale") dad ant y su matriz densidad respactiva. omedios por surcos, con lo deserito anter (plantacion, densic plantacion.mean(axis=1) promediosksurcos posicionesxelativas = plantacion.argmax(axis=1) promAlto = plantacion[densidad == '21.1)'] mean() promBajo = plantacion{densidad == '!) )'] mean() pronediosDensidad = np.arvey([promAlto, promBajol) return pronediosisurcos, posicioneskelativas, promediosD Esto problema no presonta mucha difiaultad, se ve reflejado en sus lineas de cddigo. En la funcion generarPiantancion, las ceidas de la macriz generada son llenadas a partir de la funcion censarCultives que como deralla el enunciado, ya esta implementada, y lo que se debe hacer es userla. En la funcicn analizarflensidad, se urilize una forma rruy Util de np.where, En esta forma, retorna una matriz, dependiendo de las condiciones que se le pasé camo parémetros. Si es usade de esta forma, soo recibe los valores en caso de que sea verdadero 0 falso Para la titima funcién, se considers importante el manejo de las funciones de NumPy. Se utiliza aiis=1 pare indicar que se trabajar con las filas de la matriz, ya que une fila es considerada un surce. Pare la parte de las dansidades, se utiliza indexeriento booleano para obtener los valores respectivos en una matriz unidimensional y a este resultado ce le calcula e! promedio. PEPE LUCHO 81 FUNDAMENTOS DE PROGRAMACIGN ~ 1! PARCIAL ©. Considere el siguiente cédigo ¢ indique qué se muestra por pantalla, Justifique su respuesta, Qistal, Listaa! 0 for i in listal: for j in li igi a.append(str(i) + str()) for x in afzl: a.append(stz(1) * strq)) return a print(funcion (listal, lista2)) Solucién: Considerando los parémetros pasados a la funcién, se tiene lo siguiente £1 algoritmo solo elecutaré su tarea cuando los valores a comparar sean cistintos, Para le primera iteracien: a= (SAI >aett Para la segunda iteraci6n a= (34,90, 6A] -> a =(3A, 3A, 6A, "6A, BA. ‘GAT Y esto es lo que se muestra por pantalla, ‘SAY 3A) 4d. Gonsidere el siguiente cidigo e indique qué se muestra por pantalla. Justifiquo cu respuesta, def fun(cadena, k): L=f) for elen in ser(cadena.split(’ ')): L.append(elen * i) voturn "2". join(L) cadena print (fun (cadena, y) Solueién: Al momento de ingresar la cadena a la funcién, se recorre el conjunto de la lista obvenida ai realizar el split, Dado que e! conjunto solo toma en consideracion clamentos Unicos, y de forma desordeneda, un posible caso es: ‘es’, ‘pragramar’, ‘estupende’?. Luogo se afade a la lista L el elemento concatenado k veces. Para el ejemplo seria: L = ['eses’, ‘programarprogramar’, ‘estupendoestupendol, y luego se utilize la funcin join para unir los elementos de una coleccién iterable, donde todos son ‘strings, con fa cadena especificada al inicio. En este caso seria: ‘eses#programarprogramarestupendasstupendo’ PEPELUCHO 52 ae Oa kK aa ek x a a ma eh EE we ER EE eee ULELLERELESEEEEEGEEEGEGEELULLLLLLLELEBEUULEEEUUUUE FUNDAMENTOS DE PROGRAMAGIO 1 PARCIAL EXAMEN 2016 — 11, Mejoramiento © Bercicio 1 Se tiene el archive llamado clientes.csv, cuya informacién corresponde a los clientes de una compari telefonica ubicada en Guayequil, el cual esta estructurado ce fa siguiente manera: Cédule, NémeroTeléfono,Area, MinutosLlamedaLocaliMinutcsLlamadslnternacional,Estado Por ejemplo, clientes. csv. 1979112648, 04 443268/Moxte, 12130, Active 1970112640, 04. 303056, 98x, 50115, activo 1202512426, 04 325363, Este, 90|12,act vo 1174253725, 94-450819, este, 30130, Cortado 2061722895, 04- 256519, Norte, 17/46, cortado 1729478396, 04-437289,centro, 4|2,Activo 1174253123, 04-324426,norte, 019, Cortado 1174253723, 04-283487 Norte, 15127, activo 1. Crear una funcidn llameds obtenerClientesfnombreArchivo} ls cual recibe como parémesro el nombre del archivo con los clientes de la empresa, y devuelve un diccionario con la siguiente estructure: 411174253723": {104-324426' "oa-a30d15" "od-203497" Norte’, ‘Local toeste", tlocal torte’; ‘local 0, testadot 30, "estado "cortado', ‘inter ‘cortado", ‘inter’ tactivet, “tint 15) testade ‘ra02sanea6ts ¢10g-226363! +, “Nocal': 90, ‘estadet: therive', Vinter': 1253, hagterazeaa': {t04-aa3290! tuortet, ‘Local's 13, taztadot: ‘activel, Minterts 30), "oa-383056": {tarca': "Sur", ‘Local': 50, ‘testado': ‘activo’, Tinter': 159), "1729478396": (104-437209": (tareat: tCentro', ‘local’: ty ‘active’, ‘inter': 2hY, ‘2guL72ze95": {*04-390559": {tarea": fe," *locait: 17) cortado", ‘inter’: 40})) 2, Crearuna funci6n llamada generarFacturaldClientes) la cusl resibe como parémetre el ciccionario de clientes generado en el literal anterior, y genera un archive por cada cliente, cuyo nombre es la cédule del clierte, y el contenida corresponde @ los valores @ pagar par cada cliente, La structure del archivo es la siguiente: archivo 1278112648. txt Para calcular los velores @ pagar considere las Empresa Telefonica de Guayaquil Cliente: 1278112648 Detalle Deuda 04-443288 local:0.36 inter:1.5 tota 04-363056 local:1.5 inter:0.75 total:2.25 Total 2 Pagar: 11 3. Crear una funci llameda estadisticaSectorldClic siguiontos tarifas: Tarifa Nacional: 0.03 el minuto Tarifa Internacional: © Menos de 60 min: 0.05 el minuto ‘Entre 60 y 90 min: 0.04 el minuto Més de SO min: 0.03 ef minuto: ites, area) que recibe como parémetro el diccionario de clientes generado en el literel 1, el nombre del érea y devuelve un diccionario con al promedio de minutos de llamacas locales e internacionales que han realizado los nkimenos telefonicas en estado ‘Cortado’. Por ejemplo: estadistieaSector(cCiientes, ‘Norte’ Respuesta: {Locales 8.50, ‘intemacionales': 24.50) PEPELUCHO 53 FUNDAMENTOS DE PROGRAMACION — 11 PARCIAL la @: {num vel archive en un dic tura del ps {festado': estado, def sbtone (nombrearchivo) : a=tt £ = open (nombrearchivo) for line in £ line = Line.stripO. campos = line. split (",") cedula = campos [0] atrip( Af cedula not in d: dicedulal = 0 nunores = dfcedulal nun = campos [1] strip () af nun not in numezos: infoN = (} sector = campos [2] .strip() estado = campos[-l].stripQ) local, inter = campos {-?].splite"/") local = int (local) inter = int ( infon[" infoN{"a:ca"l = sector infon[" 1 = local infoN[" "1 = inter numeros[num] = infoN £.close() return Dado que se va a crear un diccionario de tres niveles, es primordial reducir ol rival de dificulkad @ solo das, permnitiendo asf resolver el problema de manera sencilla, Anélogo al problema del ejersioio 2 del examen del 2016 ~ Il, Il Parcial, se va a trabajar con referencias, ‘acilitando el trabajo del pragramador, en Is asignacién do discionarios. La céidula del cliente representa la clave y el valor es un diccionario que contendré la informacion de los numeros de ese cliente, Este tendré como clave el miimero, y como valor un cicoiorario, suye informacién es acerca dol érea, el estado actual, los minutos locales e internasionales que se han consumido. El diccionario mémeres es el diccionario de dos niveles que se va @ menipular, ya qué los 3 niveles se eliminaron on ol condicional que pregunta.sobre la existencia de la cédule en el diccionario d. Una vez armado el diccicnarto més interno infall, éste os asignado como valor a fa clave num que reoresenta al namero telefénico en el diccionerio mmeras, Dado que se asté trabajando con referencias, ya no hay que preocuperse por la asignacién con el id del cliente, porque esto se realiz6 con anterioridad sin ningun inconvenionto. PEPE LUCHO 4 hh: 2S Oe aa eae aan be Kh he Oe SO Oo KE SO OS OOO Oe ee ee a CK ek Ke FFU FFF FFF T FFT T SFT SURO EEUU E EGET SGT EEEEE UY FUNDAMENTOS DE PRUGRAMACIGN — lI PARCIAL Parte It 4 Funcién adicional (Wo pedide), # minutos y el tipo. Si tipo ¢ 42, os internacional. tipo no es considerade paza la x acién del coste del cualquier o puto. ajcularCosto (minutos, tipo=: Gosto = 0 if tipo = 1 coste = 0.0 elif tipo == 2: Gf minutos < 60 costo = 0.05 elir minutos <= 90; costo = 0.04 alee: return minutos * costo # Rincién que genera la factura por cada c def yonerarFacture (dClientes) for cliente, numeros in dclientes-items() £ = open("{).22:".format (cliente), 'v") factura = ft mitt factura 4" 0 2s", format (cliente) factura +=" = totalAPagar for numero, i Wamero in aumeros.items (): local = infoNumero["!ai"1 inter = infonumero { "I costoN = calcularCestotlocal) © calcularCosto(inter, 2) costo? = costoN + costo! totalAPagar 4= costot factura t=" stee2tt -format (numero, costoN, costoI, costoT) factura $= 7 i f)\u" format (totalaPagar) f.write(tactura) f.closeQ) En la funcién generarfactera se va a recorrer el diccionario de @ riveles, que en este caso es dflientes. Hey que considerar que ol nombre dol archivo es cedula.trt donde cedula representa ala clave del diccionario. Para obtener la informacién referente a los nimeros, se recorre el diccionario mimeras, donde se trabaja con su-el numero telefénico y el diccionario que cantiene la informacién acerce de éste. De éste se torna en consideracién los minutos locales e internacionales y se calcula el costo total con le ayuda ce le funcién ealeularfesto cue no es pedida, nero es ideal para evitar escribir lineas de c6digos repetitives. La vanable totalAPagar 2g el acuulador que se inicializa por cade cliente, castaT representa le varieble acumuladora del total a pagar por cada nimere telefénica asociade al cliente Una vez anmado el archivo, se procede a escribir al contenido de la variable factura en el archivo, y Se lo cierra. Este proceso se repite para cada cliente presente en el diccionario. PEPE LUCHO 55 FUNDAMENTOS DE PROGRAMACIGN ~ |! PARCIAL 6 de log ada por el pa Clientes, area): promedios = 0 promedios [” i totalNumeros for numeros in dClient for infoNumero in pronedios{” iales") = 0 values): areaN = infoxunero[ er) estadoN = infoNumero[" "Lower 0. A€ area. lower() == areaN and estado == "ort ali": totaluneros promedios {" "] 4= infoNunero[”" oT promedios[" "] #2 infottunero!" *] if totalNumeros > 0: for tipoNumero in promedios: romedios [t ipoWumero] return pronedios totalNumeros Esta funcién es similar al problema que se resalvié acerca de las métricas (2016 — 1, Il Parcial). Dado que se trabajané con un diccionario de promedios, es primordial primero acumular todos los valores respectivos, y también trabajar con la variable contadora, en este caso totalNumeras ‘Que representard & la cantidad de nimeros por érea cuyo estado sea Bartadi Se calcula el promedio si y sélo si esta variable sea mayor que cero, caso contrerio, [a division seria imposible de realizar y lanzaria un error en tiempo de ejecucién. PEPE LUCHO 56 PRELLLKLLCLKOLLCLKL CLO COLKE KKK KARALAEKKKLCLKOKCLOCKEKRRAAAR BGG TTT T UU UU UU UU UU FU UU FUG FUNDAMENTOS DE PROGRAMACIGN — 11 PARCIAL 2 Bereicio 2 Para el control de Iss elasciones presidencisles de un pais, usted tiene dos matrices: JRV_H (juntas receptoras del voto, hombres) y JVP_M Guntes receptares dol voto, mujeres! con los votes de y mujeres pera cada uno de bs candidatos. Les filas representen los candidetos y les columnas representan las juntas receptors del voto. El nimero en la celda representa el numero de votos para un candidato en una JRV: JRV_H (hombres) SR_M (mujeres) E o = 2 Ee [4 | Candin 1 [15 | t45 [ean [Tas 2| 50 | {er | Ganio? | 18 | ie? | es |. | o7 f [as Candideto 3 | 108} 42 | 28 18 felon | zp fee pa Cancidaton [123] 23 | 98 | Te | Candideton [est Us I 67 | | 137 También tiene une tupla con los nombres de los cendidatos: candidates = Ccandidatot’, ‘candidate? ... » ‘candidatol”). ‘Suponge que estas matrices son creadas por una funcidn ya existente y retornadas al inicio de su programa principal. Por ejarnplo: a # = eroaMatri sHonbr: ‘Nota: No necesita implementar estas funciones 0 crear les matrices: esto va ha sido hecho por usted. Se le pide to siguiente: 1. Crear une funcion cantarliotastJRW_H, JRW_MD que recibe ambss matrices y devueive una tuple con los votos totales por cada candidato. 2. Crear le funcién sequadaWueltaWJRW_H, JRY_M) que recibe smbas matrices y devuelve el valor boolesno True si hay segunde vette, False si no, No hay segunda wieta si el primer candidetn tiene al menos el 40% de los vows registrados en las matrices, y al menos 10 puntos poreentusles de diferencie con el primero 3. Crear le funcién estadistica(JAV_H, JAVM, candidates, nombreCandidate) que reoibe ambos matrices, junto con el nombre de un candidat y devuelve para ese ceandidato una tupla con el porventaje de votos (el total globel de vatos), porventaje de votas de hombres (del total de votes pera ese candidate) y pammentaje de votns de mujeres (de! tote! de votes pare ese candidato). 4, Crear un programe principal que uslizenco les matrices JRV_H, JRV My las tres funciones anteriores muestre fo siguiente: PEPE LUCHO 57 FUNDAMENTOS DE PROGRAMACIGN ~ II PARCIAL Elecciones Presidenciales Candidato: Perico De Los Palotes ® votos totales: 41% % votos hombres: 55% ® votes mx} ase Gandidato: Juan Pueblo # votos totales: 20% @ votus hombres: 48% % volus mujeres: 52% Candidate: Juan Pueblo % votos totales: 15% % votos hombres: 30% % votos mujeres: 70% SIMO hb y segunda vuelta Soluci Parte I import mmpy as np # # del voto tanto para nombres y # Retorna una tupla con el def vontarvoton (IRV, IRV_M) votosilonbres = JHV_H.stm(axis=1) votosMujeres = JEV M.sum(axis=1) votosTotales = votosHombres + votasMujeres votosTotales = tuple (votosTatales) return votosTotales Kuncién que recibe dos natric al de volos por cad a las juntas receptor Parte Il # Fineion que recite dos # del voto tanto para te storna True on caso que la condicién para que ex oresentan a Las juntas receptoras pres y mujeres. a segunda vuelta, sea dade a, caso contrario, retor Vine lta (IRV_H, JRV M)? tar Yotos (IRY_E, np-array(votosTotales) votosTotales = votosTotales / votosTotales.sum() votosTotales = np.sort (votosTotales) primertugar = votosTotales[-1] segundoLugar = votosTotales{-2] diferencia = primeriuger - segundolugar return not (diferencia >= (.1 and primerLugar >= 0.4) votosTotale PEPELUCHO 58 EREKLKLKLKLCLOCHLOCLHLKOLLK OKC LKCHKASCECRKSKKK KKK CELLO COLE KKARAR MTF T TTT T UU UU UU ek FUEL UU FUNDAMENTOS DE PROGRAMACION — 11 PARCIAL Parte ill # Funcién que recihe dos matrices que repre! Wel yoto tanto para hombres y mujeres; la t e los nombres candidatos, y el nombre del c: oJ losdesea-ext!? porcentaje global de votos, el 5 hombres, y el por s mujeres respect a RV Hy IRV 2, candidatos, nombreCandidato) + candidatos . index (nonbreCandidato) votosHombres = JRV I Lindico] votostuy Nlindice] yotosTotales = JRV H.sumQ) + JRY § porcentajeGlohal = ((votosHonbre: Totales porcentajeHiombres = (votosHombres,sum() * 100) / JRV_H.sumQ porcentajeMujer: (votosMujeres.sum() * 100) / JRV_M.sum() return porcentajeGlobal, porcentajeHombres, porcentajeMlujeres return -1, -1 , -1 sun() uum() + votosMajeras.oum()) # 100 > En [a funcién contar¥otes, se obtiene primero la sume de las filas de cada una de las matrices. Como se aprecia en ta figura, las filas representan a los candidatas, par la que ambas matrices tienen la misma cantidad de filas, es decir, candidates. Al sumar los valores de cada fila, se obtiene un arregia de NumBy para cada matriz, y la suma matricial, ee la corwierte en una tupla, misma que representa la cantidad de vatas totales por candidato. En la funcién segundaVuelta se hace uso de le furcién contarlfotes para obtener los votos tatales por candidato. Sin embargo, hay que considerar que es una tupla, y es preferible trabajar con les bondades que ofrece la libreria NumPy. por lo cual se lo procede a convertir en un arregio A partir de este arregio, se pueden hacer operaciones aritmétioas, en este caso, se obtiene le proporeién de votes, que seré ordenada en un nuevo arreglo de manera ascendente. Los dos primero lugares son el altima y el pensitime elemento respectivamente. A partir de ellos, se pregunta si cumplen can los parametros establecidos para saber si existe ono segunda wielta. En le funcién estadistica se hace uso del nombre del candideto, pare obtener el indice correspondiente. EI indice permite acceder a los vatos, ya qua representa el indice de fa fila en ambas matrices. y @ partir de esto. se realizen los calculos respectivos para obtener el porventaje global de! total de votos, el porcentaje de votos que recibid por parte de los hombres, y también el poreentaje de vetos que recibié por parte de las mujeres, que son ratomados en una tupla. PEPE LUCHO 5S FUNDAMENTOS DE PROGRAMACION — 1! PARCIAL Parte IM (Programa Principal) # Prograna Principal # Hs mas sencillo tr didato, y el vali lave eus astad # Sianar diccionario estadisticas = ( for candidato in candidatos: tupla_cstadist diccionario _estadisticasicandidato] datos, candidate) jone una lista ordonada de los candidatos, a partir de las lietica: dena de mayor a nenor a partir del 1d (diccionario estadisticas. items (), key=Jambda infocandidato : infoCandidato[11[0], revers! ue) print (" ‘ stents for cendidato, infoCandidato in L print (" lator ()". format (candid , h, m= infoCandidato print" : " format (int (g))) print (" tek "format (int (h))) print (" "format Cint (m))) existeSeguada ~ segundaYuclta(JRV_H, JRV™) consigna Af existeSegund: consigne += else: consigna += consigna += * print (consigna) En el programa principal se hace uso de las funciones creadas anteriormente. Para facilitar la implementacién, se crea un diccionario, donde la elave es el nombre del candidata, y el valor es ‘@ tuple que contiene las estadisticas de dicho candidato, Con esto es mas sencilla ordenar, ya que este orden va 2 deperder del porcentaje global de! total de votes para cada cendidato, El método de ordenamiento fue explicado on la parte Hl del gjercicio 1 det examen del 2076 - Il, 1M Parcial. A partir de la lista ordenada, se muestra por pantalla los datos tal come pide el problema, y se mastrara si habra ono sagunda vuette, a pertir del valor retornacio por ia funcién segundatiuelta. PEPE LUCHO 60 PERC LOLCHEOCKOCELKCKCCKCKKKKLEKKKKKLKCKECLKLKLCKKKRRRAR 3 = = =a = = a) s5 al == aD = sed 2 — =o sD a == tal = sal = a5 “5 = =o = = = = = ss as aS aa a) S = 25 sad — se al ae a FUNDAMENTOS DE PROGRAMAGION — 1! PARCIAL * Ejercicio 3 8 Dado el programa deserta a continusc:én, indique la selide y justifique su respuesta: import numpy as [10, 12, 11, 4 ,81 Ae Bn 1 np.array({], int) ap.append(matriz, L[2: 41) ap.append(A, MEL! 2]).zeshape((2, 2)) c= (AtB) (2 print (c) import numpy as np (10, 12, 11, 4,81 14 rly 20 71 matriz = np.array([], int) = np.append(matriz, L12: 4]) # A= [11, 4] = apsappend(A, MIL? 31) -zechape((2, 2)) = (1t, 4, 2) 11 -» B= Cf11, aly [2 101 (A* BD sf 2 Hc = [[12t, Le], (22, print(c) # (160, 81, [ Dado e! programa descrito @ continuacion, indique ia selida y justifique su respuaste: a= Sate? while len(L) < 20: i *s print (L) Soluciga: # Literal b PEPE LUCHO 61 FURDAMENTOS DE PROGRAMACION — I! PARCIAL EXAMEN 2017 — 1, Mejoramiento (V1) = Bercicio 1 Considere que tiene warins archivos de notas cuyos nombres tienen el siguiente formate netas- afio-términe.esv y su contenido es: matricula,materia,ncta_percial,nota_final,nota_mejoramiento AP/AP. T SS 01521342, Fundanentos de 200901456, Pisica T,80,91,73,AP | : 2,80, 95 99,8 201321454, Qvinica,45,.57,13,A8 | 2o1s21454, Reonomia, 12/21, 33,8P 20122972, Beonomia, 75,03, 95 a8 201321454, Fundanen‘os 202321454, Fundamentos’ de Progranacian 45, 76,29,28 Brogranaclén,11/9/9/RP | | . |. Realce lo siguiente: 1] Implemente la funcién aeadémicolarekiva) que recibe une tupla con los nombres de los archivos de las notas de los estudiantes. La funcién deberé retornar un diccionario eon la siguiente estructura: notas = (201321454: (*2013-11':[(*Quimica’ ,45,57,73,'AP'), ramacién’,11,9,9,/RP!), I, Sundanentos de Pre "201-1" "Econbnia’ ,12.21,43,°RP") , (Funcamentos de Programacion’,45,76,89,/AP"\, J, i 2013-11 he 2oo9014' sica If ,80,91,73,'AP’), «1, mab 2) Implemente una funcién cemestrestactas, matricala) quo recibe ol diccionario de ncteo y un nimero de matricula. La funcién devolveré una tupla con tedos les semestres en que el estudiante ha tomado materias. 3) Implemente una funcién nota_academicotnotas, matricela, materia) que rocibo ol diccionario de notas. una matricula y el nombre de una materia. La funcién devolvera la nota total para le mater‘a, que se calcula como el promedio de las dos notas més altes entre parcial, final y mejoramiento. Si cl estudiante no ho tomade la materia aun, le funcién deberé retomnar cero (0). Si el estudiante ha tomada la materia en més de una ocasion, la funcidn deberé retornar el promedio més alto. 4) implemente una funcién mas_aprobadostnatas, semestra) quo dovuolve ol nombre do la materia con mayor cantidad de estudiantes aprobados para dicho semestre. PEPELUCHO 62 EREROLCOCELRELKOCLECKOELKEKEKKKLKRALEKKLKKLKLKKKLCLCLLKCKLKLEABAD FUNDAMENTOS DE PROGRAMAGIGN — I PARCIAL Soluciéi Parte | from statistics import mean Funcién que racibe una tupla con Jos nombres de erchiva 2 diccionario con la estructura detallada en el e »(archivos) = notas = {} for nombreArchivo in archivo: £ = open(nombreArchivo, '!') termino acadenico = obtenerTermino(nomhreArch iva) for linea in compos: ripQ .split(",") campos lint (nota) for nota in campos{?: -111 natricula = Sf0].strip() if matricula not in notes: notas(matricula] = {} info_estur notasfmaLricula} 4€ ter not in info estudiante: in} ante[termino academico} = [] lista materias = info estudiante[termin tupla = tuple(campos{1: 1) lista materias-append(tupla) Ficiosea. return notas academico} Licional que pe 2 de archivo que si or Term ino Monbrekrchivo : indicoCSV = nonbreArchivo. find ("20") nombrearchivo = nombreArchivo[: indicecsv] componentes = nombreArchivo.stripQ.split(’") termino = "-".join(componoates{1: ]) xeturn termino Parte I # Pimcion que recibe el diecionaric # a obtener terminos acacéenicos. # Retorna una tupla con los términos aca\ dof somestros(notas, matricula): tezminos if matricula in notast info terminos = notas{matriculal terminoe — tuple (info terminos) return terminos ) el estudiante. La funcién académica es muy diferente a les demas que se ha visto en el desarrollo de este folleto. Para obtener el término académico, se realizé otra funcién obtenerTerming, misma que 2 partir del formato establecido, se obtione al tarmino corresponciente. Se debe considerar la estructura cel dicsionario. y pare evitarse los 3 niveles de anidamiento, se disminuye eso en la pregurita si la matricula se encuentra en el diocicnario metas. De ser verdad, se agrega un Giosionario vacio, y por el concepto de referencias explicado en soluciones anteriores (2018 - I, PEPE LUCHO 63 FUNDAMENTOS DE PROGRAMACIGN — 1! PARCIAL I Parcial, Ejercicio 2), es mucho més sencilla acceder al diccionario que esté asociada a la matricula. Lo mismo ocurre cuando la clave es el término (segunda nivel ya que el tercer nivel representa ¢ la lista de materias qua fueron tomacas en ese término, permitiende asf que ta funcion see lo mas limpia posible en cuestién de cédigo entendible, y cumpla su propésito. En la funcin semestres se tiene en consideracién la matricula del estudiante como parémetro arecibin Considere quo la matricula representa la clave en el diccionario natas, por la que se va @ obtener el diccionario asociada @ ese niimerc de matricula. Dentro de esta diccionerio, se enouentra como clave ef términe y como valor una lista de tuples que contionen fas materia vistas en ese término. Se va a convertir la coleccién de claves en una tupla y eso es lo que se retorna. Parte IM 4 Funcién que recibe ol diccionario de Lat el prome Retor # en # retornaré def nota promedios pronedio| if nat terminos estudiante = notas{matricula] for naterias in terminos estudiante. values (+ for infoMatoria in materiac nateria tomada = infor if materia tonada ca acione: onedio md ninos acadér lor de ivo(notas, matricula, materia): teria to} materia List (infoMateria[1: -11) sort (reverse=Teue) promedio termino = mean(calificaciones[@: 21) bronedios append (promedio termino) if len(promedios) > 0: promedios .sort (reverse=True) promediv = promedios [0 return promedio ficacione: En la funcién nata_academico se tiene en consideracion la metricula del estudiante camo parémetro a recibir y también le materia a consultar. Se crea una lista de promedios, puesta que puede darse el caso que al estudiante haya visto algunas veces le misma materia, como ninguna vez. Se recorre las materias vistas por el estudiante en cada términa académico, y si enouentra la materia, procede a obtener sus promedios, los ardena de mayor @ menor, obtiene su promedio, y lo adjunta a la lista promedios. Una vez finelizedo, se procede a organizer los pramedios. y se retoma el promedia més alto, En caso de haber visto la materia, el promedio a retormar es de cero, PEPE LUCHO 64 ELEKKLKLLCLLOLLO LOO LO LKOCLKKSCKKKEKLLKCLKLKEC LE OKC CKTAARRR FUNDAMENTOS DE PROGRAMACION — 11 PARCIAL Parte WV 1 recibe e1 diccionario uotas, y el tno acadénico del cual ea obtener cudl es la materia que m, ados tiene rna el nombre de 1a materia cuya e estudiantes aprobados aprobados (notas, senestre) = materia = "Minquia" materias = (} for info_terminos in notas. values (): if semestre in info termine naterias ternino = info terminos{senestre] for info nateria in materias termino: asignatura = info materia{0] estado = info _materia(-1] if ectado —= 7 if asignatura not in mat naterias[asignatura] else: naterias[asignatura] += 1 materas ordenadas = sorted(materias.items(), key=lanbda tupla: tupla[i], reverse=True) materia = materas_ordenadas [0] [0] return nateria En la funcién mas_aprabadas se tiene en consideraci6n el semestre a consultar. Por esta razon, se crea un diccionario, cuya clave sera la materia, y el valor, la centidad de estudiantes aprabados de ésta, Una vez obtenido los velores correspondientes, se procede a ordenar, tal como se ha ido haciendo en los ejercicios anteriores cusndo se trata de ordanar al diccionario por el valor. Una vez ordenado de forma descendente, se obtiene la materia que tiene la mayor cantidad de aprobados, y este es el valor que retorna la funcién. PEPE LUCHO 65 FUNDAMENTOS DE PROGRAMACIGN — 11 PARCIAL 3% Elercicio 2 Como meteorélogo, Ud. tiene registros de todos los huracenes por affo del Atlético Norte. Cada huracén ‘tena un nombre. Los registros se encuentran en una matriz M de RlumPly, con la ciguionte oxtructure. Categoria de huracanes: Herr nreenre gavaa®w eee eer 1. W100 kip + Mlex ... Dito Arlene... Harvey Irma = 2 Wde 1004150 kph : 3. W de 150 6 200 kph Velocidad desplazamienta (Vd) mi Ar A | ws | 18 | 4 Wade 2002 250kph ees | Velocidad Rafeoas (vn) | | 89 195 | 120 | | t80 | 2ap| 5 W>PBObo Velocidad Viento (wi | ... | 65 | 110, | 200} + [ap vweboidedes estén. eng t | Kdiémetros por hora (kph Luvs | 30 | 89 | 67 = © La catidad de lluvia esté ents Merejada | us I [8 ccontimotras Cem! + Las alturas de marejadec' estén en metras (mts) Ademés, se tene un diccionario donde la clave es el afo lint) y el valor es una tuple can los nambres de loc hurecanss pare ese afc. Los nombres de los huracanes no se repiten y estén en el misme orden en el que eperecen en Mz huracanes = { 2015: (/Ana’, . ‘wate’), 2017: ("Arlene', ., ‘Harvey’, ‘Irma'), 2016: ("Alox", , fObto!), 3 Entonces: 1 Implemente la funcién total_marejada(M, cat) que retorna el ital de marejedas en meiros causades por los huracanes que tengan categoria eat. La categoria es recibida como un valor entre 1y 5. Implemente le funcién indices aifethuracanes, afte} que retorna une tuple con los indices de columne donde empieza y termina afio en la matriz M. Esoribs Js funcién velocidad _superior{M, huracanes, afio) que retomn Ja cantidad de huracanes fen afie que tienen la velocidad de desplazamienso (Vd) cupericr a la velocidad de desplazamiento promedio del aifa dado como parémetro. Implemente fa funcion AGE(M, huracanes, afie} que devuelve la cantidad de energia liberade por todos los hurecenes de la ternpurede afia. Esto se calcula asi: cantidad energia * (vie + Ve + Vn} Implemente fa funcién HuvialM, huracanes, nombre_huracan, afio) que devuelve la cantidad de lluvia en centimetros generade por e| membre huracan en aiio. PEPELUCHO 66 are EERKKLKOK KAN KOH OKA LAO OK OLN OK OKA RKHR FUNDAMENTOS DE PROGRAMACION — 11 PARCIAL Jicipnal que recibe como parémetre nr la (velocidad categoria = 0 if velocidad viento < 100: categoria = 1 elif velocidad viento <= 140: categoria elif velocidad viento <= 200: categoria = 3 elif velocidad viento <= 250: categoria else categoria return categoria # Funcién adicional que ite obt categorias de lps huracanes. # Becibe un arreglo ¢ 2 y retorna in arreglo de catege def obtener catego: ias(velocidades viento} + categorias = np.array({I, dty ) for velocidad in velocidades viento categoria asignada = categoria(veloc categorias = np.append (categorias, categoria asignada) return categorias # Funcion que recibe la matriz M coa nformacién de los y # la categoria de los huzacanes. 4 netorna el total de marejadas on metros, causad os # que te la categoria re " def tolal marejada@, cat): velocidadas viento = MU] Categorias = obtoner_catagorias(velocidades_viento) marejadas = M[-1] marejadas = marejadas[categorias total marejadas = marejadas.sumQ return total mar Le funcién total_marejada es sencilla de implementa” si se utilizen dus funciones adicionales, Estas funcicnes no son pedidas por el enunciado, pero son de mushisima utilidad. Le primera, categoria va @ clastfcar la velocided dol vionto dependiendo de los intervalos establecicos en el enunciado dol problama. La segunde, abtener_categorias, rece un erreglo de NumPy con las velocidades de viento de los huracanes, ¥ retoma las eategorias en un erreglo de MumPy. Se utiliza la funcion eategaria se llama por cada elemento del arreglo. Una vez realizado el procedimionto, es mas sencilla hacer el indexarniento booleano en la funcion pedida, y se obtione el total de las marejadas de los huracanes quz tengan la categorie cat. PEPE LUCHO 87 FUNDAMENTOS DE PROGRAMACION — 11 PARCIAL Parte Il ncién que rec 4 Retorna u © como pardnetro e tupla con indices de (auracanes, anio): anios = list (nuracanes) anios.sort () imlicetnicio = indiceFin = ¢ if anio not in huracanes: Inicio = indiceFin = ~ else: for anio lista in anios: af anio | tupla = burecanes[anio lista) esp = Lenct indi cetnicic if anio ani desp = huracanesfanio} indiceFin = indicetnicio + desp return indiceTnicio, indiceFin Parte Fancian que recibe 1a matr Retorna La idad de huraca: azaniento superior a la inicio, fin = ind racanes, anlo) desplazamiento = MIU, : fin] pronedio_anio splazamiento.mean () hur sup, splazamiento[desplazamiento > promedio_anio] total_huracal hur_sup 2{0) Parte I 4 Funcion que recibe la 4, -cionario huracanas y el ania # Retorna Ja canti liberada por los huracanes dei atio def AcE (iM, huracane: vientos = MI2, i sumatoria = (vientos #* 2).eum() cantidad energia = (10 ** -4) * sumatoria return cantidad energia huracanes, an: La funci6n indices_anio es el corazén de las si Iquientes funciones a deserroller. La idea de esta funcion, es observar, primero, que las columnas de la matriz representen a los huracanes, y los afi las regiones existentes en las columnas. Sin embargo, hay que considarar que el diccionario no maneja ardenamiento como en las listas, por lo que se procede a conversir la coleccicn de claves dal diccionario en ura lista, y ordenarios de manera ascendente, Con el orden establecido en la lista anios, ya se puede trabajar directamente con las regiones, y a partir de eso, so cbtienen el indice de inicio y el indice de fin del aff en cuesticn, mismos que serén retomados en una tupla. PEPELUCHO 68 HEKKKNLKLKOLOL AKA LHOHKH HOLA HHO OHO OHOHK HK KKK KKK HK OKO HHO HK LKARRAR Foe F TTT U GUT TTT FGF TUFF k FFF Fee e TUT Uk UU FUNDAMENTOS DE PROGRAMACIGN — 11 PARCIAL Parte WV # Funcion que recib natriz M, el diccionario buracana # el nombre del hura # Retorna la cantidad de metros gene: # el huracdn que re: ano. der 1 (4, huracanes, nombre huracan, anio}: huracanes_anio s{anio} indice columa ‘0. index (nombre_buracan) inicio, fin = indices _aniofhuracanes, anio) Lluvias anio = M[-2, inicio: fin] lluvias huracan = lluvias anio[indice columa] eturn Lluvias t La funcion welecidad superior trabaje con un slicing en la matriz MI. Gracias a la funci6n deserita en la parte Il, el cdlculo se vuelve sencillo, y se utilzen les funciones que vienen con la libreri. Una vez obterido el promedia de velocidades del efio, sa pracede a realizar un indexamianto booleano, para asi chtener un arreglo de velocidades, que es superior al promedia encontrado. Appartir de este Ultimo, se considera la cantidad de elementos presentes, mismo que es el valor que la funcién debe retornar. La funcidn ABE trabaja con un slicing en la matriz MI. Gracias a la funcién descrita en la parte I al célculo se welve seneilo, y se utiizan las funciones que vienen con la libreria. Se obtiene el arreglo correspondiente, y sus valores se elevan al cuadrado. Esta operacién da como resultado tro arregio de Numb al cual se le suman todos sus valores, resultado que se aimacena en la variaole sumatoria, Se procede a realizar los céioules, y se retorna el valor correspondiente. La funcién Muvia trabaje con un slicing en la matriz M. Gracias a le funcién descrita en le parte Il, la obtencién de los datos referentes al afio se vuelve sancilla. Se procede a obtener al indice donde se encuentra almacenado nambre_huraran, ya que representa la columna en el slicing realizado. 4 partir de aqui, solo son operaciones con indexanniento para abtener el valor pedide. PEPE LUCHO 63 FUNDAMENTOS DE PROGRAMACIGN — 1! PARCIAL * Hercicio 3 2 éQué imprime el siguiente cédigo? Justifique su respuesta a = ‘mensaje’ c= ‘abedefg* jen(e) = 1 for b in ar print(b * c.index(cf11)) icel Como se puede apreciar, la parte de e.indexCelil) es un distractor, porque al fin y el cabo, se testé trebejando con caracteres Unicos en Is cadena o. Esto no fuera un distractor, si la cadena en Ia variable c tuviers caracteres repetides. A paruir de esco, ve @ imprimir une piramide que tencra seis columnas en el inicio, yel final, una sole columns: mrmmn eve2e nnn 988 aa b. Dado el programa descrite & continuacién, indique fa selida y justifique su respueste: Le 5, 3, 8, 2 1 A= [0] * 10 for valor in bu: if valor < 6: indice -= 1 else: indice + Alindice] = valor print (set (3)) suci6i # Considerando que aquellos valores que son menores a 6, se va a llenar el # arreglo Aa la izquierda del indice 3 en las 2 primeras iteraciones. #R= 10, 2,7, 0, 0, 0, 0 0, 0,,0) print(sot @)) # (0, 2, 7) PEPELUCHO 78 PREKKKOKLKOHLK AKO HOH OOHOHOKHLKLCRKKKKRAKKKKKKKKLKLLCKCKKKRARAR

Das könnte Ihnen auch gefallen