Objetivo es el recuento de votos de cada una delas las provincias de la comunidad gallega. Los partidos políticos son: X,Y, Z, y se debe contabilizar los Blanco. Para ello, creará un menú, para que el usuario decida lo que quiere realizar.
Introducir datos de cada uno de los partidos políticos para cada provincia por tecleado, y almacenar la información en un archivo. Parte 2. Los votos de cada uno de los partidos políticos serán obtenidos por un archivo.
Función que calcule el partido ganador. Se visualice en el programa principal.
Función, en la que se tecleará un partido político, y me dirá los votos en cada una de las provincias. La función debe devolver una cadena que se visualice en el programa principal.
Función que me calcule para cada provincia, la gente que no fue a votar. Debe devolver una lista.
Utilizar numpy y/o listas.
Análisis:
Validar que el usuario introduzca una opción válida del menú (dentro del rango y que no sean letras).
Validar de cada una de las opciones introduzca datos válidos:
Opción1, no puede existir más votos que habitantes.
Opción 3, no puede calcular los votos de un partido que no existe.
· No puede realizar ninguna opción sino hay datos introducidos.
Diagrama
Código función validar datos
La función def pedir_datos(mensaje, limite):`
Se va a servir para pedir la opción del menú, y validar el número de votos para cada provincia, es por eso, que se envia mensaje y límite.
def pedir_datos(mensaje, limite):
cierto=True
while cierto:
try:
numero=int(input(mensaje))
if numero >=0 and numero<=limite:
cierto=False
# print("Has introducido un número correcto")
else:
print("Haste tecleado un número fuera del límite")
except:
print("Has introducido una letra")
return numero
Código para crear el menú
Se pide la opción al usuario en def pedir_datos("Dame la opción a realizar",5). Se envía el mensaje y los valores, 5 opciones posibles del menú.
En función del valor tecleado en opción realiza un acción:
bandera=True
partido=["X", "Y","Z","BLANCO"]
provincias = [["Ourense", 1000],["A Coruña",20],["Pontevedra", 30],["Lugo",40]]
datos_votos = zeros([filas,columnas])
while bandera:
opcion=pedir_datos("dame la opción a realizar",5)
if opcion==1:
print("opcion Datos de cada uno de los partidos políticos")
elif opcion==2:
print("Partido Ganador")
elif opcion==3:
print("Número de votos en función del partido que que quiera consultar el usuairo")
elif opcion==4:
print("Personas que no fueron a votar")
elif opcion ==5:
print("fin")
else:
print("opción equivocada")
print("fin de programa")
Código opción 1. Sin archivo
La suma de todos lo votos no puede ser mayor que el número de habitantes. En este caso, se envía que el límite sería total de la población provincias[i][1].
Una vez que se hayan pedido los votos de todos los partidos, si excede al número de habitantes a votos volver a pedirlos. if numero_votos>provincias[i][1]: volver a pedir los datos.
No puede existir más votos que habitantes
print("programa principal")
bandera=True
filas = 4
columnas = 4
partido=["X", "Y","Z","BLANCO"]
provincias = [["Ourense", 1000],["A Coruña",20],["Pontevedra", 30],["Lugo",40]]
datos_votos = zeros([filas,columnas])
while bandera:
opcion=pedir_datos("dame la opción a realizar",5)
if opcion==1:
print("opcion Datos de cada uno de los partidos políticos")
for i in range(filas):
validar_habitantes=True
while validar_habitantes:
numero_votos=0
for j in range(columnas):
print(provincias[i][0], "numero",provincias[i][1])
datos_votos[i][j]=pedir_datos("De la provincia {} dame cuantos votos le corresponden del partido {} ".format(provincias[i][0],partido[j]),provincias[i][1] )
numero_votos+=datos_votos[i][j]
if numero_votos>provincias[i][1]:
print("No puede tener más votos que habitantes")
print("entre")
else:
validar_habitantes=False
print(datos_votos)
Código Opción 2
Llamada desde el programa principal
print("Partido Ganador")
partido_posicion=partido_ganador(datos_votos)
print("Ha ganado el partido", partido[partido_posicion])
opcion==3:
print("Número de votos en función del partido que que quiera consultar el usuairo")
resultado=partido_ganador_usuario(datos_votos,partido,provincias)
print(resultado)
La función que calcula en función del partido que quiere consultar el usuario
def partido_ganador_usuario(datos_votos,partido,provincias):
partido_correcto=True
while partido_correcto:
partido_consulta=input("Dame el partido a consultar").upper()
if partido_consulta in partido:
partido_correcto=False
else:
print("No tecleaste un partido real")
columna=partido.index(partido_consulta)
datos="El partido ha consultar es :"+partido_consulta + "\n"
datos_votos_2=list(datos_votos)
for i in range (datos_votos.shape[0]):
datos1=datos_votos[i][columna]
datos+="Provincia: "+ provincias[i][0]+ " "+str(datos1)+ "\n"
return datos
Código Opción 4
Llamada desde el progama principal
elif opcion==4:
print("Personas que no fueron a votar")
print(no_fueron_votar(datos_votos,provincias))
Función que calcula los que no fueron a votar
def no_fueron_votar(datos_votos,provincias):
lista_suma=calculo_personas_votar(datos_votos,1)
datos_fueron="El número de personas que no fueron a votar:"+ "\n"
for i in range (len (provincias)):
no_votar=provincias[i][1]-list(lista_suma)[i]
datos_fueron+="Provincia: "+ provincias[i][0]+ " "+str(no_votar)+" "+"\n"
print(datos_fueron)
return datos_fueron
Las opciones de la 2 a la 4 no se puede realizar sino se han introducido datos previamente
Verificar que hay introducido datos
datos_votos.all()!=0, signfica que si todos los datos (datos_votos, la matriz que lleva la información de los votos) son diferentes de cero, es decir, se han introducido datos, se puede realizar el cálculo.
if datos_votos.all()!=0:
print("Personas que no fueron a votar")
print(no_fueron_votar(datos_votos,provincias))
else:
print("Debes introducir datos primero")
Código completo
from numpy import*
def pedir_datos(mensaje, limite):
cierto=True
while cierto:
try:
numero=int(input(mensaje))
if numero >=0 and numero<=limite:
cierto=False
# print("Has introducido un número correcto")
else:
print("Haste tecleado un número fuera del límite")
except:
print("Has introducido una letra")
return numero
def introducir_datos(datos_pedir):
print("opcion Datos de cada uno de los partidos políticos")
for i in range(filas):
validar_habitantes=True
while validar_habitantes:
numero_votos=0
for j in range(columnas):
print(provincias[i][0], "numero",provincias[i][1])
datos_pedir[i,j]=pedir_datos("De la provincia {} dame cuantos votos le corresponden del partido {} ".format(provincias[i][0],partido[j]),provincias[i][1] )
numero_votos+=datos_pedir[i,j]
if numero_votos>provincias[i][1]:
print("No puede tener más votos que habitantes")
print("entre")
else:
validar_habitantes=False
print(datos_pedir)
return datos_pedir
def calculo_personas_votar(datos_pedir, valor):
lista_suma=datos_pedir.sum(axis=valor)
print(lista_suma)
return lista_suma
def partido_ganador(datos_pedir):
lista_suma=calculo_personas_votar(datos_pedir,0)
maximo=lista_suma.max(axis=0)
print(lista_suma)
posicion=list(lista_suma).index(maximo)
print(posicion)
return posicion
def partido_ganador_usuario(datos_pedir,partido,provincias):
partido_correcto=True
while partido_correcto:
partido_consulta=input("Dame el partido a consultar").upper()
if partido_consulta in partido:
partido_correcto=False
else:
print("No tecleaste un partido real")
columna=partido.index(partido_consulta)
datos="El partido ha consultar es :"+partido_consulta + "\n"
datos_pedir_2=list(datos_pedir)
for i in range (datos_pedir.shape[0]):
datos1=datos_pedir[i,columna]
datos+="Provincia: "+ provincias[i][0]+ " "+str(datos1)+ "\n"
return datos
def no_fueron_votar(datos_pedir,provincias):
lista_suma=calculo_personas_votar(datos_pedir,1)
datos_fueron="El número de personas que no fueron a votar:"+ "\n"
for i in range (len (provincias)):
no_votar=provincias[i,1]-list(lista_suma)[i]
datos_fueron+="Provincia: "+ provincias[i][0]+ " "+str(no_votar)+" "+"\n"
print(datos_fueron)
return datos_fueron
print("Programa principal")
bandera=True
partido=["X", "Y","Z","BLANCO"]
columnas=len(partido) #columnas=4
provincias = [["Ourense", 1000],["A Coruña",20],["Pontevedra", 30],["Lugo",40]]
filas=len(provincias) #Filas=4
datos_pedir = zeros([filas,columnas])
while bandera:
opcion=pedir_datos("Dame la opción a realizar",5)
if opcion==1:
datos_pedir=introducir_datos(datos_pedir)
elif opcion==2:
print("Opción Partido Ganador")
if datos_pedir.all()!=0:
partido_posicion=partido_ganador(datos_pedir)
print("Ha ganado el partido", partido[partido_posicion])
else:
print("Debes introducir datos primero")
elif opcion==3:
print("Número de votos en función del partido que que quiera consultar el usuairo")
if datos_pedir.all()!=0:
resultado=partido_ganador_usuario(datos_pedir,partido,provincias)
print(resultado)
else:
print("Debes introducir datos primero")
elif opcion==4:
if datos_pedir.all()!=0:
print("Personas que no fueron a votar")
print(no_fueron_votar(datos_pedir,provincias))
else:
print("Debes introducir datos primero")
elif opcion ==5:
print("fin")
bandera=False
else:
print("Opción equivocada")
print("Fin de programa")
Código opción 1. Almacenar archivo
La intrucción resultado=resultado[:-1]. Elimina el último ; en el primer caso y el salto de página en el segundo (\n).
def crear_archivo(datos_votos):
archivo=open("datos_provincias_gallegas.txt","w")
print(datos_votos)
for i in range(filas):
resultado=""
for j in range(columnas):
resultado+=str(datos_votos[i][j])+";"
resultado=resultado[:-1]
resultado+="\n"
archivo.write(resultado)
resultado=resultado[:-1]
archivo.close()
Código Completo pidiendo datos al usuario y almacenarlo en el archivo
from numpy import*
def pedir_datos(mensaje, limite):
cierto=True
while cierto:
try:
numero=int(input(mensaje))
if numero >=0 and numero<=limite:
cierto=False
# print("Has introducido un número correcto")
else:
print("Haste tecleado un número fuera del límite")
except:
print("Has introducido una letra")
return numero
def crear_archivo(datos_votos):
archivo=open("datos_provincias_gallegas.txt","a")
print(datos_votos)
resultado=""
for i in range(filas):
for j in range(columnas):
resultado+=str(datos_votos[i][j])+";"
resultado+="\n"
archivo.write(resultado)
archivo.close()
def calculo_personas_votar(datos_votos, valor):
lista_suma=datos_votos.sum(axis=valor)
print(lista_suma)
return lista_suma
def partido_ganador(datos_votos):
lista_suma=calculo_personas_votar(datos_votos,0)
maximo=lista_suma.max(axis=0)
print(lista_suma)
posicion=list(lista_suma).index(maximo)
print(posicion)
return posicion
def partido_ganador_usuario(datos_votos,partido,provincias):
partido_correcto=True
partido=["X", "Y","Z","BLANCO"]
while partido_correcto:
partido_consulta=input("Dame el partido a consultar").upper()
if partido_consulta in partido:
partido_correcto=False
else:
print("No tecleaste un partido real")
columna=partido.index(partido_consulta)
datos="El partido ha consultar es :"+partido_consulta + "\n"
datos_votos_2=list(datos_votos)
for i in range (datos_votos.shape[0]):
datos1=datos_votos[i][columna]
datos+="Provincia: "+ provincias[i][0]+ " "+str(datos1)+ "\n"
return datos
def no_fueron_votar(datos_votos,provincias):
lista_suma=calculo_personas_votar(datos_votos,1)
datos_fueron="El número de personas que no fueron a votar:"+ "\n"
for i in range (len (provincias)):
no_votar=provincias[i][1]-list(lista_suma)[i]
datos_fueron+="Provincia: "+ provincias[i][0]+ " "+str(no_votar)+" "+"\n"
print(datos_fueron)
return datos_fueron
print("programa principal")
bandera=True
filas = 4
columnas = 4
partido=["X", "Y","Z","BLANCO"]
provincias = [["Ourense", 1000],["A Coruña",2000],["Pontevedra", 3000],["Lugo",1000]]
datos_votos = zeros([filas,columnas])
while bandera:
opcion=pedir_datos("dame la opción a realizar",5)
if opcion==1:
print("opcion Datos de cada uno de los partidos políticos")
for i in range(filas):
validar_habitantes=True
while validar_habitantes:
numero_votos=0
for j in range(columnas):
print(provincias[i][0], "numero",provincias[i][1])
datos_votos[i][j]=pedir_datos("De la provincia {} dame cuantos votos le corresponden del partido {} ".format(provincias[i][0],partido[j]),provincias[i][1] )
numero_votos+=datos_votos[i][j]
if numero_votos>provincias[i][1]:
print("No puede tener más votos que habitantes")
print("entre")
else:
validar_habitantes=False
crear_archivo(datos_votos)
elif opcion==2:
print("Partido Ganador")
partido_posicion=partido_ganador(datos_votos)
print("Ha ganado el partido", partido[partido_posicion])
elif opcion==3:
print("Número de votos en función del partido que que quiera consultar el usuairo")
resultado=partido_ganador_usuario(datos_votos,partido,provincias)
print(resultado)
elif opcion==4:
print("Personas que no fueron a votar")
print(no_fueron_votar(datos_votos,provincias))
elif opcion ==5:
print("fin")
bandera=False
else:
print("opción equivocada")
print("fin de programa")
Código opción 1, es obtenido un archivo
def introducir_datos(datos_votos):
archivo=open("datos_provincias_gallegas.txt","r")
i=0
for lineas in archivo.readlines():
informacion=lineas.split(";")
for j in range(datos_votos.shape[0]):
datos_votos[i][j]=informacion[j]
i+=1
archivo.close()
return datos_votos
from numpy import*
def pedir_datos(mensaje, limite):
cierto=True
while cierto:
try:
numero=int(input(mensaje))
if numero >=0 and numero<=limite:
cierto=False
# print("Has introducido un número correcto")
else:
print("Haste tecleado un número fuera del límite")
except:
print("Has introducido una letra")
return numero
def calculo_personas_votar(datos_votos, valor):
lista_suma=datos_votos.sum(axis=valor)
print(lista_suma)
return lista_suma
def partido_ganador(datos_votos):
lista_suma=calculo_personas_votar(datos_votos,0)
maximo=lista_suma.max(axis=0)
print(lista_suma)
posicion=list(lista_suma).index(maximo)
print(posicion)
return posicion
def partido_ganador_usuario(datos_votos,partido,provincias):
partido_correcto=True
partido=["X", "Y","Z","BLANCO"]
while partido_correcto:
partido_consulta=input("Dame el partido a consultar").upper()
if partido_consulta in partido:
partido_correcto=False
else:
print("No tecleaste un partido real")
columna=partido.index(partido_consulta)
datos="El partido ha consultar es :"+partido_consulta + "\n"
datos_votos_2=list(datos_votos)
for i in range (datos_votos.shape[0]):
datos1=datos_votos[i][columna]
datos+="Provincia: "+ provincias[i][0]+ " "+str(datos1)+ "\n"
return datos
def introducir_datos(datos_votos):
archivo=open("datos_provincias_gallegas.txt","r")
i=0
for lineas in archivo.readlines():
informacion=lineas.split(";")
for j in range(datos_votos.shape[0]):
datos_votos[i][j]=informacion[j]
i+=1
archivo.close()
return datos_votos
def no_fueron_votar(datos_votos,provincias):
lista_suma=calculo_personas_votar(datos_votos,1)
datos_fueron="El número de personas que no fueron a votar:"+ "\n"
for i in range (len (provincias)):
no_votar=provincias[i][1]-list(lista_suma)[i]
datos_fueron+="Provincia: "+ provincias[i][0]+ " "+str(no_votar)+" "+"\n"
print(datos_fueron)
return datos_fueron
print("programa principal")
bandera=True
filas = 4
columnas = 4
partido=["X", "Y","Z","BLANCO"]
provincias = [["Ourense", 1000],["A Coruña",2000],["Pontevedra", 3000],["Lugo",1000]]
datos_votos = zeros([filas,columnas])
while bandera:
opcion=pedir_datos("dame la opción a realizar",5)
if opcion==1:
print("opcion Datos de cada uno de los partidos políticos")
datos_votos=introducir_datos(datos_votos)
print(datos_votos)
elif opcion==2:
print("Partido Ganador")
if datos_votos.all()!=0:
partido_posicion=partido_ganador(datos_votos)
print("Ha ganado el partido", partido[partido_posicion])
else:
print("Debes introducir datos primero")
elif opcion==3:
print("Número de votos en función del partido que que quiera consultar el usuairo")
if datos_votos.all()!=0:
resultado=partido_ganador_usuario(datos_votos,partido,provincias)
print(resultado)
else:
print("Debes introducir datos primero")
elif opcion==4:
if datos_votos.all()!=0:
print("Personas que no fueron a votar")
print(no_fueron_votar(datos_votos,provincias))
else:
print("Debes introducir datos primero")
elif opcion ==5:
print("fin")
bandera=False
else:
print("Opción equivocada")
print("fin de programa")