Ejercicio: 3Eva2016TII_T2 Juntas receptoras de voto
Archivos para prueba:
JRV_Harchivo.txt
JRV_Marchivo.txt
JRV_Candidatosarchivo.txt
Propuesta de solución en Python:
Algoritmo 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)