s1Eva_IT2017_T1 Palabras puntaje
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 >>>
Algoritmo en Python
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])
s1Eva_IT2017_T2 suscriptores de youtubers
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 >>>
s1Eva_IIT2016_T1 Analiza una frase por vocales y consonantes
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.
Algoritmo en Python
# 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)
s2Eva_IIT2016_T3 Prueba de Escritorio – conjuntos, operaciones, diferencia simétrica
s2Eva_IIT2016_T2 País destino para jubilados extranjeros
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')
s1Eva_IT2016_T2 historial de visitas web
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)
Algoritmo en Python
# 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 >>>
s3Eva_IT2016_T3 Prueba de escritorio – funciones, listas, caracteres
S3Eva_IT2016_T2 sensar cultivos con dron
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)
s2Eva_IIT2016_T1 Multas de Transito por sector
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.]] >>>