Está en la página 1de 26

Programación Lógica y Funcional

Semana 11
Mg. Alvarado Herrada, Edgar Francisco
Logro
Al finalizar la unidad, el estudiante conceptualiza las funciones básicas en
Python en programación funcional.

Importancia
La programación funcional obtiene su nombre de las funciones de escritura que
proporcionan la fuente principal de lógica en un programa.
Programación Funcional
en Python.
Entorno de trabajo

Intérprete OnLine:

https://www.onlinegdb.com/
La mayoría de nosotros hemos sido introducidos
a Python como un lenguaje orientado a objetos.
 E s u n l e n g u a j e e n el q u e NO s e utiliza exclusivamente c lases para
construir nuestros programas .

 Si bien e s fácil comenzar a trabajar con l a s c l ases y los objetos, h a y


otras formas d e escribir código Python.

 Dado q u e Python facilita diferentes enfoques p a r a escribir código.

 L a programación funcional obtiene s u nombre de l as funciones de


escritura q u e proporcionan l a fuente principal d e lógica e n u n programa.
Cuando solo usamos funciones, estamos aplicando un
enfoque funcional a la programación.
Los conceptos detrás de la
programación funcional requieren
que las funciones sean sin
estado , y se basen solo en sus
entradas para producir una salida.
Las funciones que cumplen estos
criterios se denominan funciones
puras .
El beneficio de usar funciones puras sobre funciones impuras
(no puras) es la reducción de los efectos secundarios.
Los efectos secundarios se
producen cuando se
realizan cambios dentro de
la operación de una función
que están fuera de su
alcance.

La variable A puede
modificarse fuera del
alcance de impure_sum
Los programadores reducen los efectos secundarios en su
código para que sea más fácil de seguir, probar y depurar.

Cuantos más efectos


secundarios tenga una base
de código, más difícil será
pasar por un programa y
comprender su secuencia de
ejecución.

Podemos depurar que sucede


Si bien es conveniente tratar de eliminar todos los con “open” o con “print”?
efectos secundarios, a menudo se utilizan
La Expresión Lambda
 E n lugar d e la sintaxis d e f p a r a l a declaración d e u n a función, podemos usar la
expresión l a m b d a p a r a escribir funciones d e Python.

1.Ejemplo de Python
Cuando no se asigna la fn lambda a una variable, la
fn resultante se denomina anónima.
 E s t a s f u n c i o n es a n ó n i m a s s o n e x t re m a d a m e n t e útiles, e s p e c i a l m e n t e
c u a n d o s e u s a n como e n t r a d a p a r a otra función.

 Por e j e m p l o, l a f unción sorted() recibe u n a r g u m e n t o key ( u n a función)


q u e des cribe cómo d e b e n ordenarse los e l e m e n t o s d e u n a lista.
Observaciones
 S i b i e n l a c a p a c i d a d d e p a s a r f u n c i o n e s co m o
a r g u m e n t o s no e s e xc l u s i v a d e P y t h o n , e s u n
desarrollo reciente e n l e n g u a j e s d e p ro g ra m a c i ó n .

 L a s f u n c i o n e s q u e p e r m i te n e s t e tipo d e
co m p o r ta m i e nto s e d e n o m i n a n f u n c i o n e s d e
pri mera c l a s e .

 Cualquier l e n g u a j e q u e c o n t e n g a f u n c i o n e s d e p r i m e ra
c l a s e puede escribirse e n u n estilo f u n ci o n a l .
Hay un conjunto de funciones importantes de primera clase
que se usan comúnmente dentro del paradigma funcional
 E s t a s f unciones t o m a n u n iterable d e Python, como el ejemplo de sorted(),
a p l i c a n u n a función p a r a c a d a element o d e l a lista.

 Todas s i g u e n l a forma g e n e r a l d e

 Nombre_función ( e l e m e n t o s iterables, f u n c ió n q u e aplicar).

 Nombre_función (función q u e a p l i c a r, e l e m e n t o s iterables).


La primera función con la que trabajaremos es la función
map()

La función map() toma un


iterable (por ejemplo, una
lista), y crea un nuevo objeto
iterable, un objeto ‘map’
especial .

El nuevo objeto tiene la


función de primera clase
aplicada a cada elemento.
2.Ejemplo de la Función map

Se debe convertir /crear el valor de retorno map() como un objeto


list.

El objeto retornado de map solo se puede iterar una vez.


La función de filtro
La función filter() toma
un iterable, crea un nuevo
objeto iterable (de nuevo,
un objeto map especial ) y
una función de primera
clase que debe devolver
un valor booleano.

El nuevo objeto map es


un iterable filtrado de
todos los elementos que
devolvieron True.
3.Ejemplo de Filtro
La función filter cómo su nombre lo indica, esta función nos permite realizar un filtro sobre los
elementos de la colección.
4.Ejemplo de Filtro
La función filter cómo su nombre lo indica, esta función nos permite realizar un filtro sobre los
elementos de la colección.
Programación Funcional
Ejercicio 1
Escribir una función que aplique un descuento a
un precio y otra que aplique el IVA a un precio.
Escribir una tercera función que reciba un
diccionario con los precios y porcentajes de una
cesta de la compra, y una de las funciones
anteriores, y utilice la función pasada para
aplicar los descuentos o el IVA a los productos
de la cesta y devolver el precio final de la cesta.
1.- ANALISIS DEL PROBLEMA
Pregunta 1: ¿Cuál es el problema que se ha de resolver?

Pregunta 2: ¿Cuál o cuáles son los resultados que debe


producir la solución?

Pregunta 3: ¿De qué información se dispone para


resolver el problema?

Pregunta 4: ¿Cuál o cuáles son las restricciones o


condiciones que debe satisfacer la solución?
SOLUCION
def apply_discount(price, discount):
'''
Función que aplica un descuento a una cantidad.
Parámetros:
price: Es un valor real con el precio al que aplicar el descuento.
discount: Es el porcentaje a descontar.
Devuelve:
El precio final tras aplicar el descuento.
'''
return price - price * discount / 100

def apply_IVA(price, percentage):


'''
Función que aplica un IVA a una cantidad.
Parámetros:
price: Es un valor real con el precio al que aplicar el IVA.
percentage: Es el porcentaje del IVA a aplicar.
Devuelve:
El precio final tras aplicar el IVA.
'''
return price + price * percentage / 100
SOLUCION
def price_basket(basket, function):
'''
Función que calcula el precio de una cesta de la compra una vez aplicada una función a los precios
iniciales.
Parámetros:
basket: Es un diccionario formado por pares precio:descuento.
function: Es una función que toma dos valores reales y devuelve otro. Normalmente para aplicar
descuentos o IVA.
Devuelve:
El precio final de la cesta de la compra una vez aplicada la función sobre los precios iniciales.
'''
total = 0
for price, discount in basket.items():
total += function(price, discount)
return total

print('El precio de la compra tras aplicar los descuentos es: ', price_basket({1000:20, 500:10, 100:1},
apply_discount))
print('El precio de la compra tras aplicar el IVA es: ', price_basket({1000:20, 500:10, 100:1}, apply_IVA))
Programación Funcional
Ejercicio 2
Escribir una función que simule una calculadora
científica que permita calcular el seno, coseno,
tangente, exponencial y logaritmo neperiano. La
función preguntará al usuario el valor y la función
a aplicar, y mostrará por pantalla una tabla con
los enteros de 1 al valor introducido y el
resultado de aplicar la función a esos enteros..
1.- ANALISIS DEL PROBLEMA
Pregunta 1: ¿Cuál es el problema que se ha de resolver?

Pregunta 2: ¿Cuál o cuáles son los resultados que debe


producir la solución?

Pregunta 3: ¿De qué información se dispone para


resolver el problema?

Pregunta 4: ¿Cuál o cuáles son las restricciones o


condiciones que debe satisfacer la solución?
SOLUCION1
from math import sin, cos, tan, exp, log

def apply_function(f, n):


'''
Función que aplica una función a los enteros desde 1 hasta n.
Parámetros:
f: Es una función que recibe un número real y devuelve otro.
n: Es un número entero positivo.
Devuelve:
Un diccionario con los pares i:f(i) para cada valor entero i de 1 a n.
'''
functions = {'sin':sin, 'cos':cos, 'tan':tan, 'exp':exp, 'log':log}
result = {}
for i in range(1, n+1):
result[i] = functions[f](i)
return result
SOLUCION1
def calculator():
'''
Función que aplica una función seleccionada por el usuario (seno, coseno, tangente, expone
ncial o logarítmo) a la lista de enteros desde 1 hasta n.
Imprime por pantalla una tabla con la secuencia de enteros y el resultado de aplicarles la fun
ción introducida.
Parámetros:
f: Es una cadena con la función a aplicar (sin, cos, tan, exp o log).
n: Es un entero positivo.
'''
f = input('Introduce la función a aplicar (sin, cos, tan, exp, log): ')
n = int(input('Introduce un entero positivo: '))
for i, j in apply_function(f, n).items():
print (i, '\t', j)
return

calculator()
SOLUCION2
from math import sin, cos, tan, exp, log

def calculator():
'''
Función que aplica una función seleccionada por el usuario (seno, coseno, tangente, exponencial o log
arítmo) a la lista de enteros desde 1 hasta n.
Imprime por pantalla una tabla con la secuencia de enteros y el resultado de aplicarles la función introd
ucida.
Parámetros:
f: Es una cadena con la función a aplicar (sin, cos, tan, exp o log).
n: Es un entero positivo.
'''
functions = {'sin':sin, 'cos':cos, 'tan':tan, 'exp':exp, 'log':log}
f = input('Introduce la función a aplicar (sin, cos, tan, exp, log): ')
n = int(input('Introduce un entero positivo: '))
results = [functions[f](x) for x in range(1, n+1)]
for i in range(n):
print (i + 1, '\t', results[i])
return

calculator()

También podría gustarte