s3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20

Ejercicio: 3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20

Propuesta de solución en Python, se usa un archivo de prueba: br-ur.csv

# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# 3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20

def actualizaDiccionario(nomArchivo,dic):
    paises  = list(dic.keys())
    archivo = open(nomArchivo,'r')
    encabezado = archivo.readline()
    linea   = archivo.readline()
    while not(linea==''):
        linea   = linea.strip('\n')
        partes  = linea.split(',')
        pais    = partes[0]
        jugador = partes[1]
        if not(pais in paises):
            dic[pais]={jugador:{'TA':int(partes[2]),
                                'TR':int(partes[3]),
                                'Goles':int(partes[4]),
                                'Minutos':int(partes[5]),
                                'KM':float(partes[6])
                                  }
                       }
        else:
            jugadores = list(dic[pais].keys())
            if not(jugador in jugadores):
                dic[pais][jugador] = {'TA':int(partes[2]),
                                      'TR':int(partes[3]),
                                      'Goles':int(partes[4]),
                                      'Minutos':int(partes[5]),
                                      'KM':float(partes[6])
                                      }
            else:
                dic[pais][jugador]['TA']    = dic[pais][jugador]['TA'] + int(partes[2])
                dic[pais][jugador]['TR']    = dic[pais][jugador]['TR'] + int(partes[3])
                dic[pais][jugador]['Goles'] = dic[pais][jugador]['Goles'] + int(partes[4])
                dic[pais][jugador]['Minutos'] = dic[pais][jugador]['Minutos'] + int(partes[5]),
                dic[pais][jugador]['KM']    = dic[pais][jugador]['KM'] + float(partes[5])
        linea = archivo.readline()
    archivo.close()
    return(dic)

def buenDeportista(jugador,dic):
    cumple = 0
    paises = list(dic.keys())
    for pais in paises:
        jugadores = list(dic[pais].keys())
        if jugador in jugadores:
            tarjetas = dic[pais][jugador]['TA'] + dic[pais][jugador]['TR']
            transcurrido = dic[pais][jugador]['Minutos']
            registro = tarjetas/transcurrido
            if registro<(2/270):
                cumple=1
    return(cumple)

def jugadorAtleta(jugador,dic):
    cumple = 0
    paises = list(dic.keys())
    for pais in paises:
        jugadores = list(dic[pais].keys())
        total = 0
        for jugador in jugadores:
            total = total + dic[pais][jugador]['KM']
        promedio = total/len(jugadores)
        if jugador in jugadores:
            if dic[pais][jugador]['KM']>=promedio and dic[pais][jugador]['Goles']>=1:
                cumple = 1
    return(cumple)

def paisBuenasPraticas(pais,dic):
    cumple = 0
    paises = list(dic.keys())
    if pais in paises:
        jugadores = list(dic[pais].keys())
        k = len(jugadores)
        cuenta = 0
        for jugador in jugadores:
            cuenta = cuenta + buenDeportista(jugador, dic)
        if (k==cuenta):
            cumple = 1
    return(cumple)

# PROGRAMA -----------------------
# INGRESO
L = ['br-ur.csv'] #,'ec-vn.csv']

# PROCEDIMIENTO
dic = {}
n = len(L)
i = 0
while not(i>=n):
    nomArchivo = L[i]
    actualizaDiccionario(nomArchivo,dic)
    i = i + 1

paises = list(dic.keys())
resultados = []
jugadoresatletas = []
for pais in paises:
    jugadores = list(dic[pais].keys())
    k = len(jugadores)
    cuenta = 0
    goles = 0
    recorrido = 0
    
    for jugador in jugadores:
        cuenta = cuenta + jugadorAtleta(jugador,dic)
        goles = goles + dic[pais][jugador]['Goles']
        recorrido = recorrido + dic[pais][jugador]['KM']
        goleskm = goles/recorrido

        if jugadorAtleta(jugador,dic)==1:
            jugadoresatletas.append([jugador,pais])

    porcentaje = cuenta/k
    nominado = paisBuenasPraticas(pais,dic)
    resultados.append([pais,porcentaje,goleskm,nominado])

# SALIDA
print('pais,porcentaje,goleskm,nominado')
print(resultados)
print('jugadores atletas')
print(jugadoresatletas)

s3Eva_IIT2018_T1 texto aleatorio

Ejercicio: 3Eva_IIT2018_T1 texto aleatorio

Propuesta de solución en Python:
<Ejemplo:

El texto generado es: 
Hola Hola.
Hola amigo-amiga Hola que-
>>> 
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# 3Eva_IIT2018_T1 texto aleatorio

import random as rnd

# INGRESO
n = 10 # enunciado con 73
T = ['Hola','.','que','tal','-',',','amigo','amiga']

# PROCEDIMIENTO
k = len(T)
texto   = ''
simbolo = ',.-'
antes   = 0
cuenta  = 0
while not(cuenta>=n):
    aleatorio = int(rnd.random()*k)+0
    untermino =  T[aleatorio]
    espalabra = not(untermino in simbolo)
    if cuenta == 0 and espalabra==1:
        texto  = texto + untermino
        cuenta = cuenta + 1
        antes  = espalabra
    if cuenta >0:
        if espalabra == 1:
            if antes == 1:
                texto = texto + ' '+ untermino
            if antes == 0:
                texto = texto + untermino
            antes  = 1
            cuenta = cuenta+1
        if espalabra==0 and antes==1:
            if untermino==',':
                texto = texto + ', '
            if untermino=='.':
                texto = texto + '.\n'
            if untermino=='-':
                texto = texto +'-'
            antes = 0
            cuenta = cuenta+1
        # if espalabra==0 and antes ==0:
        #     print('no se pueden juntar simbolos')

# SALIDA
print('El texto generado es: ')
print(texto)

# Archivo
archivo = open('literatura.txt','w')
archivo.write(texto)
archivo.close()

s2Eva_IIT2018_T4 Hielo y especies en Ártico-programa

Ejercicio: 2Eva_IIT2018_T4 Hielo y especies en Ártico-programa

Finalmente, se crea el programa que usa las funciones anteriores:

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T4 Hielo y especies en Ártico-programa

# ----- NUMERAL 1 y 6----- 
matrices = crearMatriz(narchivo)
mhielo09 = matrices[0]
mhielo19 = matrices[1]
manimales09 = matrices[2]
manimales19 = matrices[3]

# ----- NUMERAL 7-----
especies19 = np.unique(manimales19)
k = len(especies19)
comunes = []
for i in range(0,k,1):
    animal = especies19[i]
    Q = cuadrantes(manimales09)
    animal124 = np.concatenate([Q[0],Q[1],Q[3]]) 
    if (animal in animal124) and not(animal in Q[2]):
        comunes.append(animal)
        
# ----- NUMERAL 8-----
migra3 = migracionEspecie(manimales09, manimales19,3)
migro3 = 0
if (migra3[0]!=migra3[1]):
    migro3 =1
# ----- NUMERAL 9-----
# TAREA

# SALIDA
print(' ----- NUMERAL 1 y 6 ----- ')
print('hielo 2009')
print(mhielo09)
print('hielo 2019')
print(mhielo19)
print('animales 2009')
print(manimales09)
print('animales 2019')
print(manimales19)

print(' ----- NUMERAL 7 ----- ')
print('animales comunes: ')
print(comunes)

print(' ----- NUMERAL 8 ----- ')
print('migracion de 3:')
print(migra3)
print('migracion: ',migro3)

print(' ----- NUMERAL 9 ----- ')
print('Tarea...')

s2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario

Ejercicio2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario

}continuación de los temas anteriores:

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario

# ----- NUMERAL 5 -----
def crearDiccionario(mHielo, mAnimales, dicEspecies):
    densidad = densidadHielo(mHielo)
    k = len(densidad)
    tablad = {}
    for i in range(0,k,1):
        indice = 'Q'+str(i+1)
        tablad[indice] = densidad[i]

    especies = list(dicEspecies.keys())
    ke = len(especies)
    tablae = {}
    for j in range(0,ke,1):
        animal = especies[j]
        conteo = poblacionEspecie(mAnimales, animal)
        tablae[animal] = np.sum(conteo)
    
    tabla={}
    tabla['densidad hielo'] = tablad
    tabla['Especies'] = tablae
    return(tabla)

para probar con el computador, se usa el diccionario y los resultados anteriores:

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario

# ----- NUMERAL 5 -----
dicEspecies = {0:'No hay animal',
               1:'Lobo ártico',
               2:'Oso Polar',
               3:'Reno',
               4:'Foca',
               5:'...',
               7:'a7',
               9:'a9',
               22:'a22'}
datosdic = crearDiccionario(mhielo09,
                            manimales09,
                            dicEspecies)

#------------------------------------
print(' ----- NUMERAL 5 ----- ')
print('diccionario para año 2009')
print(datosdic)

con lo que los resultados son:

 ----- NUMERAL 5 ----- 
diccionario para año 2009
{'densidad hielo': {'Q1': 0.5,
                    'Q2': 0.6666666666666666,
                    'Q3': 0.8333333333333334,
                    'Q4': 0.5},
 'Especies': {0: 1,
              1: 7,
              2: 3,
              3: 2,
              4: 6,
              5: 2,
              7: 1,
              9: 1,
              22: 1}
 }

s2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar

Ejercicio2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar

Se añade las instrucciones al tema anterior,

Se incluyen las funciones que se asume como existentes para prueba de programa. En caso de problemas o dudas con el conteo, elaborar una función contar.

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
import numpy as np

# ----- NUMERAL 2 ----- 
# Funciones que suponen que existen:
def cuadrantes(matriz):
    tamano = np.shape(matriz)
    n = tamano[0]
    m = tamano[1]
    mitadfila = n//2
    mitadcolumna = m//2
    Q1 = matriz[0:mitadfila,0:mitadcolumna]
    Q2 = matriz[0:mitadfila,mitadcolumna:]
    Q3 = matriz[mitadfila:,0:mitadcolumna]
    Q4 = matriz[mitadfila:,mitadcolumna:]
    Q = np.array([Q1,Q2,Q3,Q4])
    return(Q)

def poblacionEspecie(mAnimales, especie):
    Q = cuadrantes(mAnimales)
    # pQ1 = np.count_nonzero(Q[0],especie)
    # np.count_nonzero no hay en funciones referencia
    # no en cheatsheet “Cheat Sheet”
    # se procede con algoritmo básico
    k = len(Q)
    poblacion = np.zeros(k,dtype=int)
    for i in range(0,k,1):
        unaQ = Q[i]
        tamano = np.shape(unaQ)
        n = tamano[0]
        m = tamano[1]
        for f in range(0,n,1):
            for c in range(0,m,1):
                if (unaQ[f,c] == especie):
                    poblacion[i] = poblacion[i] +1
    return(poblacion)

# otra forma es usar una funcion contar en arreglo
def contarenarreglo(arreglo,cual):
    tamano = np.shape(arreglo)
    n = tamano[0]
    m = tamano[1]
    contar = 0
    for f in range(0,n,1):
        for c in range(0,m,1):
            if (arreglo[f,c] == cual):
                contar = contar+1
    return(contar)



Desarrollo del numeral 2:

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
import numpy as np

# funcion numeral 2
def densidadHielo(mHielo):
    Q = cuadrantes(mHielo)
    k = len(Q)
    densidad = np.zeros(k,dtype=float)
    for i in range(0,k,1):
        unaQ = Q[i]
        tamano = np.shape(unaQ)
        n = tamano[0]
        m = tamano[1]
        densidad[i]=np.sum(unaQ)/(n*m)
    return(densidad)

desarrollo del numeral 3:

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
import numpy as np

# ----- NUMERAL 3 -----
def especieDominante(mAnimales):
    especies = np.unique(mAnimales)
    ke = len(especies)
    
    Q = cuadrantes(mAnimales)
    k = len(Q)
    dominante = np.zeros(k,dtype=int)
    for i in range(0,k,1):
        unaQ = Q[i]
        cuantos = np.zeros(ke,dtype=int)
        for j in range(0,ke,1):
            # solución semejante al NUMERAL 2
            # para poblacionEspecie
            animal = especies[j]
            cuantos[j] = contarenarreglo(unaQ,animal)
        mayoria = np.argmax(cuantos)
        dominante[i]= especies[mayoria]
    return(dominante)

desarrollo del numeral 4

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
import numpy as np

# ----- NUMERAL 4 -----
def migracionEspecie(mAnimales2009, mAnimales2019, especie):
    Q = cuadrantes(mAnimales2009)
    k = len(Q)
    cuantos = np.zeros(k,dtype=int)
    for i in range(0,k,1):
        unaQ = Q[i]
        cuantos[i] = contarenarreglo(unaQ,especie)
    mayoria09 = np.argmax(cuantos)

    Q = cuadrantes(mAnimales2019)
    k = len(Q)
    cuantos = np.zeros(k,dtype=int)
    for i in range(0,k,1):
        unaQ = Q[i]
        cuantos[i] = contarenarreglo(unaQ,especie)
    mayoria19 = np.argmax(cuantos)
    
    # considere numeración desde 0
    a = 'Q'+str(mayoria09+1)
    b = 'Q'+str(mayoria19+1)
    migraron =[a,b]
    return(migraron)


Programa de prueba, incluye las partes del tema anterior

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
import numpy as np

# PROGRAMA DE PRUEBA
# INGRESO
narchivo = 'artico2009-2019.txt'
especie = 4

# PROCEDIMIENTO

# ----- NUMERAL 1 ----- 
matrices = crearMatriz(narchivo)
mhielo09 = matrices[0]
mhielo19 = matrices[1]
manimales09 = matrices[2]
manimales19 = matrices[3]

# ----- NUMERAL 2 ----- 
Q = cuadrantes(manimales09)
poblacion = poblacionEspecie(manimales09, especie)
densidad = densidadHielo(mhielo09)

# ----- NUMERAL 3 -----
dominante = especieDominante(manimales09)

# ----- NUMERAL 4 -----
migraron = migracionEspecie(manimales09, manimales19, especie)


# SALIDA
print(' ----- NUMERAL 1 ----- ')
print('hielo 2009')
print(mhielo09)
print('hielo 2019')
print(mhielo19)
print('animales 2009')
print(manimales09)
print('animales 2019')
print(manimales19)

print(' ----- NUMERAL 2 ----- ')
print('cuadrantes de manimales09')
print(Q)
print('población por cuadrantes de manimales09')
print('para especie = 4')
print(poblacion)
print('densidad de hielo para mhielo09')
print(densidad)

print(' ----- NUMERAL 3 ----- ')
print('dominantes en manimales09')
print(dominante)
print(' ----- NUMERAL 4 ----- ')
print('migraron de la especie: ',especie)
print(migraron)

Los resultados obtenidos son:

animales 2009
[[ 1  2  4  4]
 [ 2  5  5  3]
 [ 1  3  9  1]
 [ 1  1  4  2]
 [ 4 22  4  7]
 [ 1  1  4  0]]

 ----- NUMERAL 2 ----- 
cuadrantes de manimales09
[[[ 1  2]
  [ 2  5]
  [ 1  3]]

 [[ 4  4]
  [ 5  3]
  [ 9  1]]

 [[ 1  1]
  [ 4 22]
  [ 1  1]]

 [[ 4  2]
  [ 4  7]
  [ 4  0]]]
población por cuadrantes de manimales09
para especie = 4
[0 2 1 3]
densidad de hielo para mhielo09
[0.5        0.66666667 0.83333333 0.5       ]
 ----- NUMERAL 3 ----- 
dominantes en manimales09
[1 4 1 4]
 ----- NUMERAL 4 ----- 
migraron de la especie:  4
['Q4', 'Q2']

s2Eva_IIT2018_T1 Hielo y especies en Ártico-Archivo

Ejercicio: 2Eva_IIT2018_T1 Hielo y especies en Ártico-Archivo

Usando el archivo proporcionado en el ejemplo: ‘artico2009-2019.txt

se crea la función y programa de prueba con las instrucciones más básicas y simples:

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T1 Hielo y especies en Ártico-Archivo

# ----- NUMERAL 1 ----- 
def crearMatriz(narchivo):
    archivo = open(narchivo,'r')
    
    # dimensiones de matriz
    linea = archivo.readline()
    n = int(linea.strip('\n'))
    linea = archivo.readline()
    m = int(linea.strip('\n'))
    # se crean las matrices
    mhielo09 = np.zeros(shape=(n,m),dtype=int)
    mhielo19 = np.zeros(shape=(n,m),dtype=int)
    manimales09 = np.zeros(shape=(n,m),dtype=int)
    manimales19 = np.zeros(shape=(n,m),dtype=int)
    
    # linea encabezados, No procesada
    linea = archivo.readline()
    
    # linea datos
    linea = archivo.readline()
    while not(linea==''):
        linea = linea.strip('\n')
        partes = linea.split(',')
        anio    =  partes[0]
        fila    = int(partes[1])
        columna = int(partes[2])
        hielo   = int(partes[3])
        animal  = int(partes[4])
        if (anio =='2009'):
            mhielo09[fila,columna] = hielo
            manimales09[fila,columna] = animal
        if (anio =='2019'):
            mhielo19[fila,columna] = hielo
            manimales19[fila,columna] = animal
        linea = archivo.readline()
    archivo.close()
    matrices = [mhielo09,
                mhielo19,
                manimales09,
                manimales19]
    return(matrices)

# PROGRAMA DE PRUEBA
# INGRESO
narchivo = 'artico2009-2019.txt'

# PROCEDIMIENTO
# ----- NUMERAL 1 ----- 
matrices = crearMatriz(narchivo)
mhielo09 = matrices[0]
mhielo19 = matrices[1]
manimales09 = matrices[2]
manimales19 = matrices[3]

# SALIDA
print(' ----- NUMERAL 1 ----- ')
print('hielo 2009')
print(mhielo09)
print('hielo 2019')
print(mhielo19)
print('animales 2009')
print(manimales09)
print('animales 2019')
print(manimales19)

para obtener:

 ----- NUMERAL 1 ----- 
hielo 2009
[[1 0 0 1]
 [0 1 1 1]
 [1 0 1 0]
 [1 1 1 0]
 [0 1 0 1]
 [1 1 1 0]]
hielo 2019
[[1 0 0 1]
 [0 1 0 1]
 [1 0 1 0]
 [1 0 1 0]
 [0 1 0 1]
 [0 0 1 0]]
animales 2009
[[ 1  2  4  4]
 [ 2  5  5  3]
 [ 1  3  9  1]
 [ 1  1  4  2]
 [ 4 22  4  7]
 [ 1  1  4  0]]
animales 2019
[[ 3  2  4  1]
 [ 0 11  3  5]
 [ 1  0 67  1]
 [ 2 22  3  2]
 [13 13  2  3]
 [ 3  0  1  0]]

s1Eva_IIT2018_T3 Compras ‘Black Friday’

Ejercicio: 1Eva_IIT2018_T3 Compras ‘Black Friday’

propuesta de solución, contiene tarea.

# CCPG1001 Fundamentos de Programación FIEC-ESPOL
# 1Eva_IIT2018_T3 Compras ‘Black Friday’
# Tarea: descuentosPorSección
import random as rnd
import numpy as np

def calcularPrecio(unacompra,Codigo,Precio,Descuento):
    unprecio = 0
    if (unacompra in Codigo):
        donde = Codigo.index(unacompra)
        valor = Precio[donde]
        unprecio = valor - Descuento[donde]*valor/100
    return(unprecio)

def calcularTotal(compras,Codigo,Precio,Descuento):
    m = len(compras)
    totalpagar = 0
    i = 0
    while not(i>=m):
        unacompra = compras[i]
        unprecio = calcularPrecio(unacompra, Codigo,
                                  Precio, Descuento)
        totalpagar = totalpagar + unprecio
        i = i + 1
    return(totalpagar)

def hallarSecciones(compras,Codigo,Seccion):
    m = len(compras)
    visitar = []
    i = 0
    while not(i>=m):
        unacompra = compras[i]
        donde = Codigo.index(unacompra)
        unaseccion = Seccion[donde]
        if not(unaseccion in visitar):
            visitar.append(unaseccion)
        i = i + 1
    return(visitar)

def descuentosPorSección(Descuento,Seccion):
    remate = []
    # Tarea: Desarrollar
    return(remate)
    
# INGRESO
unacompra = input('codigo de una compra: ')

# Tarea: ingresar varias compras
compras = ['SKU-5675', 'PSS-4542']
Codigo  = ['CTR-2424', 'SKU-5675', 'PSS-4542']
Precio  = [ 56.65, 32.00, 22.22]
Descuento = [0, 50, 10]
Seccion = ['Ropa Niños', 'Juguetes', 'Hombre']

# PROCEDIMIENTO
unprecio   = calcularPrecio(unacompra, Codigo,
                            Precio,Descuento)
totalpagar = calcularTotal(compras, Codigo,
                           Precio,Descuento)
visitar = hallarSecciones(compras,Codigo, Seccion)
remate  = descuentosPorSección(Descuento, Seccion)

# SALIDA
print('El precio de : ',unacompra)
print(unprecio)
print('total a pagar de lista de compras: ', totalpagar)
print('tiendas a visitar: ',visitar)
print('remate de productos por seccion: ',remate)

resultado del algoritmo

codigo de una compra: CTR-2424
El precio de :  CTR-2424
56.65
total a pagar de lista de compras:  35.998
tiendas a visitar:  ['Juguetes', 'Hombre']
remate de productos por seccion:  []
>>> 

s1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)

Ejercicio: 1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)

Propuesta de solución al ejercicio.

Estado del juego:  F***
 adivine una letra: C
 Adivinaste...C

Estado del juego:  FC**
turno: 1
fallas:  0
 adivine una letra: M
 Adivinaste...M

Estado del juego:  FC*M
turno: 2
fallas:  0
 adivine una letra: A
 NO es una letra de palabra...

Estado del juego:  FC*M
turno: 3
fallas:  1
 adivine una letra: N
 Adivinaste...N

Estado del juego:  FCNM
turno: 4
fallas:  1
Felicitaciones, adivinó: FCNM
>>> 

Algoritmo en Python

Siguiendo las sugerencias, para dividir y simplificar el problema, primero se crean las funciones: escondeletras(secreta) y cambialetra(secreta,letra,estado).

Se inicia con la selección aleatoria de la palabra secreta y el sorteo de la letra pista, verificando que sea consonante.

Se actualiza la palabra secreta con la letra pista, y se inicia el juego.

# CCPG1001 Fundamentos de Programación FIEC-ESPOL
# 1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)
# propuesta de solución: edelros@espol.edu.ec
# tarea: indiferente usar mayúsculas/minúsculas
#        contar solo letras adivinadas, no repetidas

import numpy as np
import random as rnd

def escondeletras(secreta):
    estado = ''
    n = len(secreta)
    i = 0
    while not(i>=n):
        estado = estado + '*'
        i = i + 1 
    return(estado)

def cambialetra(secreta,letra,estado):
    nuevoestado = ''
    n = len(secreta)
    i = 0
    while not(i>=n):
        if (secreta[i]==letra):
            nuevoestado = nuevoestado + letra
        else:
            nuevoestado = nuevoestado + estado[i]
        i = i + 1
    return(nuevoestado)

# PROGRAMA JUEGO
# selecciona secreta
palabras = ['ESPOL','FCNM','FIEC','FIMCP','FICT']
n = len(palabras)
sorteo  = int(rnd.random()*n)+0
secreta = palabras[sorteo]

# estado inicial del juego
estado = escondeletras(secreta)

# una letra como pista
consonante = 'BCDFGHJKLMNPQRSTVWXYZ'
m = len(secreta)
sorteo = int(rnd.random()*m)+0
pista = secreta[sorteo]
while not(pista in consonante):
    sorteo = int(rnd.random()*m)+0
    pista  = secreta[sorteo]
    
# actualiza estado del juego
estado = cambialetra(secreta,pista,estado)

# Control del Juego
turnomax = 2*m
gana  = 1
falla = 0
print('Estado del juego: ', estado)

turno = 1
while not(turno>turnomax or gana==m):
    letra = input(' adivine una letra: ')
    if (letra in secreta):
        gana    =  gana +1
        estado  = cambialetra(secreta,letra, estado)
        mensaje = ' Adivinaste...' + letra
    else:
        falla   = falla + 1
        mensaje = ' NO es una letra de palabra...'
    
    print(mensaje)
    print()
    print('Estado del juego: ', estado)
    print('turno:', turno)
    print('fallas: ', falla)
    turno = turno + 1

if (turno<=turnomax and gana==m):
    mensaje = 'Felicitaciones, adivinó: ' + secreta
else:
    mensaje = 'lo lamento, perdió..., la palabra era: '
    mensaje = mensaje + secreta

# SALIDA
print(mensaje)

Recuerde que se ha dejado como tarea, realizar las instrucciones para cumplir que:
– sea indiferente usar mayúsculas/minúsculas
– contar solo letras adivinadas, no repetidas

Referencia: 2Eva_IT2005_T3 Adivina palabra (ahorcado)

Solución propuesta: s2Eva_IT2005_T3 Adivina palabra (ahorcado)

s3Eva_IT2018_T2 Producción minera del país

Ejercicio: 3Eva_IT2018_T2 Producción minera del país

Solución propuesta en Python, el primer bloque corresponde solo a las funciones requeridas en el examen. El segundo bloque corresponde a un programa de prueba.

# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# 3Eva_IT2018_T2 Producción minera del país
import numpy as np

# Literal a
def extraerMinerales(discurso): 
    palabras = discurso.split(' ')
    cuales   = []

    for unapalabra in palabras:
        # Tarea: verificar únicos
        if 'mral_' in unapalabra:
            mencionados = unapalabra[5:]
            mencionados = mencionados.title()
            cuales.append(mencionados)

    return(cuales)

# literal b
def calcularGanancias(P,C,T,precios):
    produccion = np.array(P)
    costosExtraccion = np.array(C, dtype=float)
    costosTransporte = np.array(T)
    
    # precio en forma de columna
    precios = np.transpose([precios])

    ventas = produccion*precios
    costo = costosTransporte + costosExtraccion
    ganancia = ventas - costo
    return(ganancia)

# literal c
def gananciaTotal(ganancia, minerales):
    ganametal = np.sum(ganancia,axis =1)
    
    ascendente  = np.argsort(ganametal)
    descendente = np.argsort(-ganametal)

    totalmetal  = ganametal[descendente]
    
    # convierte arreglo para ascendente
    minerales = np.array(minerales)
    cualmetal = minerales[descendente]

    ganatotal = (totalmetal,list(cualmetal))

    return(ganatotal)

# literal d
def top8(discurso,reporte):
    mencionados = extraerMinerales(discurso)
    totalmetal  = reporte[0]
    cualmetal   = reporte[1]
    
    interseccion = []
    m = len(cualmetal)
    for i in range(0,m,1):
        if (cualmetal[i] in mencionados):
            interseccion.append(cualmetal[i])
            
    mejoresmencionados = interseccion[:8]
    return (mejoresmencionados)

Programa de Prueba

Observación: las matrices C y T no tienen el mismo orden de magnitud a pesar de ser costos totales. Podría ser que el costo de extracción C sea por gramos, sin embargo las matrices se usan tal como fueron presentadas en el examen

# CCPG1001-Fundamentos de Programación - FIEC-ESPOL

# PROGRAMA DE PRUEBA -----
discurso  = 'y el dia de ayer descubrimos en la mina mirador que la cantidad de mral_oro'

minerales = ['Oro', 'Plata', 'Cobre']
precios   = [38.48,    3.43,    0.01]

minas = ['MIRADOR', 'FRUTA_DEL_NORTE', 'LOMA_LARGA', 'otra']


P = [[ 13524000, 121072000,  1204000,  9632000],
     [ 28000000,    952000,  9632000, 96404000],
     [126980000,    896000, 92988000,  9604000]]

C = [[ 12.32, 10.23, 23.23, 19.23],
     [  3.13,  1.78,  2.45,  1.69],
     [  8.32,  5.25,  6.32,  6.89]]

T = [[ 43736616, 341786256,  5442080,  28241024],
     [ 76244000,   1827840, 13966400, 435746080],
     [156439360,   1121792,300723192,  10785292]]
            
# PROCEDIMIENTO
mencionados = extraerMinerales(discurso)

ganancias  = calcularGanancias(P,C,T,precios)

ganatotal  = gananciaTotal(ganancias, minerales)
totalmetal = ganatotal[0]
cualmetal  = ganatotal[1]

mejoresmencionados = top8(discurso,ganatotal)


# SALIDA
print('a) los minerales mencionados son: ')
print(mencionados)

print('b) las ganancias totales son:')
print(ganancias)

print('c) ganancias totales por metal')
print(totalmetal)
print(cualmetal)

print('d) los 8 mejores mencionados: ')
print(mejoresmencionados)

los resultados en pantalla son :

a) los minerales mencionados son: 
['Oro']
b) las ganancias totales son:
[[  4.76666892e+08   4.31706429e+09   4.08878168e+07   3.42398317e+08]
 [  1.97959969e+07   1.43751822e+06   1.90713576e+07  -1.05080362e+08]
 [ -1.55169568e+08  -1.11283725e+06  -2.99793318e+08  -1.06892589e+07]]
c) ganancias totales por metal
[  5.17701732e+09  -6.47754890e+07  -4.66764983e+08]
['Oro', 'Plata', 'Cobre']
d) los 8 mejores mencionados: 
['Oro']
>>> 

s3Eva_IT2018_T1 Choferes y Rutas Trailers

Ejercicio: 3Eva_IT2018_T1 Choferes y Rutas Trailers

Propuesta en Python, se incluye la función calcularFecha() se presenta para poder probar las funciones en el programa de prueba.

El archivo con datos de prueba usado es: rutasManejadas2018.txt

La propuesta considera el uso de listas, por ser parte de los ejercicios del proyecto para 3ra Evaluación.

# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# 3Eva_IT2018_T1 Choferes y Rutas Trailers

# literal a
def cargarDatos(narchivo):
    loschoferes = []
    tabla = {}
    
    archivo  = open(narchivo,'r')
    cabecera = archivo.readline()
    linea = archivo.readline()
    while not(linea==''):
        linea  = linea.strip('\n')
        partes = linea.split(',')
        ruta   = partes[0]
        chofer = partes[1]
        fecha  = partes[2]
        
        if not(chofer in loschoferes):
            loschoferes.append(chofer)

        if not(fecha in tabla):
            tabla[fecha] = {ruta:[chofer]}
        else:
            if not(ruta in tabla[fecha]):
                tabla[fecha][ruta] = [chofer]
            else:
                tabla[fecha][ruta].append(chofer)
                
        linea = archivo.readline()
        
    archivo.close()

    return((loschoferes,tabla))

# función para pruebas, no requerida en la evaluación
import datetime as dtt

def calcularFecha(unafecha,n):
    formato = '%d-%m-%Y'
    fecha   = dtt.datetime.strptime(unafecha,formato)
    pasada  = fecha - dtt.timedelta(days=n)
    pasadatxt = dtt.datetime.strftime(pasada,formato)
    return(pasadatxt)

# literal b
def encontrarChoferes(tabla,loschoferes,unafecha,unaruta,n):
    simanejaron = []
    fechas = list(tabla.keys())
    for i in range(1,n+1,1):
        pasada = calcularFecha(unafecha,i)
        if (pasada in fechas):
            trabajaron = tabla[pasada][unaruta]
            for unchofer in trabajaron:
                if not(unchofer in simanejaron):
                    simanejaron.append(unchofer)
    nomanejaron = []
    for unchofer in loschoferes:
        if not(unchofer in simanejaron):
            nomanejaron.append(unchofer)
    return(nomanejaron)

# literal c
def grabarArchivo(tabla,loschoferes,unafecha,n):  
    narchivograba = unaruta+'_'+unafecha+'_'+str(n)+'.txt'
    
    archivo = open(narchivograba,'w')
    
    cabecera = 'Para la ruta '+unaruta+'\n'
    cabecera = cabecera + 'los choferes disponibles para la fecha '+unafecha+'\n'
    cabecera = cabecera + 'que no hayan manejado '+str(n)+' dias anteriores son: \n'
    archivo.write(cabecera)
    
    nomanejaron = encontrarChoferes(tabla,loschoferes,unafecha,unaruta,n)

    for cadachofer in nomanejaron:
        archivo.write(cadachofer+'\n')
    archivo.close()
    
    return(narchivograba)

programa de prueba, como trabajo extra, no requerido para el examen:

# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# PROGRAMA PRUEBA -------
# INGRESO
narchivo = 'rutasManejadas2018.txt'
unafecha = '19-05-2018'
unaruta = 'Guayaquil-Cuenca'
n = 2

# PROCEDIMIENTO
datos = cargarDatos(narchivo)
loschoferes = datos[0]
tabla = datos[1]
nomanejaron = encontrarChoferes(tabla,loschoferes,unafecha,unaruta,n)
elarchivo = grabarArchivo(tabla,loschoferes,unafecha,n)

# SALIDA
print('a) los choferes registrados son: ')
print(loschoferes)
print('   la tabla de trabajos es: ')
print(tabla)
print('b) los choferes que no manejaron en ')
print('  '+unaruta+', '+str(n)+' dias antes del '+unafecha+': ')
print(nomanejaron)
print('c) resultados en el archivo: ', elarchivo)

Se muestra el resultado en pantalla del programa usando los datos de prueba del archivo:

a) los choferes registrados son: 
['SMS', 'AGB', 'SMZ', 'EVN', 'AAQ']
   la tabla de trabajos es: 
{'17-05-2018': {'Guayaquil-Cuenca': ['SMS', 'SMZ'], 'Guayaquil-Daule': ['EVN']}, '18-05-2018': {'Guayaquil-Cuenca': ['AGB'], 'Guayaquil-Daule': ['AAQ']}}

b) los choferes que no manejaron en 
  Guayaquil-Cuenca, 2 dias antes del 19-05-2018: 
['EVN', 'AAQ']

c) resultados en el archivo:  Guayaquil-Cuenca_19-05-2018_2.txt
>>>