Autor: Edison Del Rosario

  • 3Eva_IT2017_T3 Prueba de escritorio – cadenas, listas, índices

    3ra Evaluación I Término 2017-2018. Septiembre 16, 2017 /CCPG001

    TEMA 3 (10 PUNTOS)
    a. [5 puntos] ¿Qué imprime el siguiente código? Justifique su respuesta.

    a = 'mensaje'
    c = 'abcdefg'
    
    i = len(c)-1
    for b  in a:
        print(b*c.index(c[i]))
        i -= 1
    

    b. [5 puntos] ¿Qué imprime el siguiente código? Justifique su respuesta.

    L = [5,3,8,2,7]
    
    A = [0]*10
    indice = 3
    for valor in L:
        if valor < 6:
            indice -= 1
        else:
            indice += 1
        A[indice] = valor
    
    print(set(A))
    

    Referencia: Archivo original 3Eva_IT2017.pdf

  • s3Eva_IT2017_T3 Prueba de escritorio - cadenas, listas, índices

    Ejercicio: 3Eva_IT2017_T3 Prueba de escritorio – cadenas, listas, índices

    Literal a. cadenas de caracteres, lazos, índices.

    Literal b. Listas, índices, lazos, condicionales

     

  • s3Eva_IT2017_T2 Huracanes en Atlántico Norte

    Ejercicio: 3Eva_IT2017_T2 Huracanes en Atlantico Norte

    Propuesta de solución en Python:

    # CCPG1001-Fundamentos de Programación - FIEC-ESPOL
    # 3Eva_IT2017_T2 Huracanes en Atlantico Norte
    # Supone que el numero de columnas de M
    # Es igual al numero de nombres en huracanes
    
    import numpy as np
    
    def categoriza(M):
        tamano = np.shape(M)
        n = tamano[0]
        m = tamano[1]
        categoria = np.ones(m, dtype=int)
        for j in range(0,m,1):
            vv = M[2,j]
            if (vv>=100 and vv=150 and vv=200 and vv250):
                categoria[j]=5
        return(categoria)
    
    def total_marejada(M,cat):
        categoria = categoriza(M)
        
        tamano = np.shape(M)
        n = tamano[0]
        m = tamano[1]
    
        marejadas = np.zeros(6,dtype=float)
        for j in range(0,m,1):
            k = categoria[j]
            marejadas[k] = marejadas[k]+M[4,j]
        totaluna = marejadas[cat]
        return(totaluna)
    
    def indices_anio(huracanes,anio):
        # Supone que cantidad de huracanes
        # es igual a columnas de matriz
        cuales  = huracanes.keys()
        indices = {}
        a = 0
        b = -1
        for cada in cuales:
            m = len(huracanes[cada])
            a = b + 1
            b = a + m-1
            indices[cada] = [a,b]
        return(indices[anio])
    
    def velocidad_superior(M,huracanes,anio):
        cual   = indices_anio(huracanes,anio)
        desde  = cual[0]
        hasta  = cual[1]
        vector = M[0,desde:hasta+1]
        promedio = np.mean(vector)
        cuantos = 0
        for valor in vector:
            if (valor>promedio):
                cuantos = cuantos + 1
        return(cuantos)
    
    def ACE(M,huracanes,anio):
        cual   = indices_anio(huracanes,anio)
        desde  = cual[0]
        hasta  = cual[1]
        vector = M[0,desde:hasta+1]
        liberada = 0
        for valor in vector:
            liberada = liberada + valor**2
        liberada = liberada*(10**(-4))
        return(liberada)
    
    def lluvia(M, huracanes, nombre_huracan,anio):
        nombres = huracanes[anio]
        nombres = list(nombres)
        donde   = nombres.index(nombre_huracan)
        cual  = indices_anio(huracanes,anio)
        desde = cual[0]
        hasta = cual[1]
        cantidad = M[3,desde+donde]
        return(cantidad)
    
    # PROGRAMA ------------------------
    import numpy as np
    
    M = np.array([[20, 30, 19, 15, 18],
                  [89,195,120,150,240],
                  [65,165,100,110,200],
                  [30, 49, 35, 89, 67],
                  [ 5, 18,  1,  2,  5]]
                 )
    # 2015:('Ana','Kate'), # No usado para el ejemplo (CONFUSO)
    huracanes = {2016:('Alex', 'Otto'),
                 2017:('Ariene', 'Harvey','Irma'),
                 }
    cat = 2
    anio = 2017
    nombre_huracan = 'Harvey'
    
    # PROCEDIMIENTO
    categoria = categoriza(M)
    marejadas = total_marejada(M,cat)
    indices   = indices_anio(huracanes,anio)
    vel_superior = velocidad_superior(M,huracanes,anio)
    energia = ACE(M,huracanes,anio)
    llovio  = lluvia(M, huracanes, nombre_huracan,anio)
    
    # SALIDA
    print(M)
    print(huracanes)
    print('---')
    print('categorias: ', categoria)
    print('Marejadas cat['+str(cat)+']: ', marejadas)
    print('indices: ', indices)
    print('velocidad superior: ', vel_superior)
    print('Energia liberada: ',energia)
    print('lluvia en mm: ', llovio)
    
  • 2Eva_IT2017_T1 Contar palabras de un archivo

    2da Evaluación I Término 2017-2018. Septiembre 2, 2017 /CCPG001

    (Editado para tarea, se mantiene el objetivo de aprendizaje)

    TEMA 1 (40 PUNTOS). Para el texto de un libro se requiere generar las estadísticas del uso de palabras . Dispone también de una lista con conectores = ['la', 'con', 'de', 'y', '…']  que son palabras que no agregan mayor significado al texto.

    Como ejemplo, el archivo con nombre=' textolibro.txt ' contiene:

    Con la ayuda de un grupo de amigos y de valientes aliados Frodo emprende un peligroso viaje con la
    misión de destruir el Anillo Único Pero el Señor Oscuro Sauron quien creara el Anillo envía a sus
    servidores para perseguir al grupo Si Sauron lograra recuperar el Anillo sería el final de la Tierra
    Media Ganadora de cuatro Oscars este inmortal relato sobre el bien y el mal la amistad y el sacrificio
    te transportará a un mundo más allá de tu imaginación
    ...

    Desarrolle lo necesario para implementar las siguientes funciones:

    a)  cargarArchivo(nombre), que lea el archivo de texto denominado 'nombre' para crear una tabla (NumPy con dtype='U20'), donde cada fila representa una línea y cada columna contiene una palabra de dicha línea.

    Notas:
    Cada línea del archivo está limitada por '\n'  y cada palabra está separada por un espacio en blanco.
    Asuma que cada palabra tendrá 20 caracteres como máximo y que el número máximo de palabras por líneas es 30. Si la línea tiene menos de 30 palabras, las celdas restantes deben ser llenadas con una cadena vacía ('').

    b) ocurrencias(palabra, tabla), que tiene como resultado el número de veces que la palabra aparece en la tabla.

    c) lineas(palabra, tabla), que entrega un vector (tupla) con los números de fila donde aparece la palabra en tabla.

    d) contarPalabras(tabla , conectores) que muestra como resultado una tupla con:
    - la cantidad de palabras únicas en el texto (incluyendo los conectores) y
    - el número solo de conectores que se incluyen en el texto.
    Cada palabra (regular o conector) debe ser contada una sola vez sin importar cuantas veces se repita en el texto.

    e) concordancia(tabla, conectores) que obtiene las estadísticas de las palabras  y entrega el diccionario mostrado en ejemplo.
    Para el diccionario interno 'palabras' no debe incluir los 'conectores'. .
    Puede apoyarse en las funciones anteriores para generar el diccionario.

    Ejemplo:
    resultado = 
    {
        'NTP': 83,
        'NPC': 22,
        'palabras':{
            'Anillo': {'veces': 3, 'NL': (2,2,3)},
            'Sauron': {'veces': 2, 'NL': (2,3) },
            ...
            }
     }
    
     Donde,
     NTP = Número total de palabras
     NPC = Número solo de palabras stopwords
     NL = Número de líneas

    Referencia del texto: Tolkien, J. R. R. (1991). La comunidad del anillo (Vol. 1). Planeta Publishing.

    - Archivo Original 2Eva_IT2017.pdf

    Rúbrica: literal a (6 puntos + 5 puntos de bono),  literal b y c (6 puntos cada uno), literal d y e (11 puntos cada uno).

  • 2Eva_IT2017_T2 Plantas energía eléctrica

    2da Evaluación I Término 2017-2018. Septiembre 2, 2017 /CCPG001

    TEMA 2. (50 PUNTOS) Para administrar la nueva matriz energética del Ecuador, se dispone de un diccionario con la información de las plantas de energía y las ciudades que atienden cada una.

    Cada ciudad tiene: una tupla con los consumos mensuales (12) del año en megavatios-hora (MWh) y la tarifa de consumo en dólares por megavatio-hora (MWh) que le cobra la planta eléctrica.

    Una ciudad puede estar servida por más de una planta eléctrica. No todas las ciudades son servidas por todas las plantas eléctricas.

    consumo_energia = {
        'Coca Codo Sinclair': {
            'Quito': { 'consumos':(400, 432, …, 213),'tarifa': 65},
            'Guayaquil': { 'consumos': (120, 55, 32, …, 70),'tarifa': 84},
            ...
            },
        'Sopladora': {
            'Guayaquil':{ 'consumos': (310, 220, 321, …, 200),'tarifa':55},
            'Quito': { 'consumos': (400, 432, …, 587),'tarifa': 79},
            'Loja': { 'consumos': (50, 32, 32, …, 40),'tarifa': 32},
            ...
            },
        ...
        }
    

    Además, dispone del siguiente diccionario con información de ciudad por región :

    informacion = {
        'costa': ('Guayaquil', 'Manta', …),
        'sierra': ('Quito', 'Ambato', …),
        'oriente': ('Tena', 'Nueva Loja', …),
        }
    

    Implemente lo siguiente:

    1.  Una función total_anual(consumo_energia, planta, ciudad) que recibe el diccionario consumo_energia, el nombre de una planta y el nombre de una ciudad. La función debe calcular y retornar el total anual de megavatios-hora servido por planta a ciudad. (7 puntos)
    2.  Una función total_plantas_ciudad(consumo_energia, ciudad) que recibe el diccionario consumo_energia y el nombre de una ciudad. La función debe devolver un diccionario cuyas claves corresponden a los nombres de las plantas generadoras que proveen energía a ciudad y los valores corresponden al total anual de megavatios-hora servido por cada planta a ciudad. (13 puntos)
    3.  Una función megavatios_hora(consumo_energia, informacion) que recibe el diccionario consumo_energia y el diccionario informacion . La función retorna el total anual de megavatios-hora consumido por todas las ciudades de la región COSTA. (15 puntos)
    4. Una función facturacion(consumo_energia) que recibe el diccionario consumo_energia y genera un archivo con la facturación total en dólares de los seis primeros meses de cada planta generadora. El archivo resultante se llamará <code?'facturacion.txt' y tendrá la siguiente estructura: (15 puntos)
    Planta,enero,febrero,marzo,...,junio
    Coca Codo Sinclair,2903,2145,3010,...,2945
    Sopladora,3102,3234,3223,...,3417
    …
    

    Referencia: Archivo Original 2Eva_IT2017.pdf

  • 2Eva_IT2017_T3 Prueba de escritorio - cadenas, archivos, listas

    2da Evaluación I Término 2017-2018. Septiembre 2, 2017 /CCPG001

    TEMA 3 (10 PUNTOS)
    a. Considere:

    archivo = open( 'datos.txt' , 'w' )
    archivo.write( 'Días de la semana\n' )
    archivo.close()
    
    lista = [ 'lunes' , '\n' , 'martes' , '\n' ,
              'miércoles' , 'jueves' , 'viernes' ]
    
    archivo = open ( 'datos.txt' , 'a+' )
    archivo.writelines( lista )
    archivo.close()
    

    ¿Cuántas líneas de texto tiene el archivo 'datos.txt' al final del programa y con qué contenido? Justifique su respuesta. (5 puntos)

    b. Muestre la salida por pantalla la ejecución del siguiente código y justifique su respuesta: (5 puntos)

    a = set([4,5,9,7,1])
    b = set([6,3,8,2,10])
    c = set([1,4,5])
    
    d = set([len(a), len(c), len(b)])
    
    f = (a | b) & d
    g = (b - c) | d
    h = d ^ a
    
    print(f)
    print(g)
    print(h)
    

    Referencia: Archivo Original 2Eva_IT2017.pdf

  • s2Eva_IT2017_T3 Prueba de escritorio - cadenas, archivos, listas

    Ejercicio: 2Eva_IT2017_T3 Prueba de escritorio - cadenas, archivos, listas

    literal a. cadenas de caracteres, archivos de texto, listas de texto.

    literal b. conjuntos, unión, intersección, diferencia simétrica

  • 1Eva_IT2017_T1 Palabras puntaje

    1ra Evaluación I Término 2017-2018. Julio 01, 2017 /CCPG001 – FIEC

    (Editado para tarea, se mantiene el objetivo de aprendizaje)

    TEMA 1. (40 PUNTOS) En el juego de tablero "Scrabble", cuando el jugador forma una palabra, acumula los puntos de los equivalentes para cada letra .

    Una palabra se puede crear cruzando otra palabra y usando una letra compartida que  recibe el doble de puntos.

    alfabeto = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
    equivale = [1,3,3,2,1,4,2,4,1,9,5,1,3,1,1,3,10,1,1,1,1,4,4,9,4,10]
    

    Realice un programa en que el jugador ingrese varias palabras separadas por comas (','),  determine el puntaje correspondiente a cada palabra y muestre cuál es la  palabra con mayor puntaje.

    Ejemplo: 
    >>> 
    Analizar: CAS*A*,S*ASTR*E*,R*EY*,A*ZOTE*
    CAS*A* 8
    S*ASTR*E* 9
    R*EY* 11
    A*ZOTE* 16
    Ganador: A*ZOTE* 16
    

    Nota: Para marcar una letra compartida se añade un símbolo ('*') , suponga que todas las palabras ingresadas terminan con una letra compartida. Todas las letras deben ser mayúsculas, si se ingresa una minúscula será ignorada para el puntaje.

    Referencia: Archivo original 1Eva_IT2017.pdf


    Rúbrica para tarea: (sobre 10 puntos)

    • algoritmo para buscar posición de letra en alfabeto, no usar palabra.find(letra) (2 punto)
    • determinar puntos por cada letra (2 punto)
    • unificar mayúsculas-minúsculas para comparar ( 1 punto)
    • considerar '*' para doble puntaje por letra (2 punto)
    • analizar palabra letra por letra (1 punto)
    • analizar cada palabra de la frase (1 punto)
    • separar palabras de frase usando “coma” (1 punto)
    • algoritmo estructurado: Inicio, ingreso, procedimiento, salida, fin. Si no es estructurado, PUNTOS = PUNTOS/5

     

  • s1Eva_IT2017_T1 Palabras puntaje

    Ejercicio: 1Eva_IT2017_T1 Palabras puntaje

    Propuesta de solución en Python, revisar tema indicado como tarea:

    Para iniciar el algoritmo se presenta un ejemplo busca como resultado: mostrar cada palabra y su puntaje.

    Al final se muestra la palabra que obtuvo mayor puntaje.

    palabra, puntaje:
    CAS*A* 6
    S*ASTR*E* 6
    R*EY* 6
    A*ZOTE* 14
    Mayor puntaje: 
    A*ZOTE* 14
    >>> 
    

    Algoritmo en Python

    En el bloque de ingreso se ha optado por incluir las palabras del ejercicio del enunciado.

    Para simplificar la identificación de las letras se convierten todas a mayusculas en caso que el usuario las escriba en minúsculas. Se utiliza un contador de "puntos" por cada "palabra".

    Luego se procesa cada palabra, analizando cada letra para encontrar su puntaje equivalente.

    # 1ra Evaluación I Término 2017
    # Tema 1. puntaje de palabras
    # Tarea: considere los '*'como doble puntaje
    #        para letra anterior
    import numpy as np
    
    # INGRESO
    # variaspalabras = input('Analizar: ')
    variaspalabras ='CAS*A*,S*ASTR*E*,R*EY*,A*ZOTE*'
    
    # PROCEDIMIENTO
    abecedario = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    equivale = [1,3,3,2,1,4,2,4,1,9,5,1,3,1,1,3,
                10,1,1,1,1,4,4,9,4,10]
    
    # unifica a mayúsculas
    variaspalabras = variaspalabras.upper()
    
    # separa las palabras por ','
    palabras = variaspalabras.split(',')
    
    n = len(palabras)
    
    # arreglo de puntos por cada palabra
    puntos = np.zeros(n,dtype=int)
    
    i = 0
    while (i<n):
        unapalabra = palabras[i]
        m = len(unapalabra)
    
        # Analiza palabra, letra por letra
        j = 0
        while (j<m):
            letra = unapalabra[j]
            if (letra in abecedario):
                donde = abecedario.index(letra)
                puntos[i] = puntos[i]+equivale[donde]
            j = j+1 # siguiente letra
        
        i = i+1  #siguiente palabra
    
    # encuentra posición del máximo puntaje
    cual = np.argmax(puntos)
    
    # SALIDA
    print('palabra, puntaje: ')
    i = 0
    while (i<n):
        print(palabras[i],puntos[i])
        i = i+1
    
    print('Mayor puntaje: ')
    print(palabras[cual],puntos[cual])
    
  • 1Eva_IT2017_T2 suscriptores de youtubers

    1ra Evaluación I Término 2017-2018. Julio 01, 2017. CCPG001 - FIEC

    (Editado para tarea, se mantiene el objetivo de aprendizaje)

    Tema 2 . (50 puntos)
    Para analizar la popularidad de varios youtubers de España, Ecuador y México, se obtuvieron datos del sitio "SocialBlade" en varias listas y una matriz:

     

    espana  = ['elrubiosOMG','VEGETTA777', '...']
    ecuador = ['enchufetvLIVE','Kreizivoy','...']
    mexico  = ['Yuya','Werevertumorro','...']
    

    En la matriz, para cada youtuber (fila) le corresponde los datos de (columnas): suscriptores, reproducciones de videos, ganancias mensuales y ganancias anuales.

    matriz = np.array([
        [  24771906, 5477807839,      21900,     262800],
        [ 184551280, 7046108694,      45500,     546000],
        [     76493,     798122,         36,        430],
        [    133538,   21104851,        156,       1900],
        [  18554394, 1967543913,       6700,      80000],
        [  12548964, 2034702069,      12200,      12200],
        [...]
        ])
    

    Considere las siguientes métricas para cada youtuber:

    popularidad = \text{numero de suscriptores} rentabilidad = \frac{\text{ganancias anuales}}{\text{número de suscriptores}}

    Realice un programa para encontrar:
    1. El youtuber con mayor rentabilidad y el país al que pertenece
    2. Los youtubers con mayor rentabilidad de cada país
    3. ¿Cuántos youtubers de España tienen más suscriptores que el youtuber mas popular de Ecuador y México?
    4. Número promedio de reproducciones de los youtubers con más de un millón de suscriptores
    5. ¿Cuántos youtubers de Ecuador hay en cada categoría? Las categorías son:

    rango de rentabilidad categoría
    0.0 a 0.30 3
    0.31 a 0.60 2
    >=0.61 1

    6.  El país que generó más ganancias anuales y el país que generó menos ganancias anuales. Muestre el mensaje siguiente reemplazando los datos apropiadamente

    El país X generó  Z% mas de ganancias que el país Y

    Para calcular el porcentaje utilice la siguiente fórmula:
    GX: ganancia anuales del país X
    GY: ganancias anuales del país Y

    porcentaje = \frac{GX-GY}{GY} * 100

    Nota: Para los numerales del 1 al 5, el código solo debe realizar el procedimiento para generar los valores pedidos y almacenarlos en variables, no se requiere mostrar datos por pantalla.

    Referencias: http://socialblade.com/youtube

    - Archivo original 1Eva_IT2017.pdf