Colaboratory logo Alternative text

Funciones y librerías#

Programando sin barreras III#

No te pierdas el vídeo de Funciones y librerías.

Funciones#

Una función en programación nos permite definir un bloque de código que deseamos usar varias veces en nuestro programa, es decir nos ayuda a reducir la redundancia en nuestro programa, eeduciendo el número de líneas de código.

Sintaxis

En Python para poder crear nuestras propias funciones es necesario seguir una estructura especifica, la cual separo en los siguientes tips:

  1. Primero la palabra reservada def

  2. Seguido del nombre de la función

  3. Paréntesis”()”, si tu función recibirá alguna variable irá dentro de estos paréntesis si no va vacío.

  4. Agregamos dos puntos “:”

  5. Después de esto ponemos las líneas de código que queremos que ejecute nuestra función.

  6. Usamos la palabra reservada return si queremos que nuestra función devuelva algún valor.

Nota: El nombre que se les asigne a las funciones para crear su definición tiene que ser en minúsculas y las palabras se separan con guión bajo.

Ejemplo

El nombre de la función es suma y recibe dos parámetros y devuelve una variable c

def suma(a,b):
  c=a+b
  return c

Solo quedaría llamar la función!, veamoslo en el siguiente código.

# Se crea una función que calcule la suma de dos números
def suma(a,b):
  c=a+b
  return c

#Se llama la función indicando los parámetros
suma(10,4)
14
# Si llamamos la función con nuevos parámetros, tendremos un nuevo resultado:
suma(30,56)
86
# Se crea la misma función pero en vez de retornar un valor le pedimos que lo 
# imprima
def suma(a,b):
  c=a+b
  print("La suma es: ",c)

#Se llama la función indicando los parámetros
suma(10,4)
La suma es:  14

Un momento!,print() ¿No se te hace muy familiar?, CLARO!. print() También es una función, en python existen un grán número de funciones. En este notebook veremos unas cuantas…

  • print() Muestra texto en pantalla

  • len() Nos muestra la longitud del parámetro que ingresemos

  • max() En un arreglo de números indica cual es el mayor

  • min() En un arreglo de números indica cual es el menor

Te reto a buscar más funciones y aplicarlas en tu código.

# Len() muestra el tamaño del parámetro que ingresemos. En este caso mostró el
# tamaño de la cadena de texto
len("La mujer cantaba mientras programaba")
36
# Max() devuelve el valor mayor entre varios
max([3,4,8,10])
10
#Intentalo con el min() en esta celda

Podemos crear diferentes funciones. Por ejemplo, creemos una función que multiplique dos números:

def Mult(a, b):
    c = a * b
    return(c)
# Podemos multiplicar dos enteros
Mult(2, 3)
6
# Podemos multiplicar dos numeros float
Mult(1.6, 3.6)
5.760000000000001
# Podemos multiplicar dos variables de diferente tipo
Mult(2, "Hola")
'HolaHola'
Nota: Una variable que es declarada dentro de una función se llama variable local. Esta variable solo existe dentro de la función. Una variable que es declarada fuera de una función se llama variable global, y su valor es accesible y modificable a lo largo del programa.
# Definición de función:

def square(a):
    
    # b y c son variables locales
    b = 1
    c = a * a + b
    print( "(a+1)*(a+1)=", c) 
    return(c)

# x y y son variables globales

x = 3
y = square(x)
y
(a+1)*(a+1)= 10
10
#Mira otro ejemplo:
def my_function1(var):
    print("Yo recibí", var)
    var += 1
    print("Ahora tengo", var)


var = 1
my_function1(var)
print(var)
Yo recibí 1
Ahora tengo 2
1
#Puedes definir variables globales  dentro de funciones de la siguiente manera
def my_function():
    global var
    var = 2
    print("¿Conozco a aquella variable?", var)


var = 1
my_function()
print(var)
¿Conozco a aquella variable? 2
2

1. Define una función que reciba como argumento un número y retone el factorial de dicho número

El factorial (!) de un número entero positivo es el producto de todos los números de 1 hasta el número: por ejemplo 3! == 3 × 2 × 1.

2. Cree una función que encuentre el elemento más pequeño de una lista dada.

3. Escribe una función que de la tabla de multiplicar de un número dado

4. Realiza un programa donde el usuario ingrese un número y el programa le diga si es primo dicho número o no.

Teorema de Wilson: puede afirmarse que un número n> 1 es primo si y solo si (n− 1)! ≡ − 1 (mod n)

Nota: 26≡11 (mod 5) significa que

  • 26 mod 5=1

  • 11 mod 5=1


La magia de las Librerías#

Las librerías en python son una herramienta fundamental a la hora de programar ya que nos permiten ampliar nuestras funcionalidades apartir de módulos ya creados.

Los modulos son paquetes de codigo (paquetes de funciones) escrito por personas externas que estan contenidos en el lenguaje de pyhton, pudieron ser los desarrolladores de llenguaje pyhton u otras, que nosotros tenemos a disposicion para ejecutar o usar que haces el trabajo por nosotros.

La forma de llamar una librería comienza con la palabra reservada import esta palabra seguida del nombre de la librería que queremos usar traerá todas las funcionalidades la librería. En python existen un sin número de librerías en este repaso nos centraremos en tres math,numpy y matplotlib

Para poder usar la librería en las siguientes celdas de nuestro notebook debemos hacer uso del nombre seguido del punto y la función que se va usar.

# Aqui importamos una librería
import math
# Se hace uso de la librería math y la función pow() que nos permite elevar el 
# primer número a la cantidad del segundo número
math.pow(2,4)
16.0
Para hacernos una idea de lo últil que son las librerías en el siguiente link podrán visitar todas las librerías de math. No es necesario usarlas todas, solamente ir haciendo uso de las que nuestro programa necesite.

Mira este juego de “piedra, papel o tijera” usando la librería random:

Comenta cada línea con su función en el código:

import random

print("¡Juguemos Piedra, Papel o Tijera!")
print("1. Piedra \n2. Papel \n3. Tijera")

opciones = ["Piedra", "Papel", "Tijera"]
opcion_jugador = int(input("Escribe el número de tu opción: "))
opcion_computadora = random.randint(1, 3)

print("\n")
print("Tú elegiste", opciones[opcion_jugador-1])
print("Python eligió", opciones[opcion_computadora-1])
print("\n")

if opcion_jugador == opcion_computadora:
    print("¡Empate!")
elif opcion_jugador == 1 and opcion_computadora == 3 or opcion_jugador == 2 and opcion_computadora == 1 or opcion_jugador == 3 and opcion_computadora == 2:
    print("¡Ganaste!")
else:
    print("Python te ganó :(")
¡Juguemos Piedra, Papel o Tijera!
1. Piedra 
2. Papel 
3. Tijera
---------------------------------------------------------------------------
StdinNotImplementedError                  Traceback (most recent call last)
Cell In[16], line 7
      4 print("1. Piedra \n2. Papel \n3. Tijera")
      6 opciones = ["Piedra", "Papel", "Tijera"]
----> 7 opcion_jugador = int(input("Escribe el número de tu opción: "))
      8 opcion_computadora = random.randint(1, 3)
     10 print("\n")

File /usr/local/lib/python3.9/site-packages/ipykernel/kernelbase.py:1260, in Kernel.raw_input(self, prompt)
   1258 if not self._allow_stdin:
   1259     msg = "raw_input was called, but this frontend does not support input requests."
-> 1260     raise StdinNotImplementedError(msg)
   1261 return self._input_request(
   1262     str(prompt),
   1263     self._parent_ident["shell"],
   1264     self.get_parent("shell"),
   1265     password=False,
   1266 )

StdinNotImplementedError: raw_input was called, but this frontend does not support input requests.

Vamos ahora ver una librería fundamental para el cálculo de matrices y análisis de datos. La famosisima numpy

import numpy
# Crearemos un vector o array de una dimensión
a1 = numpy.array([1,2,3,4])
print(type(a1))
print(a1)
<class 'numpy.ndarray'>
[1 2 3 4]

A la hora de llamar una librería tener que repetir su nombre cada vez que la vamos a usar. Esto se vuelve tediozo y más con algunas que su nombre son super largos! Pero, podemos haver uso de la palabra reservada as la cual nos permitirá poner un alias a nuestra librería y poder hacer uso de esta por medio de ese alías.

# Llamamos la librería numpy pero le asignamos el alías np
import numpy as np
# Crearemos un vector o array de una dimensión
b1 = np.array([5,6,7,8])
print(type(b1))
print(b1)
<class 'numpy.ndarray'>
[5 6 7 8]

El alías lo podemos poner a nuestro gusto, pero en programación existe un estandár a la hora de poner estos alías y hacen que nuestro código sea más fácil de leer por otra persona.

# Llamamos la librería numpy pero le asignamos el alís pppdnombreinventado
import numpy as pppdnombreinventado
# Crearemos un vector o array de una dimensión
c1 = pppdnombreinventado.array([8,9,10,11])
print(type(c1))
print(c1)
<class 'numpy.ndarray'>
[ 8  9 10 11]

Conociendo un poco más de numpy#

Existen varios atributos y funciones que describen las características de un array.

  • a.ndim : Devuelve el número de dimensiones del array a.

  • a.shape : Devuelve una tupla con las dimensiones del array a.

  • a.size : Devuelve el número de elementos del array a.

  • a.dtype: Devuelve el tipo de datos de los elementos del array a.

import numpy as np

a = np.array([1, 2, 3])   # crea una array de un rango
print("El tipo de la variable a es:", type(a))            
print(("y su tamaño es:", a.shape)            
<class 'numpy.ndarray'>
(3,)
1 2 3
[5 2 3]
(2, 3)
1 2 4
#Puedes imprimir cada uno de los elementos de a
print(a[0], a[1], a[2])   
#o cambiarlos
a[0] = 5                  # cambia un elemento de la array
print(a)                  
#Podemos aumentar el rango de la array
b = np.array([[1,2,3],[4,5,6]])    # crea una array de segundo rango
print(b.shape)                     
print(b[0, 0], b[0, 1], b[1, 0])   #imprimir cada uno de sus elementos
(2, 3)
1 2 4

numpy también tiene muchas funciones para crear arrays

a = np.zeros((2,2))   # crea una array de ceros
print("Array de ceros:\n",a, "\n")              

b = np.ones((1,2))    # crea una array de unos
print("Array de unos:\n",b)              

c = np.full((2,2), 7)  # crea una array con numeros constantes
print("Array de con constantes:\n",c, "\n")               
    

e = np.random.random((2,2))  # crea una array con valores aleatorios
print("Array aleatoria:\n",e, "\n")  
Array de ceros:
 [[0. 0.]
 [0. 0.]] 

Array de unos:
 [[1. 1.]]
Array de con constantes:
 [[7 7]
 [7 7]] 

Array aleatoria:
 [[0.64373792 0.25629592]
 [0.73398727 0.23813141]] 

1. ¿Cual es el resultado de las siguientes expresiones?

  • 0 * np.nan

  • np.nan == np.nan

  • np.inf > np.nan

  • np.nan - np.nan

  • np.nan in set([np.nan])

  • 0.3 == 3 * 0.1

2. Reemplace todos los números impares por -1 en esta array:

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])