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)