s2Eva_IIT2014_T1 Multas por invadir carril metrovía

Propuesta de solución en Python:

# 2da Evaluación II Término 2014
# Tema 1. multa de metrovia
# Tarea: Calcular el total de multas a recaudar
import numpy

def multametrovia(veces,basico):
    pagar=0
    i=1
    while not(i>veces):
        if (i==1):
            pagar=basico+0.1*basico
        if (i>1):
            pagar=pagar+2*basico+0.1*basico
        i=i+1
    return(pagar)

# Tema 2. Programa para multas metrovia
# usa la funcion anterior
codigo=[]
# bloque de ingreso
n=int(input('cuantas infracciones: '))
i=0
while not(i>=n):
    placa=input('codigo: ')
    codigo.append(placa)
    i=i+1
# Marcar los únicos
unico=numpy.ones(n,dtype=int)
i=0
penultimo=n-1
while not(i>=penultimo):
    j=i+1
    while not(j>=n):
        if (codigo[i]==codigo[j]):
            unico[j]=0
        j=j+1
    i=i+1

# Copiar en nueva lista placas únicas
infractor=[]
i=0
while not(i>=n):
    if (unico[i]==1):
        infractor.append(codigo[i])
    i=i+1
# Contar los repetidos vector veces
m=len(infractor)
veces=numpy.zeros(m,dtype=int)
i=0
while not(i>=n):
    placa=codigo[i]
    # Busca en infractores
    j=0
    while not(j>=m):
        if (placa==infractor[j]):
            veces[j]=veces[j]+1
        j=j+1
    i=i+1
# multas
multas=numpy.zeros(m,dtype=float)
j=0
while not(j>=m):
    multas[j]=multametrovia(veces[j],354)
    j=j+1

# Tarea: total a recaudar por multas

# salida
print(unico)
print(infractor)
print('La lista de infractores y multas es:')
j=0
while not(j>=m):
    print(infractor[j],multas[j])
    j=j+1

s2Eva_IT2015_T2 Diccionario electrónico

Propuesta de solución en Python:

presentado el ejercicio iniciado en clases. Tiene tarea por desarrollar:

# 2da Evaluación I Término 2015
# Tema 1. funcion Kutipak
# diccionario de palabras usando listas
# Tarea: Desarrollar las opciones para archivos.

def kutipak(palabra, modo, diccionario):
    n = len(diccionario)
    traducido = '' 
    if (modo==1):
        # quichua a español
        encontre = 0
        donde = -1
        i = 0
        while not(i>=n or encontre ==1):
            if (palabra.lower() == diccionario[i][0]):
                traducido = diccionario[i][1]
                encontre = 1
                donde = i
            i = i+1
    # Tarea, desarrolle el modo 2
    
    return(traducido)

diccionario = [['man', 'al'],
               ['wasi', 'casa'],
               ['pak', 'del'],
               ['kuska', 'lugar'],
               ['pash','y'],
               ['iyayku', 'tecnología'],
               ['mañay', 'servicio'],
               ['mamallakta', 'país'],
               ['kutipak', 'traductor']]

# tema 2. PROGRAMA
opcion = -1
while not(opcion ==6):
    print('...')
    print('1. Traducir palabras')
    print('2. Traducir una frase')
    print('3. Añadir palabras al diccionario')
    print('4. Guardar archivo del diccionario')
    print('5. Abrir archivo del diccionario')
    print('6. Salir')
    
    opcion = int(input('  cual opcion: '))
##    while not(opcion>=1 and opcion<=6):
##        print(' *** revisar las opciones disponibles ***')
##        opcion = int(input('  cual opcion: '))

    if (opcion==1):
        print('==== 1. Traducir palabras')
        palabra = input('palabra a traducir: ')
        modo = int(input('(1) quichua-español, (2) español-quichua: '))
        traducida = kutipak(palabra, modo, diccionario)
        print('su significado: ', traducida)

    elif (opcion==2):
        print('==== 2. Traducir una frase')
        print('palabras separadas solo por espacios')
        frase = input('frase a traducir: ')
        modo = int(input('(1) quichua-español, (2) español-quichua: '))
        partes = frase.split(' ')
        m = len(partes)
        oracion = ''
        j = 0
        while not(j>=m):
            traducida = kutipak(partes[j], modo, diccionario)
            oracion = oracion + ' '+ traducida
            j = j+1
        print('traduccion de frase: ')
        print(oracion)

    elif (opcion==3):
        print('==== 3. Añadir palabras al diccionario')

    elif (opcion==4):
        print('==== 4. Guardar archivo del diccionario')

    elif (opcion==5):
        print('==== 5. Abrir archivo del diccionario')

    elif (opcion==6):
        print('==== Gracias por usar el software ====')
        print('==== usuario@espol.edu.ec ====')

    else:
        print(' *** revisar las opciones disponibles ***')

s2Eva_IT2015_T1 kutipak() quichua-español

Propuesta de solución en Python

# 2da Evaluación I Término 2015
# Tema 1. kutipak() quichua-español
# incluye usar el modo

# Usando diccionario[quichua][español]
diccionario = {'man':'al',
               'wasi':'casa',
               'pak':'del',
               'kuska':'lugar',
               'pash':'y',
               'iyayku':'tecnología',
               'mañay':'servicio',
               'mamallakta':'país',
               'kutipak ':'traductor'}

def kutipak(palabra, modo, diccionario):
    traducido = ''
    
    if (modo == 1):     
        if (palabra in diccionario)==1:
            traducido = diccionario[palabra]

    if (modo == 2):
        n = len(diccionario)
        encontre = ''
        for elemento in diccionario:
            if (palabra == diccionario[elemento]):
                encontre = elemento
        traducido = encontre

    return(traducido)

s2Eva_IT2015_T3 Distribuye tortugas en región

Propuesta de solución en Python:

# 2da Evaluación I Término 2015
# Tema 3. Distribuye tortugas en región
import numpy as np
import random as rnd

# Tarea: Verificar que total sea menor que capacidad de la isla
# si lo es, retorna matriz con -1 como isla sobrepoblada.

def distribuye(n,m,q,total):
    # Region de la isla 
    isla = np.zeros(shape=(n,m),dtype=int)
    tortuga = 1
    while not(tortuga>total):
        f = int(rnd.random()*n)+0
        c = int(rnd.random()*m)+0
        if (isla[f,c]<q):
            isla[f,c] = isla[f,c] +1
            tortuga = tortuga+1
    return(isla)

s2Eva_IT2015_T4 Movilidad de tortugas en región

Propuesta de solución en Python:

Nota: considera que si la tortuga sale de la matriz, ya no se la cuenta, desaparece, muere.

# 2da Evaluación I Término 2015
# Tema 3. Distribuye tortugas en región
import numpy as np
import random as rnd

def distribuye(n,m,q,total):
    isla = np.zeros(shape=(n,m),dtype = int)
    unatortuga = 1
    while not(unatortuga > total):
        fila = int(rnd.random()*n)+0
        columna = int(rnd.random()*m)+0
        if (isla[fila,columna]<q):
            isla[fila,columna] = isla[fila,columna] + 1
            unatortuga = unatortuga+1
    return(isla)

# TEMA 4. Simular movilidad de tortugas
# usar funciones para operaciones intermedias
def cuentaceros(isla):
    tamano = np.shape(isla)
    n = tamano[0]
    m = tamano[1]
    cuenta = 0
    for f in range(0,n,1):
        for c in range(0,m,1):
            if (isla[f,c] ==0):
                cuenta = cuenta +1
    return(cuenta)

def muevetortuga(isla):
    tamano = np.shape(isla)
    n = tamano[0]
    m = tamano[1]
    # crear una situacion posterior,
    # donde se mueve cada tortuga
    posterior = np.zeros(shape=(n,m),dtype = int)
    for f in range(0,n,1):
        for c in range(0,m,1):
            cuantas = isla[f,c]
            if (cuantas>=1):
                tortugas = 1
                while not(tortugas>cuantas):
                    # mueve una tortuga
                    mueve = int(rnd.random()*5)+0
                    if (mueve ==1):
                        # verifica limites, sino se pierde la tortuga
                        if ((f-1)>=0 and (c-1)>=0):
                            posterior[f-1,c-1] = posterior[f-1,c-1] +1
                    if (mueve ==2):
                        if ((f-1)>=0 and (c+1)<m):
                            posterior[f-1,c+1] = posterior[f-1,c+1] +1
                    if (mueve ==3):
                        if ((f+1)=0):
                            posterior[f+1,c-1] = posterior[f+1,c-1] +1
                    if (mueve ==4):
                        if ((f+1)<n and (c+1)<m):
                            posterior[f+1,c+1] = posterior[f+1,c+1] +1
                    tortugas = tortugas +1
    return(posterior)


# INGRESO
n = int(input('filas : '))
m = int(input('columnas : '))
q = int(input('maximo por casilla : '))
total = int(input('tortugas en cautiverio : '))
# Tarea: validar que total no exceda capacidad de isla

# PROCEDIMIENTO
inicial = distribuye(n,m,q,total)
inicialceros = cuentaceros(inicial)
posterior = muevetortuga(inicial)
perdidas = np.sum(inicial)- np.sum(posterior)

# SALIDA
print('isla al inicio: ')
print(inicial)
print('casillas vacias en inicial: ', inicialceros)
print('isla despues de un periodo: ')
print(posterior)
print('tortugas perdidas: ', perdidas)

ejemplo de ejecución

filas : 4
columnas : 6
maximo por casilla : 5
tortugas en cautiverio : 20
isla al inicio:
[[1 1 1 0 0 3]
 [0 2 1 2 0 1]
 [0 0 0 0 1 0]
 [2 2 3 0 0 0]]
casillas vacias en inicial:  12
isla despues de un periodo:
[[0 0 2 1 1 0]
 [0 0 0 0 0 0]
 [2 1 0 0 1 0]
 [0 0 0 1 0 0]]
tortugas perdidas:  11

s2Eva_IIT2013_T2 Secuencia ADN

Propuesta de solución en Python:

# 2da Evaluación II Término 2013
# Tema 2. Secuencia ADN
# propuesta: edelros@espol.edu.ec

def ordenados(cadena):
    validos='ACGT'
    pares=0
    cadena=cadena.upper()
    n=len(cadena)
    i=0
    while not(i>=(n-1)): # solo hasta penúltimo
        elemento=cadena[i]
        elemento2=cadena[i+1]
        if(elemento<=elemento2):
            pares=pares+1
        i=i+1
        
    #Validar elementos en cadena
    noADN=0
    i=0
    while not(i>=n):
        elemento=cadena[i]
        if not(elemento in validos):
            noADN=noADN-1
        i=i+1
    
    if (noADN<0): #Corrige de ser necesario
        pares=noADN
        
    return(pares)

Ejemplo

>>> cadena='CCGAATCGTA'
>>> ordenados(cadena)
6
>>> cadena='CBGAATCGWA'
>>> ordenados(cadena)
-2

s2Eva_IT2014_T2y3 Color RGB a gris

Propuesta de solución en Python:

# 2da Evaluación I Término 2014
# Tema 2 y 3. Color RGB a gris
# propuesta: edelros@espol.edu.ec

import numpy as np

def convertirgris(RGB):
    rojo=RGB[0]
    verde=RGB[1]
    azul=RGB[2]
    # Mezcla colores
    gris= 0.2989*rojo + 0.5870*verde + 0.1140*azul
    gris= int(gris)

    if (rojo>255 or verde>255 or azul>255):
        gris=-1
    # Tarea: verificar para colores <0
    
    return(gris)

# Tema 3. funcion y matriz
def fotoagris(imagen):
    color,n,m = np.shape(imagen)
    blanconegro=np.zeros(shape=(n,m),dtype=int)
    # por cada pixel
    fila=0
    while not(fila>=n):
        columna=0
        while not(columna>=m):
            rojo=imagen[0,fila,columna]
            verde=imagen[1,fila,columna]
            azul=imagen[2,fila,columna]
            # para convertir
            RGB=[rojo,verde,azul]
            gris=convertirgris(RGB)
            # poner el punto en gris
            blanconegro[fila,columna]=gris

            columna=columna+1
        fila=fila+1

    return(blanconegro)

Ejemplo de ejecución. Se proporciona la imagen como aun arreglo[color,fila,columna]
Puede copiar los valores de imagen y pegarlo en la linea de instruccion>>>
Luego invocar a la funcion fotoagris(imagen)

>>>imagen=np.array([[[12, 27, 42, 46, 74],
        [ 3, 21, 33, 48, 67],
        [ 5, 18,  0, 57, 73],
        [ 6, 25, 31, 52, 69],
        [13, 24, 40, 54, 64]],

       [[13, 26, 40, 46, 66],
        [15, 23, 45, 55, 62],
        [ 3, 22,  0, 48, 70],
        [ 6, 24, 39, 58, 68],
        [ 8, 29, 35, 56, 72]],

       [[ 5, 28, 37, 58, 64],
        [ 7, 24, 34, 48, 75],
        [ 9, 17,  0, 50, 62],
        [12, 30, 43, 56, 68],
        [ 4, 26, 45, 49, 74]]])
>>> fotoagris(imagen)
array([[11, 26, 40, 47, 68],
       [10, 22, 40, 52, 64],
       [ 4, 20,  0, 50, 69],
       [ 6, 24, 37, 55, 68],
       [ 9, 27, 37, 54, 69]])

 

s2Eva_IT2013_T1y2 tabla de bingo

Propuesta de solución en Python:

# 2da Evaluación I Término 2013
# Tema 1. Sorteo k elementos entre a y b
# propuesta: edelros@espol.edu.ec
import random
import numpy as np

def sorteoentre(k,a,b):
    suertudos=[]
    i=0
    while not(i>=k):
        sorteo=int(random.random()*(b-a+1))+a
        if not(sorteo in suertudos):
            suertudos.append(sorteo)
            i=i+1
    return(suertudos)

# Tema 2. Programa tabla de bingo
n=5
#Rango inicial de B [1,15]
a=1  
b=15
incremento=15
# PROCEDIMIENTO
tabla=np.zeros(shape=(n,n),dtype=int)
columna=0
while not(columna>=n):
    datos=sorteoentre(n,a,b)
    for fila in range(0,n,1):
        tabla[fila,columna]=datos[fila]
    a=a+incremento
    b=b+incremento
    columna=columna+1
    
# corrige el cero en la posicion central
mitad=n//2
tabla[2,2]=0

# SALIDA
print(tabla)

Ejemplo:

>>> ================================ RESTART ==========
>>> 
[[ 4 28 37 51 63]
 [15 18 45 56 74]
 [13 23  0 48 69]
 [ 2 20 34 58 72]
 [ 3 16 32 50 71]]
>>> ================================ RESTART ==========
>>> 
[[ 2 17 37 58 75]
 [13 24 45 53 65]
 [ 7 19  0 51 73]
 [15 23 36 52 69]
 [ 3 30 39 47 67]]
>>>

s2Eva_IT2014_T1 Palabras con eco

Propuesta de solución en Python:

>>> 
frase: coso oloroso
1
>>> 
frase: casa erwq
0
# 2da Evaluacion I Term 2014
# Tema 1. Palabras con eco
# TAREA: solo compara la ultima letra
#        completar para al menos tres letras

frase=input('frase: ')
eco=1
n=len(frase)
# ultima letra de la ultima palabra
a=frase[n-1]
# ultima letra de la penultima palabra
#Buscar letra en la otra palabra
b=''
i=n-1
while (i>0):
    if (frase[i]==' '):
        b=frase[i-1]
    i=i-1
# letras eco
if not(a==b):
    eco=0
# Completar para al menos las tres ultimas letras
# Salida
print(eco)

s2eva_iit2015_t3-playaton-limpieza-de-playas/

Propuesta de solución en Python: pyT2_pdf, pyT3_pdf

# 2da Evaluación II Término 2015
# Tema 2 y 3. Playaton
# propuesta de repaso: edelros@espol.edu.ec

import numpy

# Tema 2
def totalportipo(tabla):
    n,k =tabla.shape  # Tamaño de tabla con codigoplaya,recolectado
    
    # verifica banderas repetido cambiando a 1
    repetidos=numpy.zeros(n,dtype=int)
    i=0
    while not(i>=(n-1)):
        j=i+1
        while not(j>=n):
            if (tabla[i,0]==tabla[j,0]):
                repetidos[j]=1
            j=j+1
        i=i+1
    
    #cuenta los que se eliminan para ver los m que son únicos
    eliminar=0
    fila=0
    while not(fila>=n):
        eliminar=eliminar+repetidos[fila]
        fila=fila+1
    m=n-eliminar

    # copiar codigos unicos en tabulado columna 0
    tabulado=numpy.zeros(shape=(m,3), dtype=float)
    fila=0
    j=0
    while not(fila>=n):
        if (repetidos[fila]==0):
            tabulado[j,0]=tabla[fila,0]
            j=j+1
        fila=fila+1

    # Cuenta voluntarios por playa en tabulado columna 1
    # Acumula recolectado por playa en tabulado columna 2
    fila=0
    while not(fila>=n):
        cual=tabla[fila,0]
        # encuentra el índice en donde
        donde=numpy.where(tabulado[:,0]==cual) 
        tabulado[donde,1]=tabulado[donde,1]+1
        tabulado[donde,2]=tabulado[donde,2]+tabla[fila,1]
        fila=fila+1

    # acumula lo recolectado por playa
    return(tabulado)


# Tema 3
voluntarios=[]
opcion=0
while not(opcion==7):
    print('1. registrar voluntario')
    print('2. registrar cantidad recolectada (Kg) por voluntario')
    print('3. conteo de voluntarios')
    print('4. tabular recolectado')
    print('5. Guardar archivo')
    print('6. Abrir archivo')
    print('7. Salir')
    opcion=int(input(' opcion:'))
    
    if (opcion==1):
        print('-- registrar voluntario --')
        ced=int(input('cédula: '))
        nom=input('nombre: ')
        pla=int(input('codigo playa: '))
        rec=0
        registro={'cedula':ced,
                  'nombre': nom,
                  'playa':pla,
                  'recolectado':rec}
        voluntarios.append(registro)
        print('gracias por participar')

    if (opcion==2):
        print('-- registrar cantidad recolectada por voluntario (Kg) --')
        ced=int(input('cédula: '))
        rec=float(input('recolectado: '))
        # buscar voluntario, Podría buscar con index en la lista
        encontre=-1
        n=len(voluntarios)
        fila=0
        while not(encontre>=0 or fila>=n):
            if (voluntarios[fila]['cedula']==ced):
                encontre=fila
            fila=fila+1
        if (encontre>=0):
            voluntarios[encontre]['recolectado']=rec
            print('recolectado:',rec)
        else:
            print('no esta registrado este voluntario')

    if (opcion==3):
        print('--- cuenta voluntarios ---')
        n=len(voluntarios)
        # extraer columnas codigoplaya y recoletado
        tabla=numpy.zeros(shape=(n,2),dtype=float)
        fila=0
        while not(fila>=n):
          tabla[fila][0]=voluntarios[fila]['playa']
          tabla[fila][1]=voluntarios[fila]['recolectado']
          fila=fila+1
        resultado=totalportipo(tabla)

        print('los voluntarios presentados son:',n)
        print(resultado)

    if (opcion==4):
        print('-- tabular recolectado --')
        n=len(voluntarios)
        # extraer vector codigos playas
        tabla=numpy.zeros(shape=(n,2),dtype=float)
        fila=0
        while not(fila>=n):
          tabla[fila][0]=voluntarios[fila]['playa']
          tabla[fila][1]=voluntarios[fila]['recolectado']
          fila=fila+1
        resultado=totalportipo(tabla)

        #total recolectado
        m,k = resultado.shape
        total=0
        i=0
        while not(i>=m):
            total=total+resultado[i,2]
            i=i+1
        print('El total recolectado es:',total)
        print('El total por playa es: ')
        print(resultado)

    if (opcion==5):
        print('---- guardar el archivo de voluntarios ---')
        # prepara el modo escritura(write 'w') de archivo
        archivo=open('voluntarios.txt','w')
        n=len(voluntarios)
        fila=0
        while not(fila>=n):
            # Crea la linea de texto de los datos para un registro, separada por comas
            registro= str(voluntarios[fila]['cedula'])+','+ voluntarios[fila]['nombre'] +','+str(voluntarios[fila]['playa']) +','+str(voluntarios[fila]['recolectado']) +'\n'
            # Escribe en el archivo
            archivo.write(registro)
            fila=fila+1
        archivo.close()     # Cierra el archivo    
        print('archivo guardado...')

    if (opcion==6):
        print(' --- Abrir archivo de voluntarios---')
        voluntarios=[]
        # prepara el modo lectura(read 'r') de archivo
        archivo=open('voluntarios.txt','r')
        linea=archivo.readline()
        
        while (linea!=''):  #Hasta encontrar el final del archivo
            datos=linea.split(',')  # Divide los datos por comas
            ced=int(datos[0])
            nom=datos[1]
            pla=int(datos[2])
            rec=float(datos[3])
            # crea el registro en forma de diccionario para la lista
            registro={'cedula':ced,
                  'nombre': nom,
                  'playa':pla,
                  'recolectado':rec}
            voluntarios.append(registro)
            # Lee la siguiente linea
            linea=archivo.readline()
        archivo.close()         # Cierra el archivo    
        n=len(voluntarios)
        print(' Se recuperaron '+ str(n) + ' registros de voluntarios')
        
    if (opcion==7):
        print(' gracias por usar el software, @copyritghs')