s3Eva2016TI_T1 Costo de mensaje SMS

Ejercicio: 3Eva2016TI_T1 Costo de mensaje

Mensaje Sms Teclado

Propuesta de solución en Python:

Se requiere los archivos y su contenido:

costos.txt10
0.2
0.5
0.3
mensaje01.txtEl cuerpo humano es el carruaje;
el yo, el hombre que lo conduce;
el pensamiento son las riendas,
y los sentimientos, los caballos.

literal a.

Se procede a abrir el archivo

    archivo  = open(nombreArchivo,'r')

Luego se lee el primer valor 'm' desde la primera línea. Se elimina el salto de línea y se convierte a número entero

    # leer M
    unalinea = archivo.readline()
    unalinea = unalinea.strip('\n')
    m = int(unalinea)

continuar con la lectura de los costos en el orden indicado en el enunciado. Recuerde ajustar al tipo de dato numérico real.

Cerrar el archivo.

Definir la función con su nombre, argumentos y entregar las tarifas en un diccionario.

# literal a
def cargarDatos(nombreArchivo):
    archivo  = open(nombreArchivo,'r')
    # leer M
    unalinea = archivo.readline()
    unalinea = unalinea.strip('\n')
    m = int(unalinea)
    # costo palabra corta
    unalinea = archivo.readline()
    unalinea = unalinea.strip('\n')
    corta    = float(unalinea)
    # costo palabra larga
    unalinea = archivo.readline()
    unalinea = unalinea.strip('\n')
    larga    = float(unalinea)
    # costo palabra infinitivo
    unalinea = archivo.readline()
    unalinea = unalinea.strip('\n')
    infinitivo = float(unalinea) 

    archivo.close()

    tarifas = {'m':m,
               'corta':corta,
               'larga':larga,
               'infinitivo':infinitivo}
    return(tarifas)

Se presenta otra opción de desarrollo usando una lista que se llena con las listas y luego se asignan los valores al diccionario.

literal b

Se lee el archivo del mensaje por cada línea y se asigna a una lista para luego procesar.

    # Carga en una lista lineas de archivo
    lista = []
    archivo  = open(nombreArchivo, 'r')
    
    unalinea = archivo.readline()
    while not(unalinea==''):
        unalinea = unalinea.strip('\n')
        lista.append(unalinea)
        unalinea = archivo.readline()
        
    archivo.close()

Por cada línea del mensaje se separa por palabras. Revisar si contiene puntuaciones. Comparar el tamaño de la palabra con tarifas['m'] para determinar si son palabras cortas o largas.

Revisar si las últimas letras de la palabra corresponden al infinitivo.

            # revisa infinitivo
            ultimas = palabras[j][k-2]+palabras[j][k-1]
            if (ultimas == 'ar' or ultimas=='er' or ultimas=='ir'):
                valor = tarifas['infinitivo']

Tarea: literal c


Ejemplo de salida:

El 0.2
cuerpo 0.2
humano 0.2
es 0.2
el 0.2
carruaje 0.2
el 0.2
yo 0.2
el 0.2
hombre 0.2
que 0.2
lo 0.2
conduce 0.2
el 0.2
pensamiento 0.5
son 0.2
las 0.2
riendas 0.2
y 0.2
los 0.2
sentimientos 0.5
los 0.2
caballos 0.2
tarifas: {'m': 10, 'corta': 0.2, 'larga': 0.5, 'infinitivo': 0.3}
costo: 5.200000000000001

Algoritmo en Python

# 3Eva_IT2016_T1 Costo de mensaje
# Tarea: revisar si es necesario el uso de
#  mayúsculas/minúsculas

# literal a
def cargarDatos(nombreArchivo):
    archivo  = open(nombreArchivo,'r')
    # leer M
    unalinea = archivo.readline()
    unalinea = unalinea.strip('\n')
    m = int(unalinea)
    # costo palabra corta
    unalinea = archivo.readline()
    unalinea = unalinea.strip('\n')
    corta    = float(unalinea)
    # costo palabra larga
    unalinea = archivo.readline()
    unalinea = unalinea.strip('\n')
    larga    = float(unalinea)
    # costo palabra infinitivo
    unalinea = archivo.readline()
    unalinea = unalinea.strip('\n')
    infinitivo = float(unalinea) 

    archivo.close()

    tarifas = {'m':m,
               'corta':corta,
               'larga':larga,
               'infinitivo':infinitivo}
    return(tarifas)

# literal a, usando bucles
def cargarDatos2(nombreArchivo):
    lista = []    
    archivo  = open(nombreArchivo, 'r')

    unalinea = archivo.readline()
    while not(unalinea==''):
        unalinea = unalinea.strip('\n')
        lista.append(unalinea)
        unalinea = archivo.readline()
    archivo.close()

    tarifas = {'m':int(lista[0]),
               'corta':float(lista[1]),
               'larga':float(lista[2]),
               'infinitivo':float(lista[3])}
    return(tarifas)

# literal b
def calcularCostos(tarifas, nombreArchivo):
    costo = 0
    # Carga en una lista lineas de archivo
    lista = []
    archivo  = open(nombreArchivo, 'r')
    
    unalinea = archivo.readline()
    while not(unalinea==''):
        unalinea = unalinea.strip('\n')
        lista.append(unalinea)
        unalinea = archivo.readline()
        
    archivo.close()
    
    #Procesar las lineas
    n = len(lista)
    i = 0
    while not(i>=n):
        # separa palabras
        linea = lista[i]
        palabras = linea.split(' ')
        m = len(palabras)
        
        j = 0 
        while not(j>=m):

            # elimina puntuaciones
            palabras[j] = palabras[j].strip(',')
            palabras[j] = palabras[j].strip(';')
            palabras[j] = palabras[j].strip('.')
            tamano = len(palabras[j])

            valor  = tarifas['corta']
            if (tamano>=tarifas['m']):
                valor = tarifas['larga']
            k = len(palabras[j])

            # revisa infinitivo
            ultimas = palabras[j][k-2]+palabras[j][k-1]
            if (ultimas == 'ar' or ultimas=='er' or ultimas=='ir'):
                valor = tarifas['infinitivo']
                
            # acumula valor de palabra
            print(palabras[j],valor)
            costo = costo + valor
            j = j + 1
            
        i = i + 1
    return(costo)

# PROGRAMA DE PRUEBA ---------------
# INGRESO
tarifas = cargarDatos('costos.txt')
# PROCEDIMIENTO
costo = calcularCostos(tarifas, 'mensaje01.txt')
# SALIDA
print('tarifas:',tarifas)
print('costo:',costo)


Ejercicios resueltos/Ejemplos por año

Ejemplos 1ra Evaluación

1ra Eva 2020-2011

1ra Eva 2010-2001

Ejemplos 2da Evaluación

2da Eva 2020-2011

2da Eva 2010-2001

Ejemplos 3ra Evaluación

3ra Eva 2020-2011

3ra Eva 2010-2001