Etiqueta: ejercicio programacion python

  • s3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20

    Ejercicio: 3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20

    Propuesta de solución en Python, se usa un archivo de prueba: br-ur.csv

    # CCPG1001-Fundamentos de Programación - FIEC-ESPOL
    # 3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20
    
    def actualizaDiccionario(nomArchivo,dic):
        paises  = list(dic.keys())
        archivo = open(nomArchivo,'r')
        encabezado = archivo.readline()
        linea   = archivo.readline()
        while not(linea==''):
            linea   = linea.strip('\n')
            partes  = linea.split(',')
            pais    = partes[0]
            jugador = partes[1]
            if not(pais in paises):
                dic[pais]={jugador:{'TA':int(partes[2]),
                                    'TR':int(partes[3]),
                                    'Goles':int(partes[4]),
                                    'Minutos':int(partes[5]),
                                    'KM':float(partes[6])
                                      }
                           }
            else:
                jugadores = list(dic[pais].keys())
                if not(jugador in jugadores):
                    dic[pais][jugador] = {'TA':int(partes[2]),
                                          'TR':int(partes[3]),
                                          'Goles':int(partes[4]),
                                          'Minutos':int(partes[5]),
                                          'KM':float(partes[6])
                                          }
                else:
                    dic[pais][jugador]['TA']    = dic[pais][jugador]['TA'] + int(partes[2])
                    dic[pais][jugador]['TR']    = dic[pais][jugador]['TR'] + int(partes[3])
                    dic[pais][jugador]['Goles'] = dic[pais][jugador]['Goles'] + int(partes[4])
                    dic[pais][jugador]['Minutos'] = dic[pais][jugador]['Minutos'] + int(partes[5]),
                    dic[pais][jugador]['KM']    = dic[pais][jugador]['KM'] + float(partes[5])
            linea = archivo.readline()
        archivo.close()
        return(dic)
    
    def buenDeportista(jugador,dic):
        cumple = 0
        paises = list(dic.keys())
        for pais in paises:
            jugadores = list(dic[pais].keys())
            if jugador in jugadores:
                tarjetas = dic[pais][jugador]['TA'] + dic[pais][jugador]['TR']
                transcurrido = dic[pais][jugador]['Minutos']
                registro = tarjetas/transcurrido
                if registro<(2/270):
                    cumple=1
        return(cumple)
    
    def jugadorAtleta(jugador,dic):
        cumple = 0
        paises = list(dic.keys())
        for pais in paises:
            jugadores = list(dic[pais].keys())
            total = 0
            for jugador in jugadores:
                total = total + dic[pais][jugador]['KM']
            promedio = total/len(jugadores)
            if jugador in jugadores:
                if dic[pais][jugador]['KM']>=promedio and dic[pais][jugador]['Goles']>=1:
                    cumple = 1
        return(cumple)
    
    def paisBuenasPraticas(pais,dic):
        cumple = 0
        paises = list(dic.keys())
        if pais in paises:
            jugadores = list(dic[pais].keys())
            k = len(jugadores)
            cuenta = 0
            for jugador in jugadores:
                cuenta = cuenta + buenDeportista(jugador, dic)
            if (k==cuenta):
                cumple = 1
        return(cumple)
    
    # PROGRAMA -----------------------
    # INGRESO
    L = ['br-ur.csv'] #,'ec-vn.csv']
    
    # PROCEDIMIENTO
    dic = {}
    n = len(L)
    i = 0
    while not(i>=n):
        nomArchivo = L[i]
        actualizaDiccionario(nomArchivo,dic)
        i = i + 1
    
    paises = list(dic.keys())
    resultados = []
    jugadoresatletas = []
    for pais in paises:
        jugadores = list(dic[pais].keys())
        k = len(jugadores)
        cuenta = 0
        goles = 0
        recorrido = 0
        
        for jugador in jugadores:
            cuenta = cuenta + jugadorAtleta(jugador,dic)
            goles = goles + dic[pais][jugador]['Goles']
            recorrido = recorrido + dic[pais][jugador]['KM']
            goleskm = goles/recorrido
    
            if jugadorAtleta(jugador,dic)==1:
                jugadoresatletas.append([jugador,pais])
    
        porcentaje = cuenta/k
        nominado = paisBuenasPraticas(pais,dic)
        resultados.append([pais,porcentaje,goleskm,nominado])
    
    # SALIDA
    print('pais,porcentaje,goleskm,nominado')
    print(resultados)
    print('jugadores atletas')
    print(jugadoresatletas)
    
  • s3Eva_IIT2018_T1 texto aleatorio

    Ejercicio: 3Eva_IIT2018_T1 texto aleatorio

    Propuesta de solución en Python:
    <Ejemplo:

    El texto generado es: 
    Hola Hola.
    Hola amigo-amiga Hola que-
    >>> 
    
    # CCPG1001-Fundamentos de Programación - FIEC-ESPOL
    # 3Eva_IIT2018_T1 texto aleatorio
    
    import random as rnd
    
    # INGRESO
    n = 10 # enunciado con 73
    T = ['Hola','.','que','tal','-',',','amigo','amiga']
    
    # PROCEDIMIENTO
    k = len(T)
    texto   = ''
    simbolo = ',.-'
    antes   = 0
    cuenta  = 0
    while not(cuenta>=n):
        aleatorio = int(rnd.random()*k)+0
        untermino =  T[aleatorio]
        espalabra = not(untermino in simbolo)
        if cuenta == 0 and espalabra==1:
            texto  = texto + untermino
            cuenta = cuenta + 1
            antes  = espalabra
        if cuenta >0:
            if espalabra == 1:
                if antes == 1:
                    texto = texto + ' '+ untermino
                if antes == 0:
                    texto = texto + untermino
                antes  = 1
                cuenta = cuenta+1
            if espalabra==0 and antes==1:
                if untermino==',':
                    texto = texto + ', '
                if untermino=='.':
                    texto = texto + '.\n'
                if untermino=='-':
                    texto = texto +'-'
                antes = 0
                cuenta = cuenta+1
            # if espalabra==0 and antes ==0:
            #     print('no se pueden juntar simbolos')
    
    # SALIDA
    print('El texto generado es: ')
    print(texto)
    
    # Archivo
    archivo = open('literatura.txt','w')
    archivo.write(texto)
    archivo.close()
    
  • s2Eva_IIT2018_T4 Hielo y especies en Ártico-programa

    Ejercicio: 2Eva_IIT2018_T4 Hielo y especies en Ártico-programa

    Finalmente, se crea el programa que usa las funciones anteriores:

    # CCPG1001-Fundamentos de programación FIEC-ESPOL
    # 2Eva_IIT2018_T4 Hielo y especies en Ártico-programa
    
    # ----- NUMERAL 1 y 6----- 
    matrices = crearMatriz(narchivo)
    mhielo09 = matrices[0]
    mhielo19 = matrices[1]
    manimales09 = matrices[2]
    manimales19 = matrices[3]
    
    # ----- NUMERAL 7-----
    especies19 = np.unique(manimales19)
    k = len(especies19)
    comunes = []
    for i in range(0,k,1):
        animal = especies19[i]
        Q = cuadrantes(manimales09)
        animal124 = np.concatenate([Q[0],Q[1],Q[3]]) 
        if (animal in animal124) and not(animal in Q[2]):
            comunes.append(animal)
            
    # ----- NUMERAL 8-----
    migra3 = migracionEspecie(manimales09, manimales19,3)
    migro3 = 0
    if (migra3[0]!=migra3[1]):
        migro3 =1
    # ----- NUMERAL 9-----
    # TAREA
    
    # SALIDA
    print(' ----- NUMERAL 1 y 6 ----- ')
    print('hielo 2009')
    print(mhielo09)
    print('hielo 2019')
    print(mhielo19)
    print('animales 2009')
    print(manimales09)
    print('animales 2019')
    print(manimales19)
    
    print(' ----- NUMERAL 7 ----- ')
    print('animales comunes: ')
    print(comunes)
    
    print(' ----- NUMERAL 8 ----- ')
    print('migracion de 3:')
    print(migra3)
    print('migracion: ',migro3)
    
    print(' ----- NUMERAL 9 ----- ')
    print('Tarea...')
    
  • s2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario

    Ejercicio2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario

    }continuación de los temas anteriores:

    # CCPG1001-Fundamentos de programación FIEC-ESPOL
    # 2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario
    
    # ----- NUMERAL 5 -----
    def crearDiccionario(mHielo, mAnimales, dicEspecies):
        densidad = densidadHielo(mHielo)
        k = len(densidad)
        tablad = {}
        for i in range(0,k,1):
            indice = 'Q'+str(i+1)
            tablad[indice] = densidad[i]
    
        especies = list(dicEspecies.keys())
        ke = len(especies)
        tablae = {}
        for j in range(0,ke,1):
            animal = especies[j]
            conteo = poblacionEspecie(mAnimales, animal)
            tablae[animal] = np.sum(conteo)
        
        tabla={}
        tabla['densidad hielo'] = tablad
        tabla['Especies'] = tablae
        return(tabla)
    

    para probar con el computador, se usa el diccionario y los resultados anteriores:

    # CCPG1001-Fundamentos de programación FIEC-ESPOL
    # 2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario
    
    # ----- NUMERAL 5 -----
    dicEspecies = {0:'No hay animal',
                   1:'Lobo ártico',
                   2:'Oso Polar',
                   3:'Reno',
                   4:'Foca',
                   5:'...',
                   7:'a7',
                   9:'a9',
                   22:'a22'}
    datosdic = crearDiccionario(mhielo09,
                                manimales09,
                                dicEspecies)
    
    #------------------------------------
    print(' ----- NUMERAL 5 ----- ')
    print('diccionario para año 2009')
    print(datosdic)
    

    con lo que los resultados son:

     ----- NUMERAL 5 ----- 
    diccionario para año 2009
    {'densidad hielo': {'Q1': 0.5,
                        'Q2': 0.6666666666666666,
                        'Q3': 0.8333333333333334,
                        'Q4': 0.5},
     'Especies': {0: 1,
                  1: 7,
                  2: 3,
                  3: 2,
                  4: 6,
                  5: 2,
                  7: 1,
                  9: 1,
                  22: 1}
     }
    
  • s2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar

    Ejercicio2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar

    Se añade las instrucciones al tema anterior,

    Se incluyen las funciones que se asume como existentes para prueba de programa. En caso de problemas o dudas con el conteo, elaborar una función contar.

    # CCPG1001-Fundamentos de programación FIEC-ESPOL
    # 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
    import numpy as np
    
    # ----- NUMERAL 2 ----- 
    # Funciones que suponen que existen:
    def cuadrantes(matriz):
        tamano = np.shape(matriz)
        n = tamano[0]
        m = tamano[1]
        mitadfila = n//2
        mitadcolumna = m//2
        Q1 = matriz[0:mitadfila,0:mitadcolumna]
        Q2 = matriz[0:mitadfila,mitadcolumna:]
        Q3 = matriz[mitadfila:,0:mitadcolumna]
        Q4 = matriz[mitadfila:,mitadcolumna:]
        Q = np.array([Q1,Q2,Q3,Q4])
        return(Q)
    
    def poblacionEspecie(mAnimales, especie):
        Q = cuadrantes(mAnimales)
        # pQ1 = np.count_nonzero(Q[0],especie)
        # np.count_nonzero no hay en funciones referencia
        # no en cheatsheet “Cheat Sheet”
        # se procede con algoritmo básico
        k = len(Q)
        poblacion = np.zeros(k,dtype=int)
        for i in range(0,k,1):
            unaQ = Q[i]
            tamano = np.shape(unaQ)
            n = tamano[0]
            m = tamano[1]
            for f in range(0,n,1):
                for c in range(0,m,1):
                    if (unaQ[f,c] == especie):
                        poblacion[i] = poblacion[i] +1
        return(poblacion)
    
    # otra forma es usar una funcion contar en arreglo
    def contarenarreglo(arreglo,cual):
        tamano = np.shape(arreglo)
        n = tamano[0]
        m = tamano[1]
        contar = 0
        for f in range(0,n,1):
            for c in range(0,m,1):
                if (arreglo[f,c] == cual):
                    contar = contar+1
        return(contar)
    
    


    Desarrollo del numeral 2:

    # CCPG1001-Fundamentos de programación FIEC-ESPOL
    # 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
    import numpy as np
    
    # funcion numeral 2
    def densidadHielo(mHielo):
        Q = cuadrantes(mHielo)
        k = len(Q)
        densidad = np.zeros(k,dtype=float)
        for i in range(0,k,1):
            unaQ = Q[i]
            tamano = np.shape(unaQ)
            n = tamano[0]
            m = tamano[1]
            densidad[i]=np.sum(unaQ)/(n*m)
        return(densidad)
    

    desarrollo del numeral 3:

    # CCPG1001-Fundamentos de programación FIEC-ESPOL
    # 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
    import numpy as np
    
    # ----- NUMERAL 3 -----
    def especieDominante(mAnimales):
        especies = np.unique(mAnimales)
        ke = len(especies)
        
        Q = cuadrantes(mAnimales)
        k = len(Q)
        dominante = np.zeros(k,dtype=int)
        for i in range(0,k,1):
            unaQ = Q[i]
            cuantos = np.zeros(ke,dtype=int)
            for j in range(0,ke,1):
                # solución semejante al NUMERAL 2
                # para poblacionEspecie
                animal = especies[j]
                cuantos[j] = contarenarreglo(unaQ,animal)
            mayoria = np.argmax(cuantos)
            dominante[i]= especies[mayoria]
        return(dominante)
    

    desarrollo del numeral 4

    # CCPG1001-Fundamentos de programación FIEC-ESPOL
    # 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
    import numpy as np
    
    # ----- NUMERAL 4 -----
    def migracionEspecie(mAnimales2009, mAnimales2019, especie):
        Q = cuadrantes(mAnimales2009)
        k = len(Q)
        cuantos = np.zeros(k,dtype=int)
        for i in range(0,k,1):
            unaQ = Q[i]
            cuantos[i] = contarenarreglo(unaQ,especie)
        mayoria09 = np.argmax(cuantos)
    
        Q = cuadrantes(mAnimales2019)
        k = len(Q)
        cuantos = np.zeros(k,dtype=int)
        for i in range(0,k,1):
            unaQ = Q[i]
            cuantos[i] = contarenarreglo(unaQ,especie)
        mayoria19 = np.argmax(cuantos)
        
        # considere numeración desde 0
        a = 'Q'+str(mayoria09+1)
        b = 'Q'+str(mayoria19+1)
        migraron =[a,b]
        return(migraron)
    


    Programa de prueba, incluye las partes del tema anterior

    # CCPG1001-Fundamentos de programación FIEC-ESPOL
    # 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
    import numpy as np
    
    # PROGRAMA DE PRUEBA
    # INGRESO
    narchivo = 'artico2009-2019.txt'
    especie = 4
    
    # PROCEDIMIENTO
    
    # ----- NUMERAL 1 ----- 
    matrices = crearMatriz(narchivo)
    mhielo09 = matrices[0]
    mhielo19 = matrices[1]
    manimales09 = matrices[2]
    manimales19 = matrices[3]
    
    # ----- NUMERAL 2 ----- 
    Q = cuadrantes(manimales09)
    poblacion = poblacionEspecie(manimales09, especie)
    densidad = densidadHielo(mhielo09)
    
    # ----- NUMERAL 3 -----
    dominante = especieDominante(manimales09)
    
    # ----- NUMERAL 4 -----
    migraron = migracionEspecie(manimales09, manimales19, especie)
    
    
    # SALIDA
    print(' ----- NUMERAL 1 ----- ')
    print('hielo 2009')
    print(mhielo09)
    print('hielo 2019')
    print(mhielo19)
    print('animales 2009')
    print(manimales09)
    print('animales 2019')
    print(manimales19)
    
    print(' ----- NUMERAL 2 ----- ')
    print('cuadrantes de manimales09')
    print(Q)
    print('población por cuadrantes de manimales09')
    print('para especie = 4')
    print(poblacion)
    print('densidad de hielo para mhielo09')
    print(densidad)
    
    print(' ----- NUMERAL 3 ----- ')
    print('dominantes en manimales09')
    print(dominante)
    print(' ----- NUMERAL 4 ----- ')
    print('migraron de la especie: ',especie)
    print(migraron)
    

    Los resultados obtenidos son:

    animales 2009
    [[ 1  2  4  4]
     [ 2  5  5  3]
     [ 1  3  9  1]
     [ 1  1  4  2]
     [ 4 22  4  7]
     [ 1  1  4  0]]
    
     ----- NUMERAL 2 ----- 
    cuadrantes de manimales09
    [[[ 1  2]
      [ 2  5]
      [ 1  3]]
    
     [[ 4  4]
      [ 5  3]
      [ 9  1]]
    
     [[ 1  1]
      [ 4 22]
      [ 1  1]]
    
     [[ 4  2]
      [ 4  7]
      [ 4  0]]]
    población por cuadrantes de manimales09
    para especie = 4
    [0 2 1 3]
    densidad de hielo para mhielo09
    [0.5        0.66666667 0.83333333 0.5       ]
     ----- NUMERAL 3 ----- 
    dominantes en manimales09
    [1 4 1 4]
     ----- NUMERAL 4 ----- 
    migraron de la especie:  4
    ['Q4', 'Q2']
    
  • s2Eva_IIT2018_T1 Hielo y especies en Ártico-Archivo

    Ejercicio: 2Eva_IIT2018_T1 Hielo y especies en Ártico-Archivo

    Usando el archivo proporcionado en el ejemplo: 'artico2009-2019.txt'

    se crea la función y programa de prueba con las instrucciones más básicas y simples:

    # CCPG1001-Fundamentos de programación FIEC-ESPOL
    # 2Eva_IIT2018_T1 Hielo y especies en Ártico-Archivo
    
    # ----- NUMERAL 1 ----- 
    def crearMatriz(narchivo):
        archivo = open(narchivo,'r')
        
        # dimensiones de matriz
        linea = archivo.readline()
        n = int(linea.strip('\n'))
        linea = archivo.readline()
        m = int(linea.strip('\n'))
        # se crean las matrices
        mhielo09 = np.zeros(shape=(n,m),dtype=int)
        mhielo19 = np.zeros(shape=(n,m),dtype=int)
        manimales09 = np.zeros(shape=(n,m),dtype=int)
        manimales19 = np.zeros(shape=(n,m),dtype=int)
        
        # linea encabezados, No procesada
        linea = archivo.readline()
        
        # linea datos
        linea = archivo.readline()
        while not(linea==''):
            linea = linea.strip('\n')
            partes = linea.split(',')
            anio    =  partes[0]
            fila    = int(partes[1])
            columna = int(partes[2])
            hielo   = int(partes[3])
            animal  = int(partes[4])
            if (anio =='2009'):
                mhielo09[fila,columna] = hielo
                manimales09[fila,columna] = animal
            if (anio =='2019'):
                mhielo19[fila,columna] = hielo
                manimales19[fila,columna] = animal
            linea = archivo.readline()
        archivo.close()
        matrices = [mhielo09,
                    mhielo19,
                    manimales09,
                    manimales19]
        return(matrices)
    
    # PROGRAMA DE PRUEBA
    # INGRESO
    narchivo = 'artico2009-2019.txt'
    
    # PROCEDIMIENTO
    # ----- NUMERAL 1 ----- 
    matrices = crearMatriz(narchivo)
    mhielo09 = matrices[0]
    mhielo19 = matrices[1]
    manimales09 = matrices[2]
    manimales19 = matrices[3]
    
    # SALIDA
    print(' ----- NUMERAL 1 ----- ')
    print('hielo 2009')
    print(mhielo09)
    print('hielo 2019')
    print(mhielo19)
    print('animales 2009')
    print(manimales09)
    print('animales 2019')
    print(manimales19)
    

    para obtener:

     ----- NUMERAL 1 ----- 
    hielo 2009
    [[1 0 0 1]
     [0 1 1 1]
     [1 0 1 0]
     [1 1 1 0]
     [0 1 0 1]
     [1 1 1 0]]
    hielo 2019
    [[1 0 0 1]
     [0 1 0 1]
     [1 0 1 0]
     [1 0 1 0]
     [0 1 0 1]
     [0 0 1 0]]
    animales 2009
    [[ 1  2  4  4]
     [ 2  5  5  3]
     [ 1  3  9  1]
     [ 1  1  4  2]
     [ 4 22  4  7]
     [ 1  1  4  0]]
    animales 2019
    [[ 3  2  4  1]
     [ 0 11  3  5]
     [ 1  0 67  1]
     [ 2 22  3  2]
     [13 13  2  3]
     [ 3  0  1  0]]
    
  • s1Eva_IIT2018_T3 Compras 'Black Friday'

    Ejercicio: 1Eva_IIT2018_T3 Compras 'Black Friday'

    Los numerales se desarrollan como funciones, dividiendo el ejercicio por partes.

    El bloque de procedimiento debe hacer el llamado a las funciones para encontrar las respuestas.


    Algoritmo en Python

    # CCPG1001 Fundamentos de Programación FIEC-ESPOL
    # 1Eva_IIT2018_T3 Compras ‘Black Friday’
    # Tarea: descuentosPorSección
    import random as rnd
    import numpy as np
    
    def calcularPrecio(unacompra,Codigo,Precio,Descuento):
        unprecio = 0
        if (unacompra in Codigo):
            donde = Codigo.index(unacompra)
            valor = Precio[donde]
            unprecio = valor - Descuento[donde]*valor/100
        return(unprecio)
    
    def calcularTotal(compras,Codigo,Precio,Descuento):
        m = len(compras)
        totalpagar = 0
        i = 0
        while not(i>=m):
            unacompra = compras[i]
            unprecio = calcularPrecio(unacompra, Codigo,
                                      Precio, Descuento)
            totalpagar = totalpagar + unprecio
            i = i + 1
        return(totalpagar)
    
    def hallarSecciones(compras,Codigo,Seccion):
        m = len(compras)
        visitar = []
        i = 0
        while not(i>=m):
            unacompra = compras[i]
            donde = Codigo.index(unacompra)
            unaseccion = Seccion[donde]
            if not(unaseccion in visitar):
                visitar.append(unaseccion)
            i = i + 1
        return(visitar)
    
    def descuentosPorSección(Descuento,Seccion):
        remate = []
        # Tarea: Desarrollar
        return(remate)
        
    # INGRESO
    unacompra = input('codigo de una compra: ')
    
    # Tarea: ingresar varias compras
    compras = ['SKU-5675', 'PSS-4542']
    Codigo  = ['CTR-2424', 'SKU-5675', 'PSS-4542']
    Precio  = [ 56.65, 32.00, 22.22]
    Descuento = [0, 50, 10]
    Seccion = ['Ropa Niños', 'Juguetes', 'Hombre']
    
    # PROCEDIMIENTO
    unprecio   = calcularPrecio(unacompra, Codigo,
                                Precio,Descuento)
    totalpagar = calcularTotal(compras, Codigo,
                               Precio,Descuento)
    visitar = hallarSecciones(compras,Codigo, Seccion)
    remate  = descuentosPorSección(Descuento, Seccion)
    
    # SALIDA
    print('El precio de : ',unacompra)
    print(unprecio)
    print('total a pagar de lista de compras: ', totalpagar)
    print('tiendas a visitar: ',visitar)
    print('remate de productos por seccion: ',remate)
    

    resultado del algoritmo

    codigo de una compra: CTR-2424
    El precio de :  CTR-2424
    56.65
    total a pagar de lista de compras:  35.998
    tiendas a visitar:  ['Juguetes', 'Hombre']
    remate de productos por seccion:  []
    >>> 
    
  • s1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)

    Ejercicio: 1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)

    Propuesta de solución al ejercicio.

    Estado del juego:  F***
     adivine una letra: C
     Adivinaste...C
    
    Estado del juego:  FC**
    turno: 1
    fallas:  0
     adivine una letra: M
     Adivinaste...M
    
    Estado del juego:  FC*M
    turno: 2
    fallas:  0
     adivine una letra: A
     NO es una letra de palabra...
    
    Estado del juego:  FC*M
    turno: 3
    fallas:  1
     adivine una letra: N
     Adivinaste...N
    
    Estado del juego:  FCNM
    turno: 4
    fallas:  1
    Felicitaciones, adivinó: FCNM
    >>> 
    

    Algoritmo en Python

    Siguiendo las sugerencias, para dividir y simplificar el problema, primero se crean las funciones: escondeletras(secreta) y cambialetra(secreta,letra,estado).

    Se inicia con la selección aleatoria de la palabra secreta y el sorteo de la letra pista, verificando que sea consonante.

    Se actualiza la palabra secreta con la letra pista, y se inicia el juego.

    # CCPG1001 Fundamentos de Programación FIEC-ESPOL
    # 1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)
    # propuesta de solución: edelros@espol.edu.ec
    # tarea: indiferente usar mayúsculas/minúsculas
    #        contar solo letras adivinadas, no repetidas
    
    import numpy as np
    import random as rnd
    
    def escondeletras(secreta):
        estado = ''
        n = len(secreta)
        i = 0
        while not(i>=n):
            estado = estado + '*'
            i = i + 1 
        return(estado)
    
    def cambialetra(secreta,letra,estado):
        nuevoestado = ''
        n = len(secreta)
        i = 0
        while not(i>=n):
            if (secreta[i]==letra):
                nuevoestado = nuevoestado + letra
            else:
                nuevoestado = nuevoestado + estado[i]
            i = i + 1
        return(nuevoestado)
    
    # PROGRAMA JUEGO
    # selecciona secreta
    palabras = ['ESPOL','FCNM','FIEC','FIMCP','FICT']
    n = len(palabras)
    sorteo  = int(rnd.random()*n)+0
    secreta = palabras[sorteo]
    
    # estado inicial del juego
    estado = escondeletras(secreta)
    
    # una letra como pista
    consonante = 'BCDFGHJKLMNPQRSTVWXYZ'
    m = len(secreta)
    sorteo = int(rnd.random()*m)+0
    pista = secreta[sorteo]
    while not(pista in consonante):
        sorteo = int(rnd.random()*m)+0
        pista  = secreta[sorteo]
        
    # actualiza estado del juego
    estado = cambialetra(secreta,pista,estado)
    
    # Control del Juego
    turnomax = 2*m
    gana  = 1
    falla = 0
    print('Estado del juego: ', estado)
    
    turno = 1
    while not(turno>turnomax or gana==m):
        letra = input(' adivine una letra: ')
        if (letra in secreta):
            gana    =  gana +1
            estado  = cambialetra(secreta,letra, estado)
            mensaje = ' Adivinaste...' + letra
        else:
            falla   = falla + 1
            mensaje = ' NO es una letra de palabra...'
        
        print(mensaje)
        print()
        print('Estado del juego: ', estado)
        print('turno:', turno)
        print('fallas: ', falla)
        turno = turno + 1
    
    if (turno<=turnomax and gana==m):
        mensaje = 'Felicitaciones, adivinó: ' + secreta
    else:
        mensaje = 'lo lamento, perdió..., la palabra era: '
        mensaje = mensaje + secreta
    
    # SALIDA
    print(mensaje)
    

    Recuerde que se ha dejado como tarea, realizar las instrucciones para cumplir que:
    - sea indiferente usar mayúsculas/minúsculas
    - contar solo letras adivinadas, no repetidas

    Referencia: 2Eva_IT2005_T3 Adivina palabra (ahorcado)

    Solución propuesta: s2Eva_IT2005_T3 Adivina palabra (ahorcado)

  • s3Eva_IT2018_T2 Producción minera del país

    Ejercicio: 3Eva_IT2018_T2 Producción minera del país

    Algoritmo en Python

    Solución propuesta en Python, el primer bloque corresponde solo a las funciones requeridas en el examen. El segundo bloque corresponde a un programa de prueba.

    # CCPG1001-Fundamentos de Programación - FIEC-ESPOL
    # 3Eva_IT2018_T2 Producción minera del país
    import numpy as np
    
    # Literal a
    def extraerMinerales(discurso): 
        palabras = discurso.split(' ')
        cuales   = []
    
        for unapalabra in palabras:
            # Tarea: verificar únicos
            if 'mral_' in unapalabra:
                mencionados = unapalabra[5:]
                mencionados = mencionados.title()
                cuales.append(mencionados)
    
        return(cuales)
    
    # literal b
    def calcularGanancias(P,C,T,precios):
        produccion = np.array(P)
        costosExtraccion = np.array(C, dtype=float)
        costosTransporte = np.array(T)
        
        # precio en forma de columna
        precios = np.transpose([precios])
    
        ventas = produccion*precios
        costo = costosTransporte + costosExtraccion
        ganancia = ventas - costo
        return(ganancia)
    
    # literal c
    def gananciaTotal(ganancia, minerales):
        ganametal = np.sum(ganancia,axis =1)
        
        ascendente  = np.argsort(ganametal)
        descendente = np.argsort(-ganametal)
    
        totalmetal  = ganametal[descendente]
        
        # convierte arreglo para ascendente
        minerales = np.array(minerales)
        cualmetal = minerales[descendente]
    
        ganatotal = (totalmetal,list(cualmetal))
    
        return(ganatotal)
    
    # literal d
    def top8(discurso,reporte):
        mencionados = extraerMinerales(discurso)
        totalmetal  = reporte[0]
        cualmetal   = reporte[1]
        
        interseccion = []
        m = len(cualmetal)
        for i in range(0,m,1):
            if (cualmetal[i] in mencionados):
                interseccion.append(cualmetal[i])
                
        mejoresmencionados = interseccion[:8]
        return (mejoresmencionados)
    

    Programa de Prueba

    Observación: las matrices C y T no tienen el mismo orden de magnitud a pesar de ser costos totales. Podría ser que el costo de extracción C sea por gramos, sin embargo las matrices se usan tal como fueron presentadas en el examen

    # CCPG1001-Fundamentos de Programación - FIEC-ESPOL
    
    # PROGRAMA DE PRUEBA -----
    discurso  = 'y el dia de ayer descubrimos en la mina mirador que la cantidad de mral_oro'
    
    minerales = ['Oro', 'Plata', 'Cobre']
    precios   = [38.48,    3.43,    0.01]
    
    minas = ['MIRADOR', 'FRUTA_DEL_NORTE', 'LOMA_LARGA', 'otra']
    
    
    P = [[ 13524000, 121072000,  1204000,  9632000],
         [ 28000000,    952000,  9632000, 96404000],
         [126980000,    896000, 92988000,  9604000]]
    
    C = [[ 12.32, 10.23, 23.23, 19.23],
         [  3.13,  1.78,  2.45,  1.69],
         [  8.32,  5.25,  6.32,  6.89]]
    
    T = [[ 43736616, 341786256,  5442080,  28241024],
         [ 76244000,   1827840, 13966400, 435746080],
         [156439360,   1121792,300723192,  10785292]]
                
    # PROCEDIMIENTO
    mencionados = extraerMinerales(discurso)
    
    ganancias  = calcularGanancias(P,C,T,precios)
    
    ganatotal  = gananciaTotal(ganancias, minerales)
    totalmetal = ganatotal[0]
    cualmetal  = ganatotal[1]
    
    mejoresmencionados = top8(discurso,ganatotal)
    
    
    # SALIDA
    print('a) los minerales mencionados son: ')
    print(mencionados)
    
    print('b) las ganancias totales son:')
    print(ganancias)
    
    print('c) ganancias totales por metal')
    print(totalmetal)
    print(cualmetal)
    
    print('d) los 8 mejores mencionados: ')
    print(mejoresmencionados)
    

    los resultados en pantalla son :

    a) los minerales mencionados son: 
    ['Oro']
    b) las ganancias totales son:
    [[  4.76666892e+08   4.31706429e+09   4.08878168e+07   3.42398317e+08]
     [  1.97959969e+07   1.43751822e+06   1.90713576e+07  -1.05080362e+08]
     [ -1.55169568e+08  -1.11283725e+06  -2.99793318e+08  -1.06892589e+07]]
    c) ganancias totales por metal
    [  5.17701732e+09  -6.47754890e+07  -4.66764983e+08]
    ['Oro', 'Plata', 'Cobre']
    d) los 8 mejores mencionados: 
    ['Oro']
    >>> 
    
  • s3Eva_IT2018_T1 Choferes y Rutas Trailers

    Ejercicio: 3Eva_IT2018_T1 Choferes y Rutas Trailers

    Propuesta en Python, se incluye la función calcularFecha() se presenta para poder probar las funciones en el programa de prueba.

    El archivo con datos de prueba usado es: rutasManejadas2018.txt

    La propuesta considera el uso de listas, por ser parte de los ejercicios del proyecto para 3ra Evaluación.

    Algoritmo en Python

    # CCPG1001-Fundamentos de Programación - FIEC-ESPOL
    # 3Eva_IT2018_T1 Choferes y Rutas Trailers
    
    # literal a
    def cargarDatos(narchivo):
        loschoferes = []
        tabla = {}
        
        archivo  = open(narchivo,'r')
        cabecera = archivo.readline()
        linea = archivo.readline()
        while not(linea==''):
            linea  = linea.strip('\n')
            partes = linea.split(',')
            ruta   = partes[0]
            chofer = partes[1]
            fecha  = partes[2]
            
            if not(chofer in loschoferes):
                loschoferes.append(chofer)
    
            if not(fecha in tabla):
                tabla[fecha] = {ruta:[chofer]}
            else:
                if not(ruta in tabla[fecha]):
                    tabla[fecha][ruta] = [chofer]
                else:
                    tabla[fecha][ruta].append(chofer)
                    
            linea = archivo.readline()
            
        archivo.close()
    
        return((loschoferes,tabla))
    
    # función para pruebas, no requerida en la evaluación
    import datetime as dtt
    
    def calcularFecha(unafecha,n):
        formato = '%d-%m-%Y'
        fecha   = dtt.datetime.strptime(unafecha,formato)
        pasada  = fecha - dtt.timedelta(days=n)
        pasadatxt = dtt.datetime.strftime(pasada,formato)
        return(pasadatxt)
    
    # literal b
    def encontrarChoferes(tabla,loschoferes,unafecha,unaruta,n):
        simanejaron = []
        fechas = list(tabla.keys())
        for i in range(1,n+1,1):
            pasada = calcularFecha(unafecha,i)
            if (pasada in fechas):
                trabajaron = tabla[pasada][unaruta]
                for unchofer in trabajaron:
                    if not(unchofer in simanejaron):
                        simanejaron.append(unchofer)
        nomanejaron = []
        for unchofer in loschoferes:
            if not(unchofer in simanejaron):
                nomanejaron.append(unchofer)
        return(nomanejaron)
    
    # literal c
    def grabarArchivo(tabla,loschoferes,unafecha,n):  
        narchivograba = unaruta+'_'+unafecha+'_'+str(n)+'.txt'
        
        archivo = open(narchivograba,'w')
        
        cabecera = 'Para la ruta '+unaruta+'\n'
        cabecera = cabecera + 'los choferes disponibles para la fecha '+unafecha+'\n'
        cabecera = cabecera + 'que no hayan manejado '+str(n)+' dias anteriores son: \n'
        archivo.write(cabecera)
        
        nomanejaron = encontrarChoferes(tabla,loschoferes,unafecha,unaruta,n)
    
        for cadachofer in nomanejaron:
            archivo.write(cadachofer+'\n')
        archivo.close()
        
        return(narchivograba)
    

    programa de prueba, como trabajo extra, no requerido para el examen:

    # CCPG1001-Fundamentos de Programación - FIEC-ESPOL
    # PROGRAMA PRUEBA -------
    # INGRESO
    narchivo = 'rutasManejadas2018.txt'
    unafecha = '19-05-2018'
    unaruta = 'Guayaquil-Cuenca'
    n = 2
    
    # PROCEDIMIENTO
    datos = cargarDatos(narchivo)
    loschoferes = datos[0]
    tabla = datos[1]
    nomanejaron = encontrarChoferes(tabla,loschoferes,unafecha,unaruta,n)
    elarchivo = grabarArchivo(tabla,loschoferes,unafecha,n)
    
    # SALIDA
    print('a) los choferes registrados son: ')
    print(loschoferes)
    print('   la tabla de trabajos es: ')
    print(tabla)
    print('b) los choferes que no manejaron en ')
    print('  '+unaruta+', '+str(n)+' dias antes del '+unafecha+': ')
    print(nomanejaron)
    print('c) resultados en el archivo: ', elarchivo)
    

    Se muestra el resultado en pantalla del programa usando los datos de prueba del archivo:

    a) los choferes registrados son: 
    ['SMS', 'AGB', 'SMZ', 'EVN', 'AAQ']
       la tabla de trabajos es: 
    {'17-05-2018': {'Guayaquil-Cuenca': ['SMS', 'SMZ'], 'Guayaquil-Daule': ['EVN']}, '18-05-2018': {'Guayaquil-Cuenca': ['AGB'], 'Guayaquil-Daule': ['AAQ']}}
    
    b) los choferes que no manejaron en 
      Guayaquil-Cuenca, 2 dias antes del 19-05-2018: 
    ['EVN', 'AAQ']
    
    c) resultados en el archivo:  Guayaquil-Cuenca_19-05-2018_2.txt
    >>>