Ejercicio: 3Eva2016TI_T1 Costo de mensaje

Propuesta de solución en Python:
Se requiere los archivos y su contenido:
| costos.txt | 10 0.2 0.5 0.3 |
| mensaje01.txt | El 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)