Clase 7-8¶
Repaso conceptos clave:
Librería: Colección de modulos. Nos sirve para implementar funciones que permiten tareas específicas como: operaciones matemáticas, gráficos, procesar datos, etc.
Variables: elemento que amacena información de diferentes types.
Types: Tipos de información que podemos utilizar: texto, numérico, secuencial, boolean, etc.
Listas: Contenedor de información. Permite almacenar diferentes types.
Loops: iteraciones que vamos a llamar mediante la palabra for.
Contenidos de la clase:¶
Loops
Input/output
If
Crear funciones
Diccionarios
1. Loops¶
Podemos iterar sobre un rango de valores (a,b). Recordar que la iteración incluye a y no incluye b.
# Iterar sobre un rango de valores
for i in range(5, 10):
print(i)
5
6
7
8
9
Si creamos una variable antes de la iteración podemos modificarla con cada iteración. Veamos tres ejemplos con x, y, z:
# Creamos x y y fuera de la iteración
x = 0
y = 0
for i in range(1, 5):
z = 0 #creamos z dentro de la iteración
x = x + i
y = i
z = z + i
print("i:", i, ", x=", x, ", y=", y, ", z=", z)
i: 1 , x= 1 , y= 1 , z= 1
i: 2 , x= 3 , y= 2 , z= 2
i: 3 , x= 6 , y= 3 , z= 3
i: 4 , x= 10 , y= 4 , z= 4
Podemos utilizar iteraciones dentro de iteraciones, esto nos puede servir para trabajar con diferentes fuentes de información.
La clase pasada vimos como crear una lista manualmente, ahora dos ejemplos para crear una lista numérica (array) entre un rango de valores:
import numpy as np
#linspace(inicio, término, cantidad de elementos)
a = np.linspace(1, 10, 5)
print("type de a:", type(a))
print("a: ", a)
#arange(inicio, término, separador)
b = np.arange(1, 10,2)
print("type de b:", type(b))
print("b: ", b)
type de a: <class 'numpy.ndarray'>
a: [ 1. 3.25 5.5 7.75 10. ]
type de b: <class 'numpy.ndarray'>
b: [1 3 5 7 9]
import numpy as np
inicio = 0
termino = 100
cantidad = 1001
np.linspace(inicio, termino, cantidad)
(termino-inicio)/cantidad
0.0999000999000999
Vamos a utilizar estas listas para crear un for anidado
y guardar un resultado en una lista
Recorrer los elementos de la lista
for i in b:
print(i)
1
3
5
7
9
print(a)
print(b)
[ 1. 3.25 5.5 7.75 10. ]
[1 3 5 7 9]
#1. Creamos una lista
lista1 = []
#2. Iteramos sobre los valoes de a y b
for i in a:
for j in b:
#3. Anexamos una operación a la lista
# print((i, j), "multiplicacion:", i * j)
lista1.append(i * j)
print(lista1)
[1.0, 3.0, 5.0, 7.0, 9.0, 3.25, 9.75, 16.25, 22.75, 29.25, 5.5, 16.5, 27.5, 38.5, 49.5, 7.75, 23.25, 38.75, 54.25, 69.75, 10.0, 30.0, 50.0, 70.0, 90.0]
Otra forma de hacer la misma operación
#1. Creamos una lista
lista2 = []
#2. Iteramos sobre el largo de las listas a y b
for i in range(0, len(a)):
for j in range(0, len(b)):
#3. Anexamos una operación a la lista
lista2.append(a[i] * b[j])
print(lista2)
#Podemos sumar los valores de una lista con sum()
print("suma de la lista:", sum(lista2))
[1.0, 3.0, 5.0, 7.0, 9.0, 3.25, 9.75, 16.25, 22.75, 29.25, 5.5, 16.5, 27.5, 38.5, 49.5, 7.75, 23.25, 38.75, 54.25, 69.75, 10.0, 30.0, 50.0, 70.0, 90.0]
suma de la lista: 687.5
Son iguales la lista 1 y lista 2?
lista1 == lista2
True
2. Input/Output¶
La función input() nos va a pedir entregar un valor. Esto es útil cuando necesitamos que el usuario nos reporte algún dato.
input()
---------------------------------------------------------------------------
StdinNotImplementedError Traceback (most recent call last)
<ipython-input-10-9c8b639daf2f> in <module>
----> 1 input()
~/miniconda3/lib/python3.9/site-packages/ipykernel/kernelbase.py in raw_input(self, prompt)
843 """
844 if not self._allow_stdin:
--> 845 raise StdinNotImplementedError(
846 "raw_input was called, but this frontend does not support input requests."
847 )
StdinNotImplementedError: raw_input was called, but this frontend does not support input requests.
Podemos incorporar un texto referente a la información solicitada
input("Indique su edad:")
Indique su edad: 10
'10'
¿Podemos guardar la información?
edad = input("indique su edad:")
#Es una variable del tipo string
#¿Cómo la pasamos a una variable numérica?
#Con int() o float()
indique su edad: 10
print(edad)
10
3. If/else¶
La operación if
nos permite evaluar si se cumple una condición.
Por ejemplo: Iteramos sobre una lista entre (0, 10), si el valor es mayor que 5 muestra el resultado.
Iteramos sobre una lista entre (0, 10): hacemos un for entre 0 y 10.
si el valor es mayor que 5: condición
muestra el resultado: operación
for i in range(0, 10): #iteración
if i > 5: #condición
print(i) #operación
6
7
8
9
¿Qué tipo de operaciones podemos evaluar? Operaciones lógicas:
Igualdad: ==
Desigualdad: !=
Mayor: >
Mayor que: >=
Menor: <
Menor que: <=
a = 10
if a==10:
x = a
print(x)
10
Operaciones conjuntas con “or” y “and”
if a == 10 and x >= 5:
print((a, x))
(10, 10)
Para evaluar varias situaciones vamos a usar if, elif y else.
Ejemplo: Vamos a crear una lista A utilizando valores de una segunda lista B con valores entre 0-10. Vamos a iterar sobre los valores de la lista A y realizar las siguientes operaciones
Si el valor está entre 0-3 guardamos ese mismo valor en B
Si el valor es mayor que 3 y menor que 5 lo multiplicamos por 2
Si el valor es igual a 5 pedir ingresar un valor con la función input()
Para todo el resto eleva el número al cuadrado
#1. Creamos las listas
A = np.arange(0, 11, 1)
B = []
#2. Iteramos sobre A
for i in A:
#Creamos la primera condición
if i>=0 and i<= 3:
B.append(i)
#Segunda condición
elif i > 3 and i<5:
B.append(i*2)
#Tercera condición
elif i==5:
B.append(float(input("Agregar un valor")))
B.append(input("input 2:"))
#Para todo el resto
else:
B.append(i**2)
Agregar un valor 10
input 2: 10
print("A:", A)
print("B:", B)
A: [ 0 1 2 3 4 5 6 7 8 9 10]
B: [0, 1, 2, 3, 8, 10.0, '10', 36, 49, 64, 81, 100]
np.zeros(0)
array([], dtype=float64)
x = input("agrega un valor")
type(x)
agrega un valor 1
str
a = 'texto2'
if a != 'texto':
print("ok")
ok
a = [0, 'x', 3]
for i in range(0, len(a)):
print(a[i])
if i == 0:
print("ok")
elif i == 1:
print("ok2")
0
ok
x
ok2
3
4. Crear funciones¶
Una función es un código que nos permite almacenar una una acción. A la función le damos un nombre y luego la podemos invocar utilizando ese nombre.
Un ejemplo de función es print(), mediante su nombre podemos pedir que muestre una variable, un texto u otro.
Ahora vamos a ver cómo se crea una función.
Sintaxis: “def” + “nombre” + “(input)” + “:”
def miprimerafuncion(a): #declaramos la función y establecemos el input
b = a*2 #definimos qué hace la función
return b #Establecemos un output
#definimos el input
a = 10
#llamamos la función
miprimerafuncion(a)
20
podemos evaluar la función con diferentes valores
b = 100
print(miprimerafuncion(b))
print(miprimerafuncion(1000))
200
2000
A una función le podemos dar diferentes input y que entregue variados output
def ejemplo2(a, b):
return a*b, a**b
ejemplo2(10,2)
(20, 100)
podemos guardar los valores del output de la función
X, Y = ejemplo2(10,2)
print("X=", X, "Y=", Y)
X= 20 Y= 100
El input puede ser de diferentes types
def ejemplo3(a):
AA = []
AA.append(a)
return AA
C = ejemplo3("hola")
print(C)
['hola']
print(C)
['hola']
Variable local y global
Una variable local va a existir en un lugar específico. Por ejemplo dentro de la función ejemplo3(a) definimos A=[], esta variable A existe sólo dentro de la función ejemplo3(), es decir es una variable local.
Por otro lado, cuando decimos que A = ejemplo3(“hola”) estamos definiendo una vable global, que existe en todo el espacio del Jupyter, una vez definida puede ser llamada en en cualquier parte.
El ejemplo que utilizamos para probar if/ifelse/else lo podemos guardar en una función que le entremos una lista numérica (A) y que retorne una lista B con las operaciones del if
#1. Creamos la función con un input A
def ejemplo4(A):
#2. Creamos una lista vacía
B = []
#3. Iteramos sobre A
for i in A:
#Creamos la primera condición
if i>=0 and i<= 3:
B.append(i)
#Segunda condición
elif i > 3 and i<5:
B.append(i*2)
#Tercera condición
elif i==5:
B.append(input("Agregar un valor"))
#Todo el resto
else:
B.append(i**2)
#4. Output
return B
#Creamos una lista entre 0-10
A = np.arange(0, 11, 1)
#Llamamos la función y guardamos el resultado en una variable global
B = ejemplo4(A)
Agregar un valor 1
print("A:", A)
print("B:", B)
A: [ 0 1 2 3 4 5 6 7 8 9 10]
B: [0, 1, 2, 3, 8, '1', 36, 49, 64, 81, 100]
5. Diccionarios¶
Un diccionario es una estructura que nos permite almacenar información mediante una llave
(key) y un valor
. Vamos a llamar tupla a esta llave:valor.
Por ejemplo si tenemos una base como
Podemos crear dos diccionarios, uno para Ana y otro para Félix del tipo:
Ana: {Nombre: Ana, Edad:30, Signo:Libra}
Félix: {Nombre:Félix, Edad:50, Signo:Sagitario}
En este caso las llaves son (Nombre, Edad y Signo).
Para crear un diccionario utilizamos “{}”. La sintaxis es “{” + “llave” + “:” + “valor” + “}”
Ana = {'nombre':'ana', 'edad':30, 'signo':'libra'}
Felix = {'nombre':'felix', 'edad':50, 'signo':'sagitario'}
Para acceder a los elementos del diccionario vamos a usar la llave o el valor
print('La edad de Ana es '+ str(Ana['edad']) + ' y su signo es ' + Ana['signo'])
La edad de Ana es 30 y su signo es libra
Vamos a usar las funciones keys(), values() e items() para ver los valores dentro de un diccionario
#Para ver las llaves
Ana.keys()
dict_keys(['nombre', 'edad', 'signo'])
#Para ver los valores
Felix.values()
dict_values(['felix', 50, 'sagitario'])
#Para ver las tuplas (llave, valor)
Felix.items()
dict_items([('nombre', 'felix'), ('edad', 50), ('signo', 'sagitario')])
Actividad en clases (sin nota)¶
¿Cómo usamos linspace() y arange()? Muestre un ejemplo de cómo se utiliza y las diferencias.
¿Cuáles son los símbolos para evaluar igualdad, desigualdad, mayor igual, y menor que?
El siguiente tiene por objetivo tomar información del
array
A y colocoarla en lalista
B. El código tiene 5 errores, encuéntrelos y de una breve explicación del problema. El código tiene cuatro condicionales que hacen lo siguiente:Si i es mayor o igual que 0 y menor o igual que 3, anexa i a la lista B.
Si i es mayor que 3 y menor que 5, anexa \(i*2\) a la lista B.
Si i es igual a 5, pide un valor (como float), anexarlo a la lista B.
Para todo lo demás, agrega a la lista B el valor \(i^2\).
# Descomente el código con ctr+/
# A = np.arange(0, 11, 1)
# B = []
# for i in range(len(A)):
# #Creamos la primera condición
# if i>0 and i<= 3:
# B.append(i)
# #Segunda condición
# elif i > 3 and i<5:
# B.append(A[i]*2)
# #Tercera condición
# elif i==5:
# B.append((input("Agregar un valor")))
# #Para todo el resto
# elseif:
# B.append(i**2)
Van a crear una función llamada
miprimerafuncion
y realizarán los siguiente:En una línea explique la sintaxis de una función.
La función debe calcular \(y = x+x^2\). Escriba la función sin un input y que el retorno sea \(y\).
Escriba la función anterior pero con un input igual a \(x\). ¿Qué cambia con el caso anterior?
¿Qué debería pasar con la función si ahora queremos calcular \(y=x+x*z+x^2\)?
¿Qué ocurre si colocamos directamente en el retorno \(x + x^2\) versus definir primero \(y=x+x^2\) y retornar \(y\)?
Colocar un condicional dentro de la función que evalúe:
\(x>0 \Rightarrow y=x+x^2\)
\(x<0 \Rightarrow y=\text{abs}(x)+x^2\)
\(x=0 \Rightarrow y=0\)
¿Por qué colocamos el condicional dentro de la función y no fuera de la función? Muestre un ejemplo.
Con un diccionario podemos guardar información bajo el formato llave-valor. ¿Qué significa eso?
¿Podemos crear un
diccionario
con dos llaves que tengan el mismo nombre? mostrar un ejemplo.¿Podemos crear un
diccionario
con dos valores que sean iguales? mostrar un ejemplo.¿Podemos usar un
loop
para poblar undiccionario
? muestre un ejemplo.