Autor: Edison Del Rosario

  • 8.1 Menú en Python - Condicionales "elif" semejante a "case"

    ¿Cómo hacer un menú en Python? como una estructura simplificada y semejante a un menú de un restaurante donde cada opción puede pedirse una o varias veces. Cada opción se identifica y selecciona usando un caracter de un número entero, luego se revisa entre cada opción disponible mediante bucle while, para continuar recibiendo peticiones de opción.

    Para crear un menú en Python, los pasos a seguir se describen como:como hacer un menu en python

    • Iniciar la opción seleccionada en "0" o un valor diferente a la opción de "salida" del lazo/bucle.
    • repetir el bloque menú en un lazo/bucle mientras la opción seleccionada no sea la opción de "salida" del menú,
    • Mostrar en pantalla las opciónes del menú, y los valores que las seleccionan.
    • Preguntar o pedir una opción, entre las mostradas en pantalla.
    • Revisar la opción seleccionada entre las opciónes disponibles. Use un condicional por cada opción disponible (caso) y se realice los pasos que se requieran. En este caso también se puede llamar a una función o un procedimiento.
    • Para la opción de salida, se puede añadir un condicional y se muestran los mensajes de cierre de programa.

    Instrucción "elif" semejante a la instrucción "case"

    Para cada caso luego del primer condicional se usa "elif", que es la simplificación de condicionales anidados, es decir lo que sigue después del primer condicional es "else" y luego "if", al simplificar es "elif".

    if (opcion=='1'):
        print(' **** menu opcion 01 ****')    
    else:
        if (opcion=='2'):
            print(' **** menu opcion 02 ****')
        else:
            print('No existe la opcion')
    

    Se adjunta un video tutorial con un ejemplo para administrar el alquiler de un bloque de casilleros de 6 filas y 10 columnas.

    Ejercicio: 3Eva_IIT2009_T2 Registrar alquiler de casilleros

    Solución Propuesta: s3Eva_IIT2009_T2 Registrar alquiler de casilleros

    Estructura básica de instrucciones en Python

    Note que los valores de opción de selección son tipo caracteres, por lo que también se puede usar letras para cada caso.

    # Ejemplo de un menu
    # las opciones se proponen por caracteres
    # propuesta: edelros@espol.edu.ec
    
    # menu
    opcion = '0'
    while not(opcion=='9'):
        print(' 1. menu opcion 01')
        print(' 2. menu opcion 02')
        print(' 3. menu opcion 03')
        print(' 4. menu opcion 04')
        print(' 5. menu opcion 05')
        print(' 9. Salir')
    
        opcion=input('  --- ¿Cuál opcion?: ')
        
        if (opcion=='1'):
            print(' **** menu opcion 01 ****')
            
        elif (opcion=='2'):
            print(' **** menu opcion 02 ****')
            
        elif (opcion=='3'):
            print(' **** menu opcion 03 ****')
            
        elif (opcion=='4'):
            print(' **** menu opcion 04 ****')
            
        elif (opcion=='5'):
            print(' **** menu opcion 05 ****')
                    
        elif (opcion=='9'):
            print(' **** Saliendo del menu  ****')
            print(' **** Ejemplo de un menu ****')
        else:
            print('No existe la opcion en el menu')
    

    Al final, se añade un "else", en el que se añaden instrucciones para el caso que ninguno de los casos anteriores se cumplió. Se muestra un mensaje como 'No existe la opción en el menú' y el lazo vuelve a iniciar.

    Ejemplos de ejercicios desarrollados y otros ejercicios se presentan en la siguiente sección.

  • 7.7 Archivos texto – Actividad integradora

    El Instituto Nacional de Evaluación Educativa publica en su página web los informes y datos de las evaluaciones del programa "ser Bachiller realizadas en el país durante el año 2016.

    ArchivoINEVAL2016_01

    Los datos "Meso" (intermedios), se encuentran disponibles en un "archivo.txt"(enlace) cuyo formato se adjunta al final de la página.

    ArchivoINEVAL2016_02

    Realice las instrucciones necesarias para abrir el archivo y cargar los datos, permitiendo encontrar las respuestas a las siguientes preguntas:

    1. Mostrar cuántas instituciones se evaluaron en cada Régimen:
      ['COSTA', 'SIERRA', 'COSTA-SIERRA']

      Para validar, muestre además el total de registros leídos y la suma de estudiantes evaluados por régimen (deberían ser iguales)

    2. La cantidad de estudiantes evaluados para Matemática por provincia:
      [[1,'AZUAY'], [2,'BOLIVAR'], [3,'CAÑAR'], [4,'CARCHI'],
       [5,'COTOPAXI'], [6,'CHIMBORAZO'], [7,'EL ORO'],
       [8,'ESMERALDAS'], [9,'GUAYAS'], [10,'IMBABURA'],
       [11,'LOJA'], [12,'LOS RIOS'], [13,'MANABI'],
       [14,'MORONA SANTIAGO'], [15,'NAPO'], [16,'PASTAZA'],
       [17,'PICHINCHA'], [18,'TUNGURAHUA'],
       [19,'ZAMORA CHINCHIPE'], [20,'GALAPAGOS'], [21,'SUCUMBIOS'],
       [22,'ORELLANA'], [23,'SANTO DOMINGO DE LOS TSACHILAS'],
       [24,'SANTA ELENA'], [90,'ZONA NO DELIMITADA']]

      La 'ZONA NO DELIMITADA' incluye aquellos territorios en frontera de provincia, ejemplo "MANGA DEL CURA" que no tenía pertenencia administrativa - política a ningún cantón o provincia.

    3. El porcentaje de estudiantes evaluados en Matemática incluidos en los niveles de 'Satisfactorio' y 'Excelente' en cada provincia. Los estudiantes evaluados en cada unidad educativa se clasificaron en: 'Insuficiente', 'Elemental', 'Satisfactorio', 'Excelente'.
      Nota: Use la cantidad de estudiantes y el porcentaje de cada
       nivel (satisfactorio y excelente) para obtener la cantidad
       de estudiantes buscada y así obtener el porcentaje
    4. Con los resultados del ejercicio anterior, obtenga las cinco provincias con los mejores resultados a nivel nacional.

    Formato del archivo

    • Los datos de cada registro se encuentran delimitados por punto y coma ";" (42 columnas)
    • Las tres primeras líneas describen el encabezado, como se muestra en la tabla siguiente.
    • Los registros para cada unidad educativa evaluada se encuentran luego de la tercera línea, con mas de 3100 registros.
    Columna línea=0 línea=1 línea=2
    0 zxx Código de institución
    1 Institución
    2 Régimen
    3 Zona de planificación
    4 Distrito
    5 Circuito
    6 Código de provincia
    7 Provincia
    8 Código de cantón
    9 Cantón
    10 Código de parroquia
    11 Parroquia
    12 Área
    13 Tipo de financiamiento
    14 Resultados generales Cantidad de estudiantes evaluados
    15 Índice socioeconómico
    16 Promedio global
    17 Promedio global ajustado
    18 Matemática
    19 Lengua y Literatura
    20 Ciencias Naturales
    21 Estudios Sociales
    22 Matemática Cantidad de estudiantes evaluados
    23 Estudiantes por nivel de logro Insuficiente
    24 Elemental
    25 Satisfactorio
    26 Excelente
    27 Lengua y Literatura Cantidad de estudiantes evaluados
    28 Estudiantes por nivel de logro Insuficiente
    29 Elemental
    30 Satisfactorio
    31 Excelente
    32 Ciencias Naturales Cantidad de estudiantes evaluados
    33 Estudiantes por nivel de logro Insuficiente
    34 Elemental
    35 Satisfactorio
    36 Excelente
    37 Estudios Sociales Cantidad de estudiantes evaluados
    38 Estudiantes por nivel de logro Insuficiente
    39 Elemental
    40 Satisfactorio
    41 Excelente
    Ejemplo del Archivo:
    
    zxx;;;;;;;;;;;;;;;;;;;;;;Matemática;;;;;Lengua y Literatura;;;;;Ciencias Naturales;;;;;Estudios Sociales;;;;
    ;;;;;;;;;;;;;;Resultados generales;;;;;;;;;Estudiantes por nivel de logro;;;;;Estudiantes por nivel de logro;;;;;Estudiantes por nivel de logro;;;;;Estudiantes por nivel de logro;;;
    Código de institución;Institución;Régimen;Zona de planificación;Distrito;Circuito;Código de provincia;Provincia;Código de cantón;Cantón;Código de parroquia;Parroquia;Área;Tipo de financiamiento;Cantidad de estudiantes evaluados;Índice socioeconómico;Promedio global;Promedio global ajustado;Matemática;Lengua y Literatura;Ciencias Naturales;Estudios Sociales;Cantidad de estudiantes evaluados;Insuficiente;Elemental;Satisfactorio;Excelente;Cantidad de estudiantes evaluados;Insuficiente;Elemental;Satisfactorio;Excelente;Cantidad de estudiantes evaluados;Insuficiente;Elemental;Satisfactorio;Excelente;Cantidad de estudiantes evaluados;Insuficiente;Elemental;Satisfactorio;Excelente
    01B00020;COLEGIO INTERCULTURAL BILINGUE DE NARANCAY;SIERRA;ZONA 6;01D02;01D02C12;1;AZUAY;101;CUENCA;10151;BAÑOS;RURAL;PUBLICO;20;-0,603;636;684;605;663;566;709;20;75,00%;25,00%;0,00%;0,00%;20;65,00%;25,00%;10,00%;0,00%;20;90,00%;5,00%;5,00%;0,00%;20;40,00%;30,00%;30,00%;0,00%
    01B00051;SAN JOSE;SIERRA;ZONA 6;01D05;01D05C01;1;AZUAY;104;NABON;10450;NABON;URBANA;PUBLICO;20;-0,69;706;761;653;687;652;831;20;55,00%;45,00%;0,00%;0,00%;20;50,00%;40,00%;10,00%;0,00%;20;60,00%;35,00%;5,00%;0,00%;20;15,00%;20,00%;45,00%;20,00%
    01B00054;UNIDAD EDUCATIVA COMUNITARIO INTERCULTURAL BILINGUE SHIÑA;SIERRA;ZONA 6;01D05;01D05C01;1;AZUAY;104;NABON;10450;NABON;URBANA;PUBLICO;24;-0,955;645;721;550;699;613;718;24;91,70%;4,20%;4,20%;0,00%;24;33,30%;58,30%;8,30%;0,00%;24;79,20%;12,50%;4,20%;4,20%;24;37,50%;37,50%;16,70%;8,30%
    ...
  • 7.5 Archivos texto y diccionarios en Python

    Para abrir y guardar un archivo se dispone de un ejemplo de una tabla de voluntarios.txt. La actividad es continuación del ejercicio "Playatón, limpieza de Playas".

    Abrir un archivo

    Para el manejo de un archivo es necesario 'abrir' el proceso con la instrucción open() que requiere un nombre de archivo y el parámetro de lectura 'r' (read).

    El archivo de ejemplo voluntarios.txt para la lectura se debe encontrar en el mismo directorio del script de Python. Si se ubica el archivo en otro directorio se añade la ruta al nombre del archivo.

    1234,Juan,921,5.4
    9874,Ana,138,6.2
    2345,Pedro,432,6.2
    

    La lectura de datos para la lista de ejemplo es línea por línea hasta encontrar una línea vacía ('') al final del archivo.

    En el ejemplo, se separan los datos con la instrucción split(), se los ingresa en un registro para un diccionario que se adjunta la lista de voluntarios.

    Al final es necesario cerrar el archivo mediante archivo.close()

    print(' --- Abrir archivo de voluntarios---')
    voluntarios=[]   # lista para datos
    
    # prepara el modo lectura(read 'r') de archivo
    archivo=open('voluntarios.txt','r')
    linea=archivo.readline() #lee primera linea del archivo
    
    while (linea!=''):  #Hasta encontrar final de archivo
        datos=linea.split(',')  # datos separados por comas
        ced=int(datos[0])
        nom=datos[1]
        pla=int(datos[2])
        rec=float(datos[3])
    
        # crea el registro como diccionario para la lista
        registro={'cedula':ced,
              'nombre': nom,
              'playa':pla,
              'recolectado':rec}
        voluntarios.append(registro)
    
        # Lee la siguiente linea
        linea=archivo.readline()
    
    archivo.close()         # Cierra el archivo    
    n=len(voluntarios)
    print(' Se recuperaron '+ str(n) + ' registros')
    

    Guardar un archivo

    para almacenar un archivo es necesario 'abrir' el proceso con la instrucción open() que requiere un nombre de archivo y el parámetro de lectura 'w' de "write".

    Se escriben los datos en una línea de texto. Al usar los registros de una lista, se los concatena separador por comas ',' antes de escribir la línea en el archivo.

    Al final es necesario cerrar el archivo mediante archivo.close()

    print('---- guardar el archivo de voluntarios ---')
    
    # prepara el modo escritura(write 'w') de archivo
    archivo=open('voluntarios.txt','w')
    
    n=len(voluntarios)
    fila=0
    while not(fila>=n):
    
        # Crea linea de texto con datos para un registro, 
        # separada por comas
        cadena = voluntarios[fila]['cedula'])+','
        cadena = cadena + voluntarios[fila]['nombre'] +','
        cadena = cadena + str(voluntarios[fila]['playa']) +','
        cadena = cadena +str(voluntarios[fila]['recolectado']
        registro= str(cadena) +'\n'
    
        # Escribe en el archivo
        archivo.write(registro)
        fila = fila + 1
    
    archivo.close()     # Cierra el archivo    
    print('archivo guardado...')
    

    Ejercicio 05

    A partir del archivo adjunto: 'voluntarios2.txt' , realizar cada ítem sin cargar todos los registros en memoria, procesar registro por registro.

    1. Calcule cuántos voluntarios se registraron en cada playa
    2. Determine el total de residuos recolectados en cada playa
    3. Muestre el total de playas atendidas y el total recolectado en el evento.
    1234,Juan,921,5.4
    9874,Ana,138,6.2
    2345,Pedro,432,6.2
    4464,Carmen,921,7.746045618
    1654,Rosa,138,8.801108179
    5892,Carlos,432,11.63081858
    746,Juan,921,9.026632449
    1630,Roberto,138,6.330733618
    5374,Barbara,432,8.973105901
    7045,Delia,921,2.691247379
    4896,Elena,138,5.753989473
    2276,karen,432,3.541916166
    3862,Byron,921,9.215178996
    1228,Daniel,138,11.10185605
    5776,Fernando,432,3.743467333
    6859,Gerardo,921,11.32735615
    4048,Luis,138,8.775777268
    7329,Mario,432,3.663067739
    6513,Mercedes,921,7.189236877
    3574,Patricio,138,8.390980584
    9346,Paola,432,7.640959705
    9180,Sara,921,9.341800838
    5923,Tania,138,10.24375357
    1254,Valeria,432,8.184033273
    181,Washington,921,11.54233745
    9558,Xavier,138,8.369232005
    5019,Zoila,432,10.74144661
    5036,Carlos,921,7.511491918
    385,Juan,138,8.065057021
    1256,Roberto,432,4.228084882
    245,Barbara,138,5.102971916
    234,Delia,432,3.830932219
    6564,Elena,921,9.838714135
    8767,karen,138,6.038399291
    435,Byron,432,2.365789617
    
  • 7.4 Archivos texto - con números

    Los archivos tipo texto guardan los datos como cadenas de caracteres, por lo que en el caso de tener datos que sean de tipo entero o real, es necesario convertirlos a cadenas str() antes de concatenarlos a otros datos de un mismo registro en una línea.

    En el caso de leer los datos desde un archivo tipo texto, será necesario la conversión al tipo de dato que se quiera usar, sea entero int() o real float().

    Ejemplo: calificaciones de lecciones y promedio

    El registro de calificaciones de un estudiante se guarda en un archivo tipo texto. Observe las conversiones a cadenas str() que se realizan para almacenar los datos antes de guardarlos en el archivo.

    nombrearchivo = "calificaleccion.txt"
    estudiante = 'Juan Pueblo'
    leccion1 = 6
    leccion2 = 9
    promedio = (leccion1 + leccion2)/2
    
    # Archivo en modo escritura 'write'
    archivo = open(nombrearchivo,'w')
    unregistro = estudiante + ',' + str(leccion1) +','+ str(leccion2)+','+ str(promedio) +'\n'
    archivo.write(unregistro)
    # Cierra el archivo
    archivo.close()  
    

    tutortexto03.png

    La lectura de datos requiere una operación semejante a la usada para crear el archivo

    nombrearchivo = "calificaleccion.txt"
    
    # Archivo en modo escritura 'read'
    archivo = open(nombrearchivo,'r')
    
    unregistro = archivo.readline()
    unregistro = unregistro.strip('\n')
    datos = unregistro.split(',')
    
    estudiante = datos[0]
    leccion1   = int(datos[1])
    leccion2   = int(datos[2])
    promedio   = float(datos[3])
    
    archivo.close()  # Cierra el archivo
    
    # SALIDA
    print('cadena: ', unregistro)
    print('Datos en forma original: ')
    print(estudiante)
    print(leccion1)
    print(leccion2)
    print(promedio)
    
    cadena:  Juan Pueblo,6,9,7.5
    Datos en forma original: 
    Juan Pueblo
    6
    9
    7.5
    

    Ejercicios

    Realice las instrucciones necesarias para guardar en el archivo al menos tres registros de calificaciones.


    Conceptos previos requeridos:

    • cadenas de caracteres
    • salto de línea '\n'
    • listas
    • número a caracter, caracteres a número
  • 7.3 Archivos texto - Abrir y añadir registro

    Ejemplo 3: Abrir archivo y añadir un contacto

    Si el archivo está creado y solo es necesario añadir un contacto, es decir un registro, se utiliza la instrucción abrir usando el modo añadir o 'a' (append).

    Por ejemplo, para añadir un contacto al archivo 'miscontactos.txt' creado en el Ejemplo 1, las instrucciones son:

    nombre = 'Jefferson'
    apellido = 'Perez'
    telefono = '0987654345'
    nombrearchivo = 'miscontactos.txt'
    
    # Archivo en modo escritura 'append'
    archivo = open(nombrearchivo,'a')
    unregistro = nombre + ',' + apellido +','+telefono +'\n'
    archivo.write(unregistro)
    archivo.close()  # Cierra el archivo
    

    El resultado se podrá observar abriendo el archivo:


    Ejercicio 3

    Al archivo 'miscontactos.txt' añada dos registros y muestre su resultado.

     

  • 7.2 Archivos texto - Abrir. Ejemplo

    Ejemplo 2: Abrir archivo, Agenda telefónica

    Para recuperar desde un archivo los datos de los contactos, se procede de forma inversa a la escritura del archivo, recuperando un registro, quitando el salto de línea '\n' y separando los datos por ','

    Ejecute las siguientes instrucciones usando el archivo 'miscontactos3.txt' del ejercicio anterior y almacenado en el directorio de trabajo, observe los resultados.

    nombrearchivo = 'miscontactos.txt'
    
    # Archivo en modo lectura 'read'
    archivo = open(nombrearchivo,'r')
    
    unregistro = archivo.readline()
    unregistro = unregistro.strip('\n')
    datos = unregistro.split(',')
    
    # Cierra el archivo
    archivo.close()
    
    print('unregistro: ', unregistro)
    print(datos[0])
    print(datos[1])
    print(datos[2])
    
    unregistro:  Juan,Leon,0987654321
    Juan
    Leon
    0987654321
    

    Para recuperar varios registros de contactos, es necesario realizar la lectura de varias líneas, registro a registro, hasta llegar al último y encontrar una línea vacío ''.

    Observe que para éste ejemplo el archivo de prueba es 'miscontactos3.txt', descargue el archivo en el caso que exista un error al desarrollar el ejercicio anterior.

    datos=[]
    nombrearchivo = 'miscontactos3.txt'
    
    # Archivo en modo lectura 'read'
    archivo=open(nombrearchivo,'r')
    unregistro = archivo.readline()
    while not(unregistro==''):
        unregistro = unregistro.strip('\n')
        datos.append(unregistro.split(','))
        unregistro = archivo.readline()
    # Cierra el archivo
    archivo.close()
    
    print('datos: ')
    print(datos)
    
    datos:  
    [['Juan', 'Montalvo', '0987654321'], ['Manuela', 'Saenz', '0987654322'], ['Julio', 'Jaramillo', '0987654323']]
    

    Ejercicio 2

    Al archivo de contactos añada un correo electrónico para cada contacto y guarde el resultado en el archivo: 'miscontactos4.txt'

     

  • 7.1 Archivos texto - Guardar. Ejemplo

    "Archivos de texto" es una forma básica de almacenar información, permite transferir o compartir los datos de una forma estándar para ser usada (importada) por una gran cantidad de programas editores de texto, hojas electrónicas, procesamiento de datos, etc.

    Se presentan ejemplos, ejercicios y resumen en cada sección procesar datos desde o hacia un archivo de texto.

    Agenda de contactos telefónicos

    Para disponer de una agenda de contactos telefónicos y no perder los datos cuando se cierra Python o se apaga el computador, se almacena los datos en un archivo.

    Ejemplo 1: Guardar archivo

    Los datos básicos de un contacto telefónico se describen como un registro.

    registro: un nombre, un apellido y un número telefónico.

    Ejecuta las siguientes instrucciones y observa el resultado en el archivo con nombre 'miscontactos.txt' en el directorio de trabajo

    nombre = 'Juan'
    apellido = 'Leon'
    telefono = '0987654321'
    nombrearchivo = 'miscontactos.txt'
    
    # Archivo en modo escritura 'write'
    archivo = open(nombrearchivo,'w')
    unregistro = nombre + ',' + apellido +','+telefono +'\n'
    archivo.write(unregistro)
    archivo.close()  # Cierra el archivo
    
    print('se ha guardado:',nombrearchivo)
    

    archivo guardar ejemplo 01

    Para usar un archivo, se "abre" usando la instrucción open() , luego de escribir los datos se debe "cerrar" close() y no se realizan mas instrucciones sobre el archivo. El tipo de uso del archivo se indica mediante una letra 'w' (inicial de write) para escritura.

    Los datos de un contacto se escriben separados por ',' en una sola línea, para ésto se crea la cadena "unregistro" y se la envía al archivo mediante la instrucción archivo.write().


    Ejercicio 1

    Como una persona tiene más de un contacto telefónico, el ejercicio consiste en guardar al menos tres en el archivo "miscontactos3.txt".
    Al ejecutar las instrucciones, al final comprueba que los datos se encuentren registrados abriendo el archivo.

    Nota: Para separar cada registro por cada línea, se crea una cadena de caracteres finalizada con un salto de línea '\n'

    texto resultado