Autor: Edison Del Rosario

  • 1Eva_IT2016_T4 Prueba de escritorio, cadenas

    1ra Evaluación I Término 2016-2017. Junio 28, 2016 /CCPG001 – FIEC

    Tema 4. (10 puntos)
    a. (5 puntos) Dada la secuencia de instrucciones mostrada, realice la prueba de escritorio para la variables: cuantos, donde, lista:

    mensaje = 'No basta saber, se debe también aplicar. No es suficiente querer, se debe también hacer. Goethe(1749­-1832)'
    
    largo = len(mensaje)
    cual  = 'be'
    cuantos = 0
    lista = []
    
    donde = -1 
    i = 0 
    while (i<largo):
        donde = mensaje[i:].find(cual)
        
        if (donde>0):
            cuantos = cuantos+1
            i = i + donde + 1
            lista.append(donde)
        else:
            i = i + 1   
    
    print (cuantos)
    print (lista)
    
    cuantos donde lista

    b. (5 puntos) ¿Cuál es el resultado luego de ejecutar el siguiente código? Justifique su respuesta mostrando cómo cambian de valor de i  y listas2 durante la ejecución del código.

    lista  = [5,3,2,6,7,34,1,23,5,6]
    lista2 = []
    
    for i in range(1, len(lista)):
        if (lista[i-1] <= lista[i]) and (lista[i] >= lista[i+1]):
            lista2.append(lista[i])
    
    print(lista2)
    

    A. [34, 23]
    B. [3, 34, 23]
    C. [3, 6, 7, 34, 23]
    D. IndexError: list index out of range

    Referencia: Archivo original 1raEvaIT2016.pdf

  • 1Eva_IT2016_T3 Tiempos de navegación internet

    1ra Evaluación I Término 2016-2017. Junio 28, 2016 /CCPG001 – FIEC

    TEMA 3 . (40  puntos) Se dispone de un arreglo de NumPy que representa el tiempo[empleado, sitio] de navegación en Internet de una empresa expresada en un arreglo de nxm. El arreglo es similar al resultado del tema anterior, además también se dispone de las listas de los empleados y sitios de trabajo.

    La empresa requiere elaborar un reporte de las visitas a internet que incluya los siguientes datos:

    a. Tiempo total de uso de Internet.
    b. Tiempo total de uso de Internet  por empleado
    c. Tiempo total de visita  por sitio
    d. Tiempo total de visita  por sitio de trabajo
    e. Tiempo total de visita  por sitios que no son de trabajo
    f. El nombre del empleado que más tiempo ha pasado en sitios que no son de trabajo
    g. El sitio de trabajo que más tiempo ha sido usado
    h. Si el proveedor de Internet cobra un valor de 5 centavos por minuto de visita alos sitios de trabajo y el doble para los otros sitios. Calcule el total a  pagar en dólares.
    i. ¿Cuántos empleados han visitado cada sitio ?

    Desarrolle un programa en Python que calcule los resultados a las preguntas anteriores y muestre por pantalla las respuestas.

    Referencia: Archivo original 1raEvaIT2016.pdf

  • 1Eva_IT2016_T2 historial de visitas web

    1ra Evaluación I Término 2016-2017. Junio 28, 2016 /CCPG001 – FIEC

    TEMA 2. (30 PUNTOS) teletrabajo imagen

    Una empresa registra los sitios de internet visitados por sus empleados y los minutos de navegación en una lista de tamaño t semejante a la mostrada.

    Cada registro se almacena usando una cadena con el formato:

    visitados = [ 'maria2|www.facebook.com|160',
      'xavi7|www.eluniverso.com|50',
      'jose15|www.sri.gob.ec|30',
      'maria2|www.twitter.com|30',
      'xavi7|www.inec.gob.ec|10',
      'maria2|www.espol.edu.ec|50',
      'jose15|www.sri.gob.ec|120',
      'xavi7|www.sri.gob.ec|20', 
      'maria2|www.twitter.com|20',
      '...' ]

    Para analizar los datos, la empresa dispone de las listas para n empleados p sitios de trabajo:

    empleados = ['maria2', 'jose15', 'xavi7', '...']
    trabajo   = [ 'www.espol.edu.ec',
                  'www.inec.gob.ec', 
                  'www.sri.gob.ec', 
                  '...']

    Con las listas visitados, empleados y trabajo descritas, elabore un programa en Python para obtener los siguientes reportes:

    a. Genere una lista con los sitios que no son de trabajo que han sido visitados por los empleados. La lista obtenida debe contener los q elementos sin repetir.

    b. Tabule el tiempo total de visita para cada empleado (n) y cada sitio visitado (m=p+q) en un arreglo de NumPy de dos dimensiones que represente lo mostrado en el ejemplo:

    tabla sitios web de trabajo y ocio

    Referencia: Archivo original 1raEvaIT2016.pdf


    Nómadas digitales

  • 1Eva_IT2016_T1 Buscar sitios web de universidades

    1ra Evaluación I Término 2016-2017. Junio 28, 2016 /CCPG001 – FIEC

    Tema 1 (20 puntos) La lista mostrrada en el ejemplo contiene los URLs de diferentes sitios Web que han sido visitados.

    lista = ["www.espol.edu.ec", 
      "www.google.com", 
      "www.sri.gob.ec", 
      "www.fiec.espol.edu.ec", 
      "www.uess.edu.ec", 
      "www.FIEC.espol.edu.ec", 
      "www.fict.espol.edu.ec", 
      "www.fcnm.Espol.edu.ec", 
      "www.ucsg.edu.ec", 
      "www.Stanford.edu", 
      "www.harvard.edu", 
      "www.stanford.edu", 
      "www.UCSG.edu.ec", 
      "www.google.com.ec", 
      "www.facebook.com", 
      "www.opensource.org", 
      "www.educacionbc.edu.mx",
      "..."]
    

    Los URLs normalmente se repiten y corresponden algunas veces a universidades de Ecuador y otros países.
    Note que los URLs no diferencian entre mayúsculas y minúsculas.
    Por ejemplo: www.espol.edu.ec y www.ESPOL.edu.ec corresponden al mismo sitio.

    Escriba un programa en Python que dada una lista realice lo siguiente:

    a. Muestre los nombres o siglas de las universidades que aparecen en la lista (sin repetir).

    Del ejemplo mostrado, la salida sería: 
    En la lista aparecen 6 universidades:
    1. ESPOL
    2. UESS
    3. UCSG
    4. STANFORD
    5. HARVARD
    6. EDUCACIONBC

    b. Muestre la cantidad y los nombres/siglas de universidades de Ecuador que aparecen en la lista.

    Del ejemplo mostrado, la salida sería: 
    En la lista aparecen 3 universidades de Ecuador:
    1. ESPOL
    2. UESS
    3. UCSG

    c. Dado un usuario y el nombre o sigla de la universidad, imprima el correo electrónico asignado. Por ejemplo:

    Ingrese el usuario: rafael.bonilla
    Ingrese el nombre/sigla de la universidad: UCSG 
    El correo electrónico del usuario es: rafael.bonilla@ucsg.edu.ec

    Referencia: Archivo original 1raEvaIT2016.pdf

  • s1Eva_IIT2016_T1 Analiza una frase por vocales y consonantes

    Ejercicio: 1Eva_IIT2016_T1 Analiza una frase por vocales y consonantes

    Propuesta de solución en Python, para:

    texto = 'Algunas Palabras pArA contar en un programa con algo de Python'
    Igual número de consonantes y vocales: 
    5
    >>>

    Para facilitar el trabajo con el texto, se convierten todas las letras a mayúsculas upper().

    En principio, se considera que las palabras se separan solo por espacios '  ', separando las palabras en sus partes usando la instrucción split('  '). Queda como tarea considerar otras formas de separar palabras con ',' y '.'

    >>> partes
    ['ALGUNAS', 'PALABRAS', 'PARA', 'CONTAR',
     'EN', 'UN', 'PROGRAMA', 'CON', 'ALGO',
     'DE', 'PYTHON']
    >>>

    Las vocales y consonantes se referencian con los caracteres en mayúsculas.

    El análisis se realiza por cada palabra, luego por cada letra, realizando el conteo de cada vocal y consonante.

    >>> j=0
    >>> palabra=partes[j]
    >>> palabra
    'ALGUNAS'
    >>> 
    

    El resultado se obtiene al comparar los contadores de vocal y consonante.


    Algoritmo en Python

    # CCPG1001 Fundamentos de Programación FIEC-ESPOL
    # 1Eva_IIT2016_T1 Analiza frase por vocales y consonantes
    # Solución propuesta: edelros@espol.edu.ec
    
    # INGRESO
    # texto = input('frase: ')
    texto = 'Algunas Palabras pArA contar en un programa con algo de Python'
    
    # PROCEDIMIENTO
    
    # unificando todo mayúsculas
    texto = texto.upper()
    
    # Separa palabras por espacios
    # Tarea: considerar ',' y '.'
    partes = texto.split(' ')
    m = len(partes)
    
    vocales = 'AEIOU'
    consonantes = 'BCDFGHJKLMNPQRSTVWXYZ'
    
    cuenta = 0
    j = 0
    while not(j>=m):
        palabra = partes[j]
    
        # Analiza una palabra
        n = len(palabra)
        cvocal = 0  # contador vocal
        cconso = 0
    
        i=0
        while not(i>=n):
            letra = palabra[i]
            if letra in vocales:
                cvocal = cvocal + 1
            else:
                cconso = cconso + 1
            i = i + 1
    
        if (cvocal==cconso):
            cuenta = cuenta + 1
        j = j + 1
    
    # SALIDA
    print('Igual número de consonantes y vocales: ')
    print(cuenta)
    
  • 2Eva_IIT2016_T3 Prueba de Escritorio - conjuntos, operaciones, diferencia simétrica

    2da Evaluación II Término 2016-2017. Febrero 14, 2016 /CCPG001

    Tema 3. (10 puntos) Dados los conjuntos:

    A = {1, 2, 3, 4, 5}
    B = {4, 5, 6, 7, 8, 9}
    C = {5, 4, 7, 0, 1}
    Y = {len(A), len(B), len (C)}
    

    a. Indique la salida del programa. Justifique su respuesta

    X = A|B
    Z = X^C
    E = X-C
    print(A.issubset(E))
    

    b. Indique la salida del programa. Justifique su respuesta

    Y = A&Y
    Z = Y-C
    print(Z)
    

    Referencia: Archivo original 2Eva_IIT2016.pdf

  • 2Eva_IIT2016_T2 País destino para jubilados extranjeros

    2da Evaluación II Término 2016-2017. Febrero 14, 2016 /CCPG001

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

    Tema 2. Para ayudar a las personas alrededor del mundo a seleccionar un país donde vivir cuando se jubilen, se ofrece información como el  costo de vida, las temperaturas medias por ciudad, etc.jubiladocuenca01

    a. Escriba la función cargarDatos(nomFile)
    que recibe el nombre de un archivo con las ciudades y sus métricas y retorna un diccionario con la estructura mostrada a continuación:

    Ejemplo: "datos.txt" contiene:
    
    Cuenca,temperatura,22
    Guayaquil,canastaBasica,630
    Cuenca,canastaBasica,457
    Bogota,canastaBasica,321
    Bogota,temperatura,20
    Guayaquil,temperatura,29
    
    cargarDatos("datos.txt") retorna un diccionario con la siguiente estructura:
    datos=
    {"Guayaquil":{"canastaBasica":630, "temperatura":29},
     "Cuenta":   {"canastaBasica":457, "temperatura":22},
      ...}

    Nota: para el ejercicio solo existen dos métricas posibles: “canastaBásica” y “temperatura” y todas las ciudades tienen ambas métricas.

    b. Escriba la función metricaPais(datos, paises) que recibe el diccionario datos, generado con la función anterior, y el diccionario paises que tiene como clave el nombre del país y como valor la lista de ciudades para ese país. Esta función calcula el valor promedio de cada métrica por país y retorna un diccionario cuya clave es el país y cuyo valor es otro diccionario con los promedios por métrica.

    paises={'Ecuador':{'Cuenca','Guayaquil'},'Colombia':{'Bogotá'}, ...}
    
    Por ejemplo, para Guayaquil y Cuenca que pertenecen al mismo país se calcula el promedio de las métricas: "canastaBasica" y "temperatura", cuyo resultado se lo asigna al país Ecuador
    
    {"Ecuador":  {"canastaBasica":542.50, "temperatura":25.5},
     "Colombia": {"canastaBasica":321, "temperatura":20},
     ...}

    c. Escriba la función generaPaises(promedios, metrica, minimo, maximo)  para buscar los paises que en su promedios cumplen con los valores entre mínimo y máximo para una métrica deseada.

    Los argumentos son promedios, con la estructura del diccionario generado en la función anterior, una cadena denominado métrica que puede ser “canastaBasica” o “temperatura” y un valor mínimo y un máximo para dicha métrica. El resultado será un archivo con el nombre de la métrica”.csv” que contiene: los países y el valor de la métrica buscada separados por coma.

    Usando el ejemplo anterior:
    generaPaises(proms, "temperatura", 23, 26) 
    
    "temperatura.csv" tendrá el siguiente contenido:
    Ecuador,temperatura, 25.5

    Referencia: “Ecuador, a la cabeza de los mejores países para los jubilados“. 2 de Enero, 2015, www.eluniverso.com,

    - Archivo original 2Eva_IIT2016.pdf

  • 2Eva_IIT2016_T1 Multas de Transito por sector

    2da Evaluación II Término 2016-2017. Febrero 14, 2016 /CCPG001

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

    Tema 1. (30 puntos) Para registrar las multas de tránsito, la ciudad será representada por una matriz de 5×5 dividida en cuadrantes y sectores. multastransito01

    Cada celda corresponde a un cuadrante y registra los valores acumulados de las multas reportadas por los agentes de tránsito. Existen cinco “sectores” (Norte Sur, Centro, Este y Oeste) que agrupan a varios cuadrantes mostrados en la tabla “sectores”.

    Sectores
     Norte  Norte Norte  Norte  Norte
     Oeste  Oeste  Centro  Este  Este
     Oeste  Oeste  Centro  Este  Este
     Oeste  Oeste  Centro  Este  Este
     Sur  Sur  Sur  Sur  Sur

    La tabla sectores muestra únicamente la distribución de sectores. No debe crear esta matriz “sectores”.

    Para cumplir con la tarea, deberá implementar lo siguiente:

    a. Una función generaMatriz(listamultas) que recibe una lista de tuplas  con las coordenadas del cuadrante y el valor de la multa (fila, columna, valor). La función deberá retornar una matriz (arreglo Numpy) con el valor agregado de las multas generadas para cada cuadrante.

    Por ejemplo, para:
    listamultas=
    [(0, 0, 120), 
     (1, 2, 330), 
     (3, 4, 123), 
     (4, 2, 62), 
     (0, 0, 50), 
     (4, 4, 89), 
     (0, 3, 25), 
     (2, 0, 43), 
     (3, 2, 21), 
     (0, 0, 120)]
    
    la función retorna:
    totalmultas
     290  0 0  25  0
     0  0  330  0  0
     43  0  0  0  0
     0  0  21  0  123
     0  0  62  0  89

    Nota: las coordenadas de la totalmultas empiezan en 0,0. En listamultas, las coordenadas pueden repetirse al haber varias multas en un mismo cuadrante.

    b. Una función sectorTop(matriz) que reciba la matriz generada en el tema anterior, calcule el sector con el vator total de multas más alto y retorne una tupla con el nombre del sector (Norte, Sur, Centro, Este, Oeste) y dicho valor.

    Para el ejemplo anterior, la función retornará: 
    ('Centro',351)

    Referencia: “Doble columna y uso de zonas prohibidas, problemas por resolver en Guayaquil“, 27 de Agosto, 2015, www.eluniverso.com

    - Archivo original 2Eva_IIT2016.pdf

  • s2Eva_IIT2016_T2 País destino para jubilados extranjeros

    Ejercicio: 2Eva_IIT2016_T2 País destino para jubilados extranjeros

    Propuesta de solución en Python:

    requiere usar el archivo: destinosdatos.txt

    # CCPG1001-Fundamentos de programación FIEC-ESPOL
    # 2Eva_IIT2016_T2 País destino para jubilados extranjeros
    
    def cargarDatos(nomFile):
        datos = {}
        archivo = open(nomFile, 'r')
        linea = archivo.readline()
        while not(linea==''):
            linea = linea.strip('\n')
            partes = linea.split(',')
            
            ciu = partes[0]
            met = partes[1]
            val = float(partes[2])
            
            if not(ciu in datos):
                datos[ciu] = {met:val}
            else:
                datos[ciu][met]= val
            linea = archivo.readline()
            
        archivo.close()
        return(datos)
    
    def metricaPais(datos, paises):
        promedios = {}
        for unpais in paises:
            totalcanasta = 0
            totaltemperatura = 0
            ciudades = paises[unpais]
            
            for unaciudad in ciudades:
                unacanasta = datos[unaciudad]['canastaBasica']
                totalcanasta = totalcanasta + unacanasta
                unatemp = datos[unaciudad]['temperatura']
                totaltemperatura = totaltemperatura + unatemp
    
            # los promedios son por pais
            promediocanasta     = totalcanasta/len(ciudades)
            promediotemperatura = totaltemperatura/len(ciudades)
            promedios[unpais] = {'canastaBasica': promediocanasta,
                                 'temperatura': promediotemperatura}  
        return(promedios)
    
    def generaPaises(promedios, metrica, minimo, maximo):
        narchivo = 'cumplencon.csv'
        archivo  = open(narchivo, 'w')
        
        for unpais in promedios:
            valor = promedios[unpais][metrica]
            if (valor>=minimo and valor<=maximo):
                linea = unpais +'\n'
                archivo.write(linea)
        archivo.close
        
        mensaje = 'resultados en archivo'
        return(mensaje)
    
    
    # PROGRAMA Prueba
    # INGRESO
    paises = {'Ecuador':{'Cuenca','Guayaquil'},
              'Colombia':{'Bogotá'}}
    
    nomFile = 'destinosdatos.txt'
    
    metrica = input('cual metrica: ')
    minimo  = float(input('minimo: '))
    maximo  = float(input('maximo: '))
    
    # PROCEDIMIENTO
    tabla = cargarDatos(nomFile)
    promedios = metricaPais(tabla, paises)
    cualescumplen = generaPaises(promedios, metrica, minimo, maximo)
    
    # SALIDA
    print('tabla de datos: ')
    print(tabla)
    print('paises')
    print(paises)
    print('promedios de características')
    print(promedios)
    print('paises de interes para el jubilado, en archivo')