s3Eva_IT2017_T2 Huracanes en Atlántico Norte
Ejercicio: 3Eva_IT2017_T2 Huracanes en Atlantico Norte
Propuesta de solución en Python:
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # 3Eva_IT2017_T2 Huracanes en Atlantico Norte # Supone que el numero de columnas de M # Es igual al numero de nombres en huracanes import numpy as np def categoriza(M): tamano = np.shape(M) n = tamano[0] m = tamano[1] categoria = np.ones(m, dtype=int) for j in range(0,m,1): vv = M[2,j] if (vv>=100 and vv=150 and vv=200 and vv250): categoria[j]=5 return(categoria) def total_marejada(M,cat): categoria = categoriza(M) tamano = np.shape(M) n = tamano[0] m = tamano[1] marejadas = np.zeros(6,dtype=float) for j in range(0,m,1): k = categoria[j] marejadas[k] = marejadas[k]+M[4,j] totaluna = marejadas[cat] return(totaluna) def indices_anio(huracanes,anio): # Supone que cantidad de huracanes # es igual a columnas de matriz cuales = huracanes.keys() indices = {} a = 0 b = -1 for cada in cuales: m = len(huracanes[cada]) a = b + 1 b = a + m-1 indices[cada] = [a,b] return(indices[anio]) def velocidad_superior(M,huracanes,anio): cual = indices_anio(huracanes,anio) desde = cual[0] hasta = cual[1] vector = M[0,desde:hasta+1] promedio = np.mean(vector) cuantos = 0 for valor in vector: if (valor>promedio): cuantos = cuantos + 1 return(cuantos) def ACE(M,huracanes,anio): cual = indices_anio(huracanes,anio) desde = cual[0] hasta = cual[1] vector = M[0,desde:hasta+1] liberada = 0 for valor in vector: liberada = liberada + valor**2 liberada = liberada*(10**(-4)) return(liberada) def lluvia(M, huracanes, nombre_huracan,anio): nombres = huracanes[anio] nombres = list(nombres) donde = nombres.index(nombre_huracan) cual = indices_anio(huracanes,anio) desde = cual[0] hasta = cual[1] cantidad = M[3,desde+donde] return(cantidad) # PROGRAMA ------------------------ import numpy as np M = np.array([[20, 30, 19, 15, 18], [89,195,120,150,240], [65,165,100,110,200], [30, 49, 35, 89, 67], [ 5, 18, 1, 2, 5]] ) # 2015:('Ana','Kate'), # No usado para el ejemplo (CONFUSO) huracanes = {2016:('Alex', 'Otto'), 2017:('Ariene', 'Harvey','Irma'), } cat = 2 anio = 2017 nombre_huracan = 'Harvey' # PROCEDIMIENTO categoria = categoriza(M) marejadas = total_marejada(M,cat) indices = indices_anio(huracanes,anio) vel_superior = velocidad_superior(M,huracanes,anio) energia = ACE(M,huracanes,anio) llovio = lluvia(M, huracanes, nombre_huracan,anio) # SALIDA print(M) print(huracanes) print('---') print('categorias: ', categoria) print('Marejadas cat['+str(cat)+']: ', marejadas) print('indices: ', indices) print('velocidad superior: ', vel_superior) print('Energia liberada: ',energia) print('lluvia en mm: ', llovio)
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)
s3Eva_IIT2016_T1 Facturar llamadas telefónicas
Ejercicio: 3Eva_IIT2016_T1 Facturar llamadas telefónicas
Propuesta de solución en Python, El ejercicio tiene tarea por completar.
Para las pruebas, requiere el archivo clientes01.csv en el mismo directorio del archivo.py
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # 3Eva_IIT2016_T1 Facturar llamadas telefónicas # se incluye la estructura de diccionarios. # Tarea: Completar facturación y estadísticas def obtenerClientes(nombreArchivo): facturar = {} archivo = open(nombreArchivo,'r') linea = archivo.readline() while not(linea==''): linea =linea.strip('\n') partes = linea.split(',') ced = partes[0] num = partes[1] sec = partes[2] parm = partes[3].split('|') nac = float(parm[0]) ext = float(parm[1]) est = partes[4] if not(ced in facturar): facturar[ced] = {num:{ 'sector': sec, 'nacional': nac, 'internac': ext, 'estado': est }} else: facturar[ced][num] = { 'sector': sec, 'nacional': nac, 'internac': ext, 'estado': est } linea = archivo.readline() archivo.close() return(facturar) def generarFactura(tabla): # Lista de clientes cedulas = tabla.keys() cedulas = list(cedulas) n = len(cedulas) # Mostrar cada cliente i = 0 while not(i>=n): # Para pantalla # print(cedulas[i]) # Cada archivo narchivo = cedulas[i] + '.txt' archivo = open(narchivo, 'w') archivo.write('Empresa Telefonica de Guayaquil \n') archivo.write('cliente: ' + cedulas[i] + '\n') archivo.write('Detalle Deuda: \n') tablanumeros = tabla[cedulas[i]] # print(tablanumeros) numeros = tablanumeros.keys() numeros = list(numeros) # print(numeros) m = len(numeros) j = 0 while not(j>=m): datos = tablanumeros[numeros[j]] nac = tablanumeros[numeros[j]]['nacional'] costonac = nac * 0.03 archivo.write(numeros[j] + ' nac: '+str(costonac)+ '\n') j = j + 1 archivo.close() i = i + 1 return() # PROGRAMA # INGRESO narchivo = 'clientes.csv' # PROCEDIMIENTO tabla = obtenerClientes(narchivo) # SALIDA generarFactura(tabla) # ------- # Usado para explicación de uso de diccionarios ### Lista de clientes ##cedulas = tabla.keys() ##cedulas = list(cedulas) ##n = len(cedulas) ## ### Salida ##print('los clientes son: ', cedulas) ##print('los datos del cliente son:') ##for i in range(0,n,1): ## print(cedulas[i]) ## numeroscedula = tabla[cedulas[i]].keys() ## print(numeroscedula)
s3Eva_IIT2016_T2 Juntas receptoras de voto
Ejercicio: 3Eva_IIT2016_T2 Juntas receptoras de voto
Archivos para prueba:
JRV_Harchivo.txt
JRV_Marchivo.txt
JRV_Candidatosarchivo.txt
Propuesta de solución en Python:
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # 3Eva_IIT2016_T2 Juntas receptoras de voto import numpy as np def contarVotos(JRV_H, JRV_M): cuenta_H = np.sum(JRV_H, axis=0) # Suma columnas tamano = np.shape(JRV_M) nvotantes = tamano[0] ncandidatos = tamano[1] cuenta_M = np.zeros(ncandidatos, dtype=int) for columna in range(0,ncandidatos,1): fila = 0 # cambiar a for while not(fila>=nvotantes): cuenta_M[columna] = cuenta_M[columna] + JRV_M[fila, columna] fila=fila+1 conteo = cuenta_H + cuenta_M conteo = tuple(conteo) return(conteo) def segundaVuelta(JRV_H, JRV_M): respuesta = 0 conteo = contarVotos(JRV_H, JRV_M) conteo = np.array(conteo) total = np.sum(conteo) primero = np.argmax(conteo) votos1 = conteo[primero] conteo[primero] = 0 segundo = np.argmax(conteo) votos2 = conteo[segundo] limite40 = 0.4*total limite10 = 0.1*total if (votos1<=limite40): diferencia = votos1-votos2 if (diferencia<=limite10): respuesta = 1 return(respuesta) def estadistica(JRV_H, JRV_M, candidatos, nombre): conteo = contarVotos(JRV_H, JRV_M) conteo = np.array(conteo) #Buscar posicion nombre del candidato donde = -1 n = len(candidatos) i = 0 while not(i>=n or donde>=0): if (nombre == candidatos[i]): donde = i i = i + 1 votos = conteo[donde] # Votos hombres y mujeres cuenta_H = np.sum(JRV_H, axis=0) votos_H = cuenta_H[donde] votos_M = votos - votos_H respuesta = [nombre, votos_H, votos_M] return(respuesta) # PROGRAMA --------------------------- # INGRESO nJRV_H = 'JRV_Harchivo.txt' nJRV_M = 'JRV_Marchivo.txt' ncandidatos = 'JRV_Candidatosarchivo.txt' # PROCEDIMIENTO # Lectura de datos desde archivos JRV_H = np.loadtxt(nJRV_H) JRV_M = np.loadtxt(nJRV_M) candidatos = [] archivo = open(ncandidatos,'r') linea = archivo.readline() linea = linea.strip('\n') while not(linea==''): candidatos.append(linea) linea = archivo.readline() linea = linea.strip('\n') archivo.close() # Conteo de votos y revisión de 2da Vuelta conteo = contarVotos(JRV_H, JRV_M) revisa2da = segundaVuelta(JRV_H, JRV_M) # Estadísticas para todos los candidatos tabla = {} k = len(candidatos) j=0 while not(j>=k): nombre = candidatos[j] revisaest = estadistica(JRV_H, JRV_M, candidatos, nombre) H = revisaest[1] M = revisaest[2] tabla[nombre] = {'conteo_H': H, 'conteo_M': M} j = j + 1 # SALIDA print('Tabla: JRV_H') print(JRV_H) print('Tabla: JRV_M') print(JRV_M) print('Lista: candidatos ') print(candidatos) print('Conteo de votos:') print(conteo) print('Hay segunda vuelta: ', revisa2da) print('Revisión estadística: ') print(tabla)
s3Eva_IIT2015_T3 funciones matrices rotar, extraer
Ejercicio: 3Eva_IIT2015_T3 funciones matrices rotar, extraer
Propuesta de solución en Python
Tarea: Integrar con tema 4
# ICM00794-Fundamentos de Computación - FCNM-ESPOL # 3Eva_IIT2015_T3 funciones matrices rotar, extraer # propuesta: edelros@espol.edu.ec # version con lazos y condicionales. # tarea: simplificar lazos con 'for' import numpy as np # Tema 3 a) def rotando(matriz,k): #cuenta rotaciones cuenta = 0 while not(cuenta>=k): n,m = matriz.shape tabla = numpy.zeros(shape=(m,n),dtype=int) # inicia rotación i = 0 while not(i>=n): j = 0 while not(j>=m): f = j c = (n-1)-i tabla[f,c] = matriz[i,j] j = j + 1 i = i + 1 matriz = np.copy(tabla) cuenta = cuenta + 1 return(matriz) # Tema 3 b) funcion para extraer una esquina # de tamaño t de una matriz # k=0 ;esquina superior izquierda # k=1 ;esquina superior derecha # k=3 ;esquina inferior izquierda # k=2 ;esquina inferior derecha def extraeresquina(matriz,k,t): n,m = matriz.shape esquina = np.zeros(shape=(t,t), dtype=int) i = 0 while not(i>=t): j = 0 while not(j>=t): if (k==0): f = i c = j if (k==1): f = i c = (m-t)+j if (k==2): f = (n-t)+i c = (m-t)+j if (k==3): f = (n-t)+i c = j esquina[i,j]=matriz[f,c] j = j+1 i = i+1 return(esquina)
s3Eva_IIT2015_T4 Orientar código QR (Quick Response Code)
Ejercicio: 3Eva_IIT2015_T4 Orientar código QR (Quick Response Code)
Propuesta de solución en Python para 3ra Eva. II Término 2015 Tema 3 y 4.
Los archivos para probar el algoritmo son:
# ICM00794-Fundamentos de Computación - FCNM-ESPOL # 3Eva_IIT2015_T3 funciones matrices rotar, extraer # propuesta: edelros@espol.edu.ec # version con lazos y condicionales. # tarea: simplificar lazos con 'for' import numpy as np # Tema 3 a) def rotando(matriz,k): #cuenta rotaciones cuenta = 0 while not(cuenta>=k): n,m = matriz.shape tabla = numpy.zeros(shape=(m,n),dtype=int) # inicia rotación i = 0 while not(i>=n): j = 0 while not(j>=m): f = j c = (n-1)-i tabla[f,c] = matriz[i,j] j = j + 1 i = i + 1 matriz = np.copy(tabla) cuenta = cuenta + 1 return(matriz) # Tema 3 b) funcion para extraer una esquina # de tamaño t de una matriz # k=0 ;esquina superior izquierda # k=1 ;esquina superior derecha # k=3 ;esquina inferior izquierda # k=2 ;esquina inferior derecha def extraeresquina(matriz,k,t): n,m = matriz.shape esquina = np.zeros(shape=(t,t), dtype=int) i = 0 while not(i>=t): j = 0 while not(j>=t): if (k==0): f = i c = j if (k==1): f = i c = (m-t)+j if (k==2): f = (n-t)+i c = (m-t)+j if (k==3): f = (n-t)+i c = j esquina[i,j]=matriz[f,c] j = j+1 i = i+1 return(esquina) # Tema 4 ------------------------------ # Programa para orientar el codigo QR # INGRESO por lectura desde un archivo codigo = np.loadtxt('codigo.txt',dtype=int) referencia = np.loadtxt('referencia.txt',dtype=int) # PROCEDIMIENTO # comparando código y esquinas de referencia # resultados por esquina t,r = referencia.shape compara = np.zeros(4, dtype=int) #compara esquinas k = 0 while not(k>=4): esquina = extraeresquina(codigo,k,t) esqgirada = rotando(referencia,k) compara[k] = np.array_equal(esquina,esqgirada) k = k + 1 # Selecciona la rotacion if (compara[0]==1 and compara[1]==1 and compara[2]==0 and compara[3]==1): orientado = rotando(codigo,0) if (compara[0]==1 and compara[1]==0 and compara[2]==1 and compara[3]==1): orientado = rotando(codigo,1) if (compara[0]==0 and compara[1]==1 and compara[2]==1 and compara[3]==1): orientado = rotando(codigo,2) if (compara[0]==1 and compara[1]==1 and compara[2]==1 and compara[3]==0): orientado = rotando(codigo,3) # SALIDA print(orientado)
s3Eva_IIT2015_T2 Gestionar mensajes con etiquetas
Ejercicio: 3Eva_IIT2015_T2 Gestionar mensajes con etiquetas
Propuesta de solución en Python 3ra Eva. II Término 2015 Tema 1 y 2
# ICM00794-Fundamentos de Computación - FCNM-ESPOL # 3Eva_IIT2015_T2 Gestionar mensajes con etiquetas # propuesta: edelros@espol.edu.ec # version con lazos y condicionales. # tarea: simplificar con 'for' import numpy as np # Tema 1. literal a) def buscaetiqueta(mensaje): n = len(mensaje) etiquetas = [] copia = 0 i = 0 while not(i>=n): #Inicia copia etiqueta if (mensaje[i]=='#'): copia = 1 encontre = '' if (copia==1): encontre = encontre + mensaje[i] if (i<(n-1)): if (mensaje[i+1]==' ' or mensaje[i+1]==','): copia = 0 etiquetas.append(encontre) if (i==(n-1)): etiquetas.append(encontre) i = i + 1 return(etiquetas) # Tema 1. literal b) def tabulando(lista): n = len(lista) # usando listas repetido = np.zeros(n,dtype=int) numrepetido = 0 # Marcando repetidos i = 0 while not(i>=(n-1)): j = i + 1 while not(j>=n): if (lista[i]==lista[j]): repetido[j]=1 numrepetido=numrepetido+1 j = j + 1 i = i + 1 #copia vector unicos, tabula usando arreglo unicos = [] i = 0 while not(i>=n): if (repetido[i]==0): unicos.append([lista[i],0]) i = i + 1 k = len(unicos) # Cuenta y Acumula i = 0 while not(i>=n): #busca posicion en unicos j = 0 while not(j>=k): if (lista[i]==unicos[j][0]): unicos[j][1] = unicos[j][1]+1 j = j + 1 i = i + 1 return(unicos) # Tema 2. Admnistra mensajes de una red social usuario = [] mensaje = [] opcion = 0 while not(opcion==4): print('1. Ingresar mensaje') print('2. Usuario frecuente') print('3. Tendencias') print('4. Salir') opcion = int(input('cual opcion: ')) if (opcion==1): print('1. Ingresar mensaje') quien = input('nombre usuario: ') dice = input('mensaje: ') usuario.append(quien) mensaje.append(dice) if (opcion==2): print('2. Usuario frecuente') quienes = tabulando(usuario) n = len(quienes) mayor = 0 k = 1 while not (k>=n): if (quienes[k][1]>quienes[mayor][1]): mayor = k k = k + 1 print('los usuarios:') print(quienes) print('el usuario mas frecuente es: ', quienes[mayor][0]) if (opcion==3): print('3. Tendencias') n = len(mensaje) todaetiqueta = [] i = 0 while not(i>=n): cuales = buscaetiqueta(mensaje[i]) m = len(cuales) if (m>0): j = 0 #añade cada etiqueta while not(j>=m): todaetiqueta.append(cuales[j]) j = j+1 i = i + 1 etiquetas = tabulando(todaetiqueta) n = len(etiquetas) mayor = 0 k = 1 while not (k>=n): if (etiquetas[k][1]>etiquetas[mayor][1]): mayor = k k = k + 1 print(etiquetas) print('La tendencia es: ',etiquetas[mayor][0]) if (opcion==4): print('Gracias por usar el software')
s3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas
Ejercicio: 3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas
Propuesta de solución en Python 3ra Eva. II Término 2015 Tema 1
Tarea: Integrar con Tema 2
# ICM00794-Fundamentos de Computación - FCNM-ESPOL # 3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas # propuesta: edelros@espol.edu.ec # version con lazos y condicionales. # tarea: simplificar con 'for' import numpy as np # Tema 1. literal a) def buscaetiqueta(mensaje): n = len(mensaje) etiquetas = [] copia = 0 i = 0 while not(i>=n): #Inicia copia etiqueta if (mensaje[i]=='#'): copia = 1 encontre = '' if (copia==1): encontre = encontre + mensaje[i] if (i<(n-1)): if (mensaje[i+1]==' ' or mensaje[i+1]==','): copia = 0 etiquetas.append(encontre) if (i==(n-1)): etiquetas.append(encontre) i = i + 1 return(etiquetas) # Tema 1. literal b) def tabulando(lista): n = len(lista) # usando listas repetido = np.zeros(n,dtype=int) numrepetido = 0 # Marcando repetidos i = 0 while not(i>=(n-1)): j = i + 1 while not(j>=n): if (lista[i]==lista[j]): repetido[j]=1 numrepetido=numrepetido+1 j = j + 1 i = i + 1 #copia vector unicos, tabula usando arreglo unicos = [] i = 0 while not(i>=n): if (repetido[i]==0): unicos.append([lista[i],0]) i = i + 1 k = len(unicos) # Cuenta y Acumula i = 0 while not(i>=n): #busca posicion en unicos j = 0 while not(j>=k): if (lista[i]==unicos[j][0]): unicos[j][1] = unicos[j][1]+1 j = j + 1 i = i + 1 return(unicos)