s2Eva_IIT2015_T3 Playaton limpieza de playas

Ejercicio: 2Eva_IIT2015_T3 Playaton limpieza de playas

Continuación del tema 2. Propuesta de solución en Python: pyT2_pdf, pyT3_pdf

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IIT2015_T2 funcion totalportipo(tabla)
# propuesta de repaso: edelros@espol.edu.ec

import numpy as np

def totalportipo(tabla):
    # Tamaño de tabla con codigoplaya,recolectado
    n,k = tabla.shape  
    
    # verifica banderas repetido cambiando a 1
    repetidos = np.zeros(n,dtype=int)
    i = 0
    while not(i>=(n-1)):
        j = i + 1
        while not(j>=n):
            if (tabla[i,0]==tabla[j,0]):
                repetidos[j] = 1
            j = j+1
        i = i + 1
    
    # cuenta los que se eliminan
    # para ver los m que son únicos
    eliminar = 0
    fila = 0
    while not(fila>=n):
        eliminar = eliminar + repetidos[fila]
        fila = fila + 1
    m = n-eliminar

    # copiar codigos unicos en tabulado columna 0
    tabulado = np.zeros(shape=(m,3), dtype=float)
    fila = 0
    j = 0
    while not(fila>=n):
        if (repetidos[fila]==0):
            tabulado[j,0] = tabla[fila,0]
            j = j + 1
        fila = fila + 1

    # Cuenta voluntarios por playa en tabulado columna 1
    # Acumula recolectado por playa en tabulado columna 2
    fila = 0
    while not(fila>=n):
        cual = tabla[fila,0]
        # encuentra el índice en donde
        donde = np.where(tabulado[:,0]==cual) 
        tabulado[donde,1] = tabulado[donde,1] + 1
        tabulado[donde,2] = tabulado[donde,2] + tabla[fila,1]
        fila = fila + 1

    # acumula lo recolectado por playa
    return(tabulado)


# 2Eva_IIT2015_T3 Playaton limpieza de playas
voluntarios = []
opcion = 0
while not(opcion==7):
    print('1. registrar voluntario')
    print('2. registrar Kg recolectada/voluntario')
    print('3. conteo de voluntarios')
    print('4. tabular recolectado')
    print('5. Guardar archivo')
    print('6. Abrir archivo')
    print('7. Salir')
    
    opcion = int(input(' opcion:'))
    
    if (opcion==1):
        print('-- registrar voluntario --')
        ced = int(input('cédula: '))
        nom = input('nombre: ')
        pla = int(input('codigo playa: '))
        rec = 0
        registro = {'cedula':ced,
                    'nombre': nom,
                    'playa':pla,
                    'recolectado':rec}
        voluntarios.append(registro)
        print('gracias por participar')

    if (opcion==2):
        print('-- registrar Kg recolectado/voluntario --')
        ced = int(input('cédula: '))
        rec = float(input('recolectado: '))
        
        # buscar voluntario,
        # Podría buscar con index en la lista
        encontre = -1
        n = len(voluntarios)
        fila = 0
        while not(encontre>=0 or fila>=n):
            if (voluntarios[fila]['cedula']==ced):
                encontre = fila
            fila = fila + 1
        
        if (encontre>=0):
            voluntarios[encontre]['recolectado'] = rec
            print('recolectado:',rec)
        else:
            print('no esta registrado este voluntario')

    if (opcion==3):
        print('--- cuenta voluntarios ---')
        n = len(voluntarios)
        # extraer columnas codigoplaya y recoletado
        tabla = np.zeros(shape=(n,2),dtype=float)
        fila = 0
        while not(fila>=n):
          tabla[fila][0] = voluntarios[fila]['playa']
          tabla[fila][1] = voluntarios[fila]['recolectado']
          fila = fila + 1
        resultado = totalportipo(tabla)

        print('los voluntarios presentados son:',n)
        print(resultado)

    if (opcion==4):
        print('-- tabular recolectado --')
        n = len(voluntarios)
        # extraer vector codigos playas
        tabla = np.zeros(shape=(n,2),dtype=float)
        fila = 0
        while not(fila>=n):
          tabla[fila][0] = voluntarios[fila]['playa']
          tabla[fila][1] = voluntarios[fila]['recolectado']
          fila = fila + 1
        resultado = totalportipo(tabla)

        #total recolectado
        m,k = resultado.shape
        total = 0
        i = 0
        while not(i>=m):
            total = total + resultado[i,2]
            i = i + 1
        print('El total recolectado es:',total)
        print('El total por playa es: ')
        print(resultado)

    if (opcion==5):
        print('---- guardar el archivo de voluntarios ---')
        
        # prepara el modo escritura 'w' de archivo
        archivo = open('voluntarios.txt','w')
        
        n = len(voluntarios)
        fila = 0
        while not(fila>=n):

            # Crea la linea de texto de los datos
            # para un registro, separada por comas
            registro = str(voluntarios[fila]['cedula'])
            registro = registro + ',' + voluntarios[fila]['nombre']
            registro = registro + ',' +str(voluntarios[fila]['playa'])
            registro = registro + ',' +str(voluntarios[fila]['recolectado']) +'\n'

            # Escribe en el archivo
            archivo.write(registro)
            fila = fila + 1

        archivo.close()     # Cierra el archivo    
        print('archivo guardado...')

    if (opcion==6):
        print(' --- Abrir archivo de voluntarios---')
        voluntarios = []
        
        # prepara el modo lectura(read 'r') de archivo
        archivo = open('voluntarios.txt','r')
        linea = archivo.readline()

        #Hasta encontrar el final del archivo
        while (linea!=''):
            # Divide los datos por comas
            datos = linea.split(',')  
            ced = int(datos[0])
            nom = datos[1]
            pla = int(datos[2])
            rec = float(datos[3])
            
            # crea el registro 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 de voluntarios')
        
    if (opcion==7):
        print(' gracias por usar el software, @copyritghs')

ejercicios resueltos Python 2eva_iit2015_t3 pdf