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

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
>>> 

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)

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')

s1Eva_IT2016_T2 historial de visitas web

Ejercicio: 1Eva_IT2016_T2 historial de visitas web

literal a. Se obtiene un registro de los sitios visitados, para luego separar sus partes entre empleado|sitio|duracion.

Para los sitios que no son de trabajo se usa una lista llamada ocio. Si el sitio visitado no se encuentra en trabajo, se añade a la lista ocio. Se considera revisar que la lista no tenga elementos repetidos

# a) sitios que no son de trabajo
ocio = []
n = len(visitados)
i = 0
while not(i>=n):
    registro = visitados[i]
    partes = registro.split('|')
    sitio  = partes[1]
    if not(sitio in trabajo):
        if not(sitio in ocio):
            ocio.append(sitio)
    i = i + 1

literal b. Par contabilizar el tiempo por empleado se acumula en una lista los tiempos de navegación, usando la posición del empleado en la lista obtenida con la instrucción empleados.index(quien)

# b) tiempo de internet/empleado
m = len(empleados)
tiempo = np.zeros(m,dtype=int)

n = len(visitados)
i = 0
while not(i>=n):
    registro = visitados[i]
    partes = registro.split('|')
    quien  = partes[0]
    indice = empleados.index(quien)
    cuanto = int(partes[2])
    tiempo[indice] = tiempo[indice] + cuanto
    i = i + 1

Se procede de forma semejante para obtener una tabla de tiempos por sitio.

Una respuesta que se pude obtener de la tabla anterior es la búsqueda del empleado más ocioso, el que ha usado más tiempo en sitios de ocio. (tema 3, literal f)


Algoritmo en Python

# CCPG1001 Fundamentos de Programación FIEC-ESPOL
# 1Eva_IT2016_T2 historial de visitas web
import numpy as np

# INGRESO
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',]
empleados = ['maria2',
             'jose15',
             'xavi7']
trabajo = ['www.espol.edu.ec',
           'www.inec.gob.ec',
           'www.sri.gob.ec']

# PROCEDIMIENTO

# a) sitios que no son de trabajo
ocio = []
n = len(visitados)
i = 0
while not(i>=n):
    registro = visitados[i]
    partes = registro.split('|')
    sitio  = partes[1]
    if not(sitio in trabajo):
        if not(sitio in ocio):
            ocio.append(sitio)
    i = i + 1

# b) tiempo de internet/empleado
m = len(empleados)
tiempo = np.zeros(m,dtype=int)

n = len(visitados)
i = 0
while not(i>=n):
    registro = visitados[i]
    partes = registro.split('|')
    quien  = partes[0]
    indice = empleados.index(quien)
    cuanto = int(partes[2])
    tiempo[indice] = tiempo[indice] + cuanto
    i = i + 1

# b) tiempo de internet por empleado/sitio. matrices
k = len(visitados)
n = len(empleados)
todositio = trabajo + ocio
m = len(todositio)
tabla = np.zeros(shape=(n,m), dtype=int)

i = 0
while not(i>=k):
    registro = visitados[i]
    partes = registro.split('|')
    quien  = partes[0]
    fila   = empleados.index(quien)
    donde  = partes[1]
    columna = todositio.index(donde)
    cuanto = int(partes[2])
    tabla[fila,columna] = tabla[fila,columna] + cuanto
    i = i+1

# Tema 3. f)
# empleado es mas ocioso
parte = tabla[:,len(trabajo):]
ocioempleado = np.sum(parte, axis =1)
masocioso = np.argmax(ocioempleado)
quien = empleados[masocioso]

# SALIDA
print('sitios de ocio: ')
print(ocio)
print('tiempos por empleado: ')
print(tiempo)
print('tabla de tiempos: ')
print(tabla)
print('empleado mas ocioso: ', quien) 

resultado del algoritmo

sitios de ocio: 
['www.facebook.com', 'www.eluniverso.com', 'www.twitter.com']
tiempos por empleado: 
[260 150  80]
tabla de tiempos: 
[[ 50   0   0 160   0  50]
 [  0   0 150   0   0   0]
 [  0  10  20   0  50   0]]
empleado mas ocioso:  maria2
>>> 

S3Eva_IT2016_T2 sensar cultivos con dron

Ejercicio: 3Eva_IT2016_T2 sensar cultivos con dron

Propuesta de solución en Python:

# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# 3Eva_IT2016_T2 sensar cultivos con dron
import numpy as np
import random as rnd

def  sensarCultivos(posicion):
    # Solo para generar una matriz que
    # permita trabajar con el programa
    valor = int(rnd.random()*10+1)
    return(valor)

def generarplantacion(dimension):
    n = dimension[0]
    m = dimension[1]
    plantacion = np.zeros(shape=(n,m),dtype=int)
    i = 0
    while not(i>=n):
        j = 0
        while not(j>=m):
            posicion = [i,j]
            valor = sensarCultivos(posicion)
            plantacion[i,j] = valor
            j = j + 1
        i = i + 1
    return(plantacion)

# usa matriz densidad de 1 y 0 para facilitar 
# el cálculo del literal c
def analizarDensidad(plantacion, limite):
    tamano = np.shape(plantacion)
    n = tamano[0]
    m = tamano[1]
    densidad  = np.zeros(shape=(n,m),dtype=int)
    resultado = []
    i = 0
    while not(i>=n):
        fila = []
        j = 0
        while not(j>=m):
            if (plantacion[i,j]>=limite):
                densidad[i,j]=1
                fila.append('ALTO')
            else:
                fila.append('Bajo')
            j = j + 1
        resultado.append(fila)
        i = i + 1
    
    return(densidad)

def reporteCrecimento(plantacion,densidad):
    tamano = np.shape(plantacion)
    n = tamano[0]
    m = tamano[1]
    casillas = n*m
    
    sumaALTO = 0
    sumaBAJO = 0
    i = 0
    while not(i>=n):
        j = 0
        while not(j>=m):
            valor = plantacion[i,j]
            if (densidad[i,j]==1):
                sumaALTO = sumaALTO + valor
            else:
                sumaBAJO = sumaBAJO + valor
            j = j + 1
        i = i + 1
    prmALTO  = sumaALTO/(np.sum(densidad))
    prmBAJO  = sumaBAJO/(n*m-np.sum(densidad))
    promedio = [prmALTO,prmBAJO]
    return(promedio)

crear un archivo de funciones para importar si las funciones se crean en otro archivo.

# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
import dronescultivos as dron

# PROGRAMA
# INGRESO , usa datos aleatorios como prueba
dimension = (3,4)
plantacion = dron.generarplantacion(dimension)

#PROCEDIMIENTO
limite = 4
densidad = dron.analizarDensidad(plantacion, limite)
reporte  = dron.reporteCrecimento(plantacion,densidad)

#SALIDA
print(plantacion)
print(densidad)
print(reporte)

s2Eva_IIT2016_T1 Multas de Transito por sector

Ejercicio: 2Eva_IIT2016_T1 Multas de Transito por sector

Propuesta de solución en Python:

# CCPG1001-Fundamentos de programación
# 2Eva_IIT2016_T1 Multas de Transito por sector
import numpy as np

def generaMatriz(listamultas,sectores):
    n = len(sectores)
    unafila = sectores[0]
    
    m = len(unafila)
    matriz = np.zeros(shape=(n,m),dtype=float)

    k = len(listamultas)
    i = 0
    while not(i>=k):
        f = listamultas[i][0]
        c = listamultas[i][1]
        valor = listamultas[i][2]
        matriz[f,c] = matriz[f,c] + valor
        i = i+1
    return(matriz)

def sectorTop(matriz):
    
    # TAREA: Realizar para este y oeste
    tamano = np.shape(matriz)
    n = tamano[0]
    m = tamano[1]
    norte = matriz[0,:]
    sur = matriz[n-1,:]
    centro = matriz[1:3,2]

    rnorte  = np.sum(norte)
    rsur    = np.sum(sur)
    rcentro = np.sum(centro)
    
    suma = [rnorte,rsur,rcentro]
    referencia = ['norte','sur','centro']
    
    cual   = np.argmax(suma)
    nombre = referencia[cual]
    valor  = suma[cual]
    respuesta = [nombre,valor]

    return(respuesta)


# PROGRAMA
# INGRESO
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']]

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

# PROCEDIMIENTO
recaudar = generaMatriz(listamultas,sectores)

# SALIDA
print(sectores)
print(listamultas)
print('Hay que recaudar:')
print(recaudar)

Resultado del algoritmo

[['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']]
[(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)]
Hay que recaudar:
[[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.]]
>>>