🎨
Informática para ingeniería 2023-2024
  • Informática para ingeniería
  • Básico python
  • Estructuras de control
    • while
    • for
    • try...except
    • If, else, elif, while, for
    • Ejemplo. Ciclos anidados. Tablas de multiplicar
    • Método abreviado
    • ¿Qué hace zip() ?
  • Secuencias
  • Comparativas: Cadena, lista, tupla y conjunto
    • Ejemplos listas y funciones: Control de temperatura
    • Verificación del NIF
    • Ejemplo listas: control de temperaturas
  • Secuencias: Matriz
    • Definición: Matriz
    • Localizar valores únicos en una matriz
    • Ejemplo matrices: Suma y Multiplicación
    • verificar si una matriz es cuadrada
  • Funciones
    • Definición: funciones
    • Ejemplo de funciones
  • Módulos
    • Módulo. Definición
    • Ejemplos de Módulos: math y random
  • Método abreviado de comprensión de listas...
    • Comprensión de listas
  • Funciones- Matriz-Ejemplos
    • Ejemplo, cálculo de Nómina mensual
    • Ejemplo, cálculo de Nómina mensual (desde el programa principal)
    • Menú, matriz y funciones
    • Localizar valores únicos en una matriz. Usar Funciones
    • Ejemplo funciones, matriz, archivos: Recuento de votos
    • Matrices 2ª Prueba Evaluación Continua. Curso 2018-2019 Parcial. Prof MRD
    • Prueba Evaluación Continua. Curso 2018-2019. Examen 1. Prof. MRD
    • Gestión de una matriz de números enteros
  • Ejecutable
    • Crear un programa ejecutable
  • Archivo (ficheros)
    • Definición: archivos (ficheros)
  • Ejemplos de Matriz y archivos (ficheros)
    • ¿Cómo se multiplican dos matrices?
    • Crear una matriz a partir de un archivo
    • Pedir datos, guardarlos en una matriz y en un archivo
    • Cálcular la media de unos datos almacenados en un archivo
    • Leer archivo, modificar datos y guardarlos
  • Interfaz Gráfica
    • Definición: Interfaz Gráfica de Usuario (IGU)
      • Label
      • Button
      • Radiobutton y Checkbutton
      • LabelFrame
      • Listbox
      • Entry
      • Características comunes de Label, Entry, button, radiobutton checkbutton
      • ttk.Combobox
      • Tamaño de una ventana
    • Ejemplo de Entorno gráfico: RadioButton
    • Visualizar la especialidad y nombre de un alumno
    • Visualizar los datos introducidos
    • Sumar 10 a un número introducido
    • Cálculo del área de un triángulo
    • Cálculo del área de un Círculo. Y dibujo de un círculo
    • ¿Dos números son divisibles?
    • Introducir valores y graficar
    • Ejemplo de botón, lista
  • Ejemplos de interfaz gráfica y archivos
  • Entorno gráficos y archivos
    • Almacenar los datos de un alumno
Con tecnología de GitBook
En esta página
  • Enunciado
  • Análisis:
  • Diagrama
  • Código función validar datos
  • Código para crear el menú
  • Código opción 1. Sin archivo
  • Código Opción 2
  • La función partido_ganador
  • Código de la opción 3
  • Código Opción 4
  • Verificar que hay introducido datos
  • Código completo
  • Código opción 1. Almacenar archivo
  • Código Completo pidiendo datos al usuario y almacenarlo en el archivo
  • Código opción 1, es obtenido un archivo
  1. Funciones- Matriz-Ejemplos

Ejemplo funciones, matriz, archivos: Recuento de votos

AnteriorLocalizar valores únicos en una matriz. Usar FuncionesSiguienteMatrices 2ª Prueba Evaluación Continua. Curso 2018-2019 Parcial. Prof MRD

Última actualización hace 1 año

Enunciado

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.

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])

La función partido_ganador

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)
    
    return posicion

Código de la opción 3

Llamada desde el programa principal

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")

Google Colaboratory
Logo
68B
datos_provincias_gallegas.txt