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)