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

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

1Eva_IT2017_T3 Prueba de escritorio, listas

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

TEMA 3 (10 PUNTOS)
a) Dada la lista

L = [12,9,1,3,2,10,20,5, ...]

Genere tres posiciones aleatorias de tal manera que los valores correspondientes sumen al menos 20. Al final muestre la suma de los tres valores seleccionados aleatoriamente.

b) Usando la siguiente lista:

stars = ['Potter', 'Ron Weasley',
         'Dombledore','Hermione Greanger',
         'Hagrid','Voldemort']

¿que mostrarían las siguientes instrucciones?:

print(stars[-4,-2])

print(stars[3][0:stars[3].find(' ')] + stars[1][3:])

Referencia: Archivo original 1Eva_IT2017.pdf

s1Eva_IT2017_T2 suscriptores de youtubers

Ejercicio: 1Eva_IT2017_T2 suscriptores de youtubers

Propuesta de solución en Python, procedimiento desarrollado por literal

# CCPG1001 Fundamentos de Programación FIEC-ESPOL
# 1Eva_IT2017_T2 suscriptores de youtubers
import numpy as np

# INGRESO
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]])

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

# PROCEDIMIENTO

# Literal a) ********
tamano = np.shape(matriz)
n = tamano[0]
m = tamano[1]

rentabilidad = np.zeros(n,dtype=float)
f = 0
while not(f>=n):
    rentabilidad[f] = matriz[f,m-1]/matriz[f,0]
    f = f + 1

cualganamas = np.argmax(rentabilidad)

todos = espana + ecuador + mexico
quienganamas = todos[cualganamas]

dondees = 'español'
if quienganamas in ecuador:
    dondees = 'ecuatoriano'
if quienganamas in mexico:
    dondees = 'mexicano'

# SALIDA
print('literal a: ')
print(rentabilidad)
print('el mas rentable es: ',cualganamas)
print('quien es mas rentable: ',quienganamas)
print('del pais: ', dondees)


# Literal b: ********
# Solo trabajo con espana
nsp = len(espana)
datoespana = matriz[0:nsp,:]
rentasp = datoespana[:,m-1]/datoespana[:,0]
cualsp  = np.argmax(rentasp)
quiensp = espana[cualsp]

# SALIDA b)
print('para espana: ')
print(cualsp)
print(quiensp)

# literal c) ********
ecmx=matriz[nsp:,0]
popecmx    = np.argmax(ecmx)
cuantoecmx = np.max(ecmx)

ganan = 0
suscritosp = matriz[0:nsp,0]
f = 0
while not(f>=nsp):
    if (suscritosp[f]>cuantoecmx):
        ganan = ganan + 1
    f = f + 1
    
# SALIDA c)
print('tienen mas en espana: ',ganan)

# literal d) ********
reproduce = matriz[:,1]
cuantosrp = 0
totalrp = 0
f = 0
while not(f>=n):
    if (reproduce[f]>1000000):
        cuantosrp = cuantosrp+1
        totalrp   = totalrp + reproduce[f]
    f = f + 1
promrp = totalrp/cuantosrp

# SALIDA d)
print('promedio mas un millon: ',promrp)
a=len(espana)
rentaec = rentabilidad[a:a+len(ecuador)]

resultado del algoritmo

literal a: 
[0.01060879 0.00295853 0.00562143 0.01422816 0.00431165 0.00097219]
el mas rentable es:  3
quien es mas rentable:  Kreizivoy
del pais:  ecuatoriano
para espana: 
0
elrubiosOMG
tienen mas en espana:  2
promedio mas un millon:  3309453473.2
>>> 

1Eva_IIT2015~T4 Prueba de escritorio, listas

1ra Evaluación II Término 2015-2016, Marzo 7, 2016 /CCPG1001

Tema 4. (10%) Analice el código fuente de los programas que se muestran a continuación. Seleccione la respuesta correcta y justifique brevemente su respuesta.

4a. Determine la salida por pantalla del siguiente código:

A = [12,23,14,50,30]
for i in range(0, len(A)):
    if A[i] % 2 == 0:
        A.pop(i)
print(A)

a) Error: El símbolo pop no ha sido definido
b) Error: Índice de la lista fuera de rango
c) [23]d)[23, 50]

4b. Determine la salida por pantalla del siguiente código:

a = [5,4,3,2,1,0]
print(a[0], a[a[0]], a[a[-1]], a[a[a[a[2]+1]]])

a) 5 5 5 5
b) 5 0 5 1
c) 5 4 1 4
d) Ninguna de las anteriores