Ejercicio: 2Eva_IT2017_T3 Prueba de escritorio - cadenas, archivos, listas
literal a. cadenas de caracteres, archivos de texto, listas de texto.
literal b. conjuntos, unión, intersección, diferencia simétrica
Ejercicios resueltos de examen
Ejercicio: 2Eva_IT2017_T3 Prueba de escritorio - cadenas, archivos, listas
literal a. cadenas de caracteres, archivos de texto, listas de texto.
literal b. conjuntos, unión, intersección, diferencia simétrica
Ejercicio: 1Eva_IT2017_T1 Palabras puntaje
Propuesta de solución en Python, revisar tema indicado como tarea:
Para iniciar el algoritmo se presenta un ejemplo busca como resultado: mostrar cada palabra y su puntaje.
Al final se muestra la palabra que obtuvo mayor puntaje.
palabra, puntaje: CAS*A* 6 S*ASTR*E* 6 R*EY* 6 A*ZOTE* 14 Mayor puntaje: A*ZOTE* 14 >>>
En el bloque de ingreso se ha optado por incluir las palabras del ejercicio del enunciado.
Para simplificar la identificación de las letras se convierten todas a mayusculas en caso que el usuario las escriba en minúsculas. Se utiliza un contador de "puntos" por cada "palabra".
Luego se procesa cada palabra, analizando cada letra para encontrar su puntaje equivalente.
# 1ra Evaluación I Término 2017 # Tema 1. puntaje de palabras # Tarea: considere los '*'como doble puntaje # para letra anterior import numpy as np # INGRESO # variaspalabras = input('Analizar: ') variaspalabras ='CAS*A*,S*ASTR*E*,R*EY*,A*ZOTE*' # PROCEDIMIENTO abecedario = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' equivale = [1,3,3,2,1,4,2,4,1,9,5,1,3,1,1,3, 10,1,1,1,1,4,4,9,4,10] # unifica a mayúsculas variaspalabras = variaspalabras.upper() # separa las palabras por ',' palabras = variaspalabras.split(',') n = len(palabras) # arreglo de puntos por cada palabra puntos = np.zeros(n,dtype=int) i = 0 while (i<n): unapalabra = palabras[i] m = len(unapalabra) # Analiza palabra, letra por letra j = 0 while (j<m): letra = unapalabra[j] if (letra in abecedario): donde = abecedario.index(letra) puntos[i] = puntos[i]+equivale[donde] j = j+1 # siguiente letra i = i+1 #siguiente palabra # encuentra posición del máximo puntaje cual = np.argmax(puntos) # SALIDA print('palabra, puntaje: ') i = 0 while (i<n): print(palabras[i],puntos[i]) i = i+1 print('Mayor puntaje: ') print(palabras[cual],puntos[cual])
Ejercicio: 1Eva_IT2017_T2 suscriptores de youtubers
Propuesta de solución en Python, procedimiento desarrollado por literal
# CCPG1001 Fundamentos de Programación FIEC-ESPOL # 1Eva_IT2017_T2 suscriptores de youtubers import numpy as np # INGRESO matriz = np.array([ [ 24771906, 5477807839, 21900, 262800], [ 184551280, 7046108694, 45500, 546000], [ 76493, 798122, 36, 430], [ 133538, 21104851, 156, 1900], [ 18554394, 1967543913, 6700, 80000], [ 12548964, 2034702069, 12200, 12200]]) espana = ['elrubiosOMG','VEGETTA777'] ecuador = ['enchufetvLIVE','Kreizivoy'] mexico = ['Yuya','Werevertumorro'] # PROCEDIMIENTO # Literal a) ******** tamano = np.shape(matriz) n = tamano[0] m = tamano[1] rentabilidad = np.zeros(n,dtype=float) f = 0 while not(f>=n): rentabilidad[f] = matriz[f,m-1]/matriz[f,0] f = f + 1 cualganamas = np.argmax(rentabilidad) todos = espana + ecuador + mexico quienganamas = todos[cualganamas] dondees = 'español' if quienganamas in ecuador: dondees = 'ecuatoriano' if quienganamas in mexico: dondees = 'mexicano' # SALIDA print('literal a: ') print(rentabilidad) print('el mas rentable es: ',cualganamas) print('quien es mas rentable: ',quienganamas) print('del pais: ', dondees) # Literal b: ******** # Solo trabajo con espana nsp = len(espana) datoespana = matriz[0:nsp,:] rentasp = datoespana[:,m-1]/datoespana[:,0] cualsp = np.argmax(rentasp) quiensp = espana[cualsp] # SALIDA b) print('para espana: ') print(cualsp) print(quiensp) # literal c) ******** ecmx=matriz[nsp:,0] popecmx = np.argmax(ecmx) cuantoecmx = np.max(ecmx) ganan = 0 suscritosp = matriz[0:nsp,0] f = 0 while not(f>=nsp): if (suscritosp[f]>cuantoecmx): ganan = ganan + 1 f = f + 1 # SALIDA c) print('tienen mas en espana: ',ganan) # literal d) ******** reproduce = matriz[:,1] cuantosrp = 0 totalrp = 0 f = 0 while not(f>=n): if (reproduce[f]>1000000): cuantosrp = cuantosrp+1 totalrp = totalrp + reproduce[f] f = f + 1 promrp = totalrp/cuantosrp # SALIDA d) print('promedio mas un millon: ',promrp) a=len(espana) rentaec = rentabilidad[a:a+len(ecuador)]
resultado del algoritmo
literal a: [0.01060879 0.00295853 0.00562143 0.01422816 0.00431165 0.00097219] el mas rentable es: 3 quien es mas rentable: Kreizivoy del pais: ecuatoriano para espana: 0 elrubiosOMG tienen mas en espana: 2 promedio mas un millon: 3309453473.2 >>>
Ejercicio: 1Eva_IIT2016_T1 Analiza una frase por vocales y consonantes
Propuesta de solución en Python, para:
texto = 'Algunas Palabras pArA contar en un programa con algo de Python' Igual número de consonantes y vocales: 5 >>>
Para facilitar el trabajo con el texto, se convierten todas las letras a mayúsculas upper().
En principio, se considera que las palabras se separan solo por espacios ' ', separando las palabras en sus partes usando la instrucción split(' '). Queda como tarea considerar otras formas de separar palabras con ',' y '.'
>>> partes ['ALGUNAS', 'PALABRAS', 'PARA', 'CONTAR', 'EN', 'UN', 'PROGRAMA', 'CON', 'ALGO', 'DE', 'PYTHON'] >>>
Las vocales y consonantes se referencian con los caracteres en mayúsculas.
El análisis se realiza por cada palabra, luego por cada letra, realizando el conteo de cada vocal y consonante.
>>> j=0 >>> palabra=partes[j] >>> palabra 'ALGUNAS' >>>
El resultado se obtiene al comparar los contadores de vocal y consonante.
# CCPG1001 Fundamentos de Programación FIEC-ESPOL # 1Eva_IIT2016_T1 Analiza frase por vocales y consonantes # Solución propuesta: edelros@espol.edu.ec # INGRESO # texto = input('frase: ') texto = 'Algunas Palabras pArA contar en un programa con algo de Python' # PROCEDIMIENTO # unificando todo mayúsculas texto = texto.upper() # Separa palabras por espacios # Tarea: considerar ',' y '.' partes = texto.split(' ') m = len(partes) vocales = 'AEIOU' consonantes = 'BCDFGHJKLMNPQRSTVWXYZ' cuenta = 0 j = 0 while not(j>=m): palabra = partes[j] # Analiza una palabra n = len(palabra) cvocal = 0 # contador vocal cconso = 0 i=0 while not(i>=n): letra = palabra[i] if letra in vocales: cvocal = cvocal + 1 else: cconso = cconso + 1 i = i + 1 if (cvocal==cconso): cuenta = cuenta + 1 j = j + 1 # SALIDA print('Igual número de consonantes y vocales: ') print(cuenta)
Ejercicio: 2Eva_IIT2016_T3 Prueba de Escritorio - conjuntos, operaciones, diferencia simétrica
conjuntos, operaciones con conjuntos, diferencia simétrica
Ejercicio: 2Eva_IIT2016_T2 País destino para jubilados extranjeros
Propuesta de solución en Python:
requiere usar el archivo: destinosdatos.txt
# CCPG1001-Fundamentos de programación FIEC-ESPOL # 2Eva_IIT2016_T2 País destino para jubilados extranjeros def cargarDatos(nomFile): datos = {} archivo = open(nomFile, 'r') linea = archivo.readline() while not(linea==''): linea = linea.strip('\n') partes = linea.split(',') ciu = partes[0] met = partes[1] val = float(partes[2]) if not(ciu in datos): datos[ciu] = {met:val} else: datos[ciu][met]= val linea = archivo.readline() archivo.close() return(datos) def metricaPais(datos, paises): promedios = {} for unpais in paises: totalcanasta = 0 totaltemperatura = 0 ciudades = paises[unpais] for unaciudad in ciudades: unacanasta = datos[unaciudad]['canastaBasica'] totalcanasta = totalcanasta + unacanasta unatemp = datos[unaciudad]['temperatura'] totaltemperatura = totaltemperatura + unatemp # los promedios son por pais promediocanasta = totalcanasta/len(ciudades) promediotemperatura = totaltemperatura/len(ciudades) promedios[unpais] = {'canastaBasica': promediocanasta, 'temperatura': promediotemperatura} return(promedios) def generaPaises(promedios, metrica, minimo, maximo): narchivo = 'cumplencon.csv' archivo = open(narchivo, 'w') for unpais in promedios: valor = promedios[unpais][metrica] if (valor>=minimo and valor<=maximo): linea = unpais +'\n' archivo.write(linea) archivo.close mensaje = 'resultados en archivo' return(mensaje) # PROGRAMA Prueba # INGRESO paises = {'Ecuador':{'Cuenca','Guayaquil'}, 'Colombia':{'Bogotá'}} nomFile = 'destinosdatos.txt' metrica = input('cual metrica: ') minimo = float(input('minimo: ')) maximo = float(input('maximo: ')) # PROCEDIMIENTO tabla = cargarDatos(nomFile) promedios = metricaPais(tabla, paises) cualescumplen = generaPaises(promedios, metrica, minimo, maximo) # SALIDA print('tabla de datos: ') print(tabla) print('paises') print(paises) print('promedios de características') print(promedios) print('paises de interes para el jubilado, en archivo')
Ejercicio: 1Eva_IT2016_T2 historial de visitas web
literal a. Se obtiene un registro de los sitios visitados, para luego separar sus partes entre empleado|sitio|duracion.
Para los sitios que no son de trabajo se usa una lista llamada ocio. Si el sitio visitado no se encuentra en trabajo, se añade a la lista ocio. Se considera revisar que la lista no tenga elementos repetidos
# a) sitios que no son de trabajo ocio = [] n = len(visitados) i = 0 while not(i>=n): registro = visitados[i] partes = registro.split('|') sitio = partes[1] if not(sitio in trabajo): if not(sitio in ocio): ocio.append(sitio) i = i + 1
literal b. Par contabilizar el tiempo por empleado se acumula en una lista los tiempos de navegación, usando la posición del empleado en la lista obtenida con la instrucción empleados.index(quien)
# b) tiempo de internet/empleado m = len(empleados) tiempo = np.zeros(m,dtype=int) n = len(visitados) i = 0 while not(i>=n): registro = visitados[i] partes = registro.split('|') quien = partes[0] indice = empleados.index(quien) cuanto = int(partes[2]) tiempo[indice] = tiempo[indice] + cuanto i = i + 1
Se procede de forma semejante para obtener una tabla de tiempos por sitio.
Una respuesta que se pude obtener de la tabla anterior es la búsqueda del empleado más ocioso, el que ha usado más tiempo en sitios de ocio. (tema 3, literal f)
# CCPG1001 Fundamentos de Programación FIEC-ESPOL # 1Eva_IT2016_T2 historial de visitas web import numpy as np # INGRESO visitados = [ 'maria2|www.facebook.com|160', 'xavi7|www.eluniverso.com|50', 'jose15|www.sri.gob.ec|30', 'maria2|www.twitter.com|30', 'xavi7|www.inec.gob.ec|10', 'maria2|www.espol.edu.ec|50', 'jose15|www.sri.gob.ec|120', 'xavi7|www.sri.gob.ec|20', 'maria2|www.twitter.com|20',] empleados = ['maria2', 'jose15', 'xavi7'] trabajo = ['www.espol.edu.ec', 'www.inec.gob.ec', 'www.sri.gob.ec'] # PROCEDIMIENTO # a) sitios que no son de trabajo ocio = [] n = len(visitados) i = 0 while not(i>=n): registro = visitados[i] partes = registro.split('|') sitio = partes[1] if not(sitio in trabajo): if not(sitio in ocio): ocio.append(sitio) i = i + 1 # b) tiempo de internet/empleado m = len(empleados) tiempo = np.zeros(m,dtype=int) n = len(visitados) i = 0 while not(i>=n): registro = visitados[i] partes = registro.split('|') quien = partes[0] indice = empleados.index(quien) cuanto = int(partes[2]) tiempo[indice] = tiempo[indice] + cuanto i = i + 1 # b) tiempo de internet por empleado/sitio. matrices k = len(visitados) n = len(empleados) todositio = trabajo + ocio m = len(todositio) tabla = np.zeros(shape=(n,m), dtype=int) i = 0 while not(i>=k): registro = visitados[i] partes = registro.split('|') quien = partes[0] fila = empleados.index(quien) donde = partes[1] columna = todositio.index(donde) cuanto = int(partes[2]) tabla[fila,columna] = tabla[fila,columna] + cuanto i = i+1 # Tema 3. f) # empleado es mas ocioso parte = tabla[:,len(trabajo):] ocioempleado = np.sum(parte, axis =1) masocioso = np.argmax(ocioempleado) quien = empleados[masocioso] # SALIDA print('sitios de ocio: ') print(ocio) print('tiempos por empleado: ') print(tiempo) print('tabla de tiempos: ') print(tabla) print('empleado mas ocioso: ', quien)
resultado del algoritmo
sitios de ocio: ['www.facebook.com', 'www.eluniverso.com', 'www.twitter.com'] tiempos por empleado: [260 150 80] tabla de tiempos: [[ 50 0 0 160 0 50] [ 0 0 150 0 0 0] [ 0 10 20 0 50 0]] empleado mas ocioso: maria2 >>>
Ejercicio: 3Eva_IT2016_T3 Prueba de escritorio - funciones, listas, caracteres
funciones, listas, lazos, condicionales, caracteres
a) (5 puntos) Considere lo siguiente e indique el resultado al ejecutarlo. Justifique su respuesta.
lista1 = [3,'A',6] lista2 = ['A'] def funcion (lista1, lista2): a = [] for i in lista1: for j in lista2: if i != j: a.append(str(i) + str(j)) for x in a[:]: a.append(str(i) + str(j)) return(a) print(funcion (lista1, lista2))
Ejercicio: 3Eva_IT2016_T2 sensar cultivos con dron
Propuesta de solución en Python:
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # 3Eva_IT2016_T2 sensar cultivos con dron import numpy as np import random as rnd def sensarCultivos(posicion): # Solo para generar una matriz que # permita trabajar con el programa valor = int(rnd.random()*10+1) return(valor) def generarplantacion(dimension): n = dimension[0] m = dimension[1] plantacion = np.zeros(shape=(n,m),dtype=int) i = 0 while not(i>=n): j = 0 while not(j>=m): posicion = [i,j] valor = sensarCultivos(posicion) plantacion[i,j] = valor j = j + 1 i = i + 1 return(plantacion) # usa matriz densidad de 1 y 0 para facilitar # el cálculo del literal c def analizarDensidad(plantacion, limite): tamano = np.shape(plantacion) n = tamano[0] m = tamano[1] densidad = np.zeros(shape=(n,m),dtype=int) resultado = [] i = 0 while not(i>=n): fila = [] j = 0 while not(j>=m): if (plantacion[i,j]>=limite): densidad[i,j]=1 fila.append('ALTO') else: fila.append('Bajo') j = j + 1 resultado.append(fila) i = i + 1 return(densidad) def reporteCrecimento(plantacion,densidad): tamano = np.shape(plantacion) n = tamano[0] m = tamano[1] casillas = n*m sumaALTO = 0 sumaBAJO = 0 i = 0 while not(i>=n): j = 0 while not(j>=m): valor = plantacion[i,j] if (densidad[i,j]==1): sumaALTO = sumaALTO + valor else: sumaBAJO = sumaBAJO + valor j = j + 1 i = i + 1 prmALTO = sumaALTO/(np.sum(densidad)) prmBAJO = sumaBAJO/(n*m-np.sum(densidad)) promedio = [prmALTO,prmBAJO] return(promedio)
crear un archivo de funciones para importar si las funciones se crean en otro archivo.
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL import dronescultivos as dron # PROGRAMA # INGRESO , usa datos aleatorios como prueba dimension = (3,4) plantacion = dron.generarplantacion(dimension) #PROCEDIMIENTO limite = 4 densidad = dron.analizarDensidad(plantacion, limite) reporte = dron.reporteCrecimento(plantacion,densidad) #SALIDA print(plantacion) print(densidad) print(reporte)
Ejercicio: 2Eva_IIT2016_T1 Multas de Transito por sector
Propuesta de solución en Python:
# CCPG1001-Fundamentos de programación # 2Eva_IIT2016_T1 Multas de Transito por sector import numpy as np def generaMatriz(listamultas,sectores): n = len(sectores) unafila = sectores[0] m = len(unafila) matriz = np.zeros(shape=(n,m),dtype=float) k = len(listamultas) i = 0 while not(i>=k): f = listamultas[i][0] c = listamultas[i][1] valor = listamultas[i][2] matriz[f,c] = matriz[f,c] + valor i = i+1 return(matriz) def sectorTop(matriz): # TAREA: Realizar para este y oeste tamano = np.shape(matriz) n = tamano[0] m = tamano[1] norte = matriz[0,:] sur = matriz[n-1,:] centro = matriz[1:3,2] rnorte = np.sum(norte) rsur = np.sum(sur) rcentro = np.sum(centro) suma = [rnorte,rsur,rcentro] referencia = ['norte','sur','centro'] cual = np.argmax(suma) nombre = referencia[cual] valor = suma[cual] respuesta = [nombre,valor] return(respuesta) # PROGRAMA # INGRESO sectores = [ ['Norte','Norte','Norte','Norte','Norte'], ['Oeste','Oeste','Centro','Este','Este'], ['Oeste','Oeste','Centro','Este','Este'], ['Oeste','Oeste','Centro','Este','Este'], ['Sur','Sur','Sur','Sur','Sur']] listamultas = [(0, 0, 120), (1, 2, 330), (3, 4, 123), (4, 2, 62), (0, 0, 50), (4, 4, 89), (0, 3, 25), (2, 0, 43), (3, 2, 21), (0, 0, 120)] # PROCEDIMIENTO recaudar = generaMatriz(listamultas,sectores) # SALIDA print(sectores) print(listamultas) print('Hay que recaudar:') print(recaudar)
Resultado del algoritmo
[['Norte', 'Norte', 'Norte', 'Norte', 'Norte'], ['Oeste', 'Oeste', 'Centro', 'Este', 'Este'], ['Oeste', 'Oeste', 'Centro', 'Este', 'Este'], ['Oeste', 'Oeste', 'Centro', 'Este', 'Este'], ['Sur', 'Sur', 'Sur', 'Sur', 'Sur']] [(0, 0, 120), (1, 2, 330), (3, 4, 123), (4, 2, 62), (0, 0, 50), (4, 4, 89), (0, 3, 25), (2, 0, 43), (3, 2, 21), (0, 0, 120)] Hay que recaudar: [[290. 0. 0. 25. 0.] [ 0. 0. 330. 0. 0.] [ 43. 0. 0. 0. 0.] [ 0. 0. 21. 0. 123.] [ 0. 0. 62. 0. 89.]] >>>