< Volver al inicio

Lab 1: Repaso de Python

El objetivo del presente laboratorio es repasar de sobre los conceptos básicos de Python, para que el estudiante pueda recordar el manejo de este lenguaje y así, tener el mejor desempeño en el curso.

Se explicarán los siguientes conceptos:

  1. Introducción.
  2. Tipo de datos.
  3. Contenedores.
  4. Slicing.
  5. Loops.
  6. List comprehesion.
  7. Funciones.
  8. Clases.

1. Introducción

Python es un lenguaje de programación interpretado, que con ayuda de algunos paquetes se torna en un ambiente poderoso para desarollar casi cualquier pieza de softwate.

Para valirdar que se tiene Python instalado, verificamos la version utilizando el siguiente comando desde el programa terminal / command prompt / powershell dependiendo de que sistema operativo uses:

python3

Si todo esta bien deberías ver la versión de Python en la primera línea (debería ser 3.7 o 3.8), de lo contrario dirígite a realizar la configuración correcta desde este link.

Pro Tip: No copies los códigos que te brindamos aquí: prueba, equivócate y vuelve a intentarlo tú mismo; es la única forma de aprender Python.

2. Tipo de datos

Existen diferentes tipos de datos que, para nosotros pueden significar los mismo, pero para Python se deben tratar de manera distinta. Aquí la lista:

2.1. Números

Para comprobar el tipo de dato, se puede correr el siguiente script:

x = 3
print( x , type(x) )

También se pueden realizar las siguientes operaciones:

print( x+1 ) # Suma
print( x-1 ) # Diferencia
print( x*2 )  # Multiplicación
print( x**2 ) # Potencia
print( x/2 ) # División
print( x//2 ) # División: denominador 
print( x%2 ) # División: residuo

Otro ejemplo con float:

y = 2.5
print( type(y) )
print( y, y + 1, y * 2, y ** 2 ) 

2.2. Booleanos

Corresponde a los datos True y False. Por ejemplo:

t, f = True, False
print( type(t) )

Con estos datos podemos hacer distintas operaciones:

print( t and f ) # y
print( t or f ) # o
print( not t ) # negación
print( t != f ) # no es igual a
print( False == False ) # es igual a

2.3. Strings

Corresponde a las cadenas (texto). Siempre debe ir entre comillas (puede ser “” o ‘’). Por ejemplo, si queremos declarar un string:

hello = 'hello'
world = "world"''
print (hello , len(hello))

Para concatenar strings:

hw = hello + " " + world
print(hw)

Y si desean concatenar con otro tipo de datos, puede usar el siguiente artificio:

hw = "hello" + " " + "world" +" " +str(12)
print(hw)

O también de esta forma, usando %:

hw12 = '%s %s %d' % (hello, world, 12)
print(hw12)

Existen algunos métodos muy comunes para string:

s = 'hello'
# Capitaliza un string =>  "Hello"
print(s.title())
# Convierte un string a mayúscula => "HELLO"
print(s.upper())
# Sustituye todas las instancias de uno con otro => "he(ell)(ell)o"
print(s.replace('l', '(ell)'))
# Borra los espacios en blanco de los extremos
print('  world '.strip())

3. Contenedores

Python otros tipos de datos que se consideran como contenedores, porque pueden guardar otros datos dentro de sí. Por ejemplo: Listas, diccionarios y tuplas.

3.1. Listas

También conocidas como arrays. Pueden contener cualquier tipo de dato en el mismo; esta caracterísca no lo tiene todos los lenguajes.

Declaremos una lista:

lista1 = [3, 1, 2]
print(lista1)

Para obtener datos de un lugar de la lista podemos usar entre corchetes la posición:

PRO TIP: Python inicia en la posición 0 (cero).

print(lista1[0]) #la primera posición
print(lista1[2]) #la última posición

O también podemos acceder con negativos:

print(lista1[-1]) #ultima posición

Para agregar un nuevo elemento, podemos usar cualquiera de las dos maneras:

#Forma 1: usando el lugar donde queremos incluir el elemento y el elemento. En este caso se está reemplazando el lugar `2`.
lista1[2] = 'deep'
print(lista1[-1])
#Forma 2: usando append. Tomar en cuenta que append agregará en el último espacio.
lista1.append('learning')
print(lista1)

Para más métodos para el uso de listas, puedes revisar la siguiente documentación.

3.2. Diccionarios

Tienen una complejidad mayor que las listas porque en este caso tendrá la siguiente forma: diccionario = {"llave": valores}

d = {'cat':'cute' , 'dog':'furry'}
print(d['cat'])

Para agregar elementos al diccionario:

d['fish'] = 'wet'
print(d) 

3.3. Tuplas

Una tupla es una lista ordenada (inmutable) de valores. Una tupla es similar a una lista; una de las diferencias más importantes es que las tuplas se pueden usar como claves en diccionarios y como elementos de conjuntos, mientras que las listas no. Por ejemplo:

t = (5, 6)       # Crear una tupla
print( type(t) )
print(t[0])

4. Slicing

range Permite acceder a las listas en un lugar específico. Ademas, sigue la siguiente estructura: [cerrado, abierto]. list te permitira poder imprimir el resultado de range.

#creamos la lista y la mostramos
nums = list(range(5))
print("1)", nums)
#podemos mostrar un bloque de datos
print("2)", nums[2:4])
#Todos desde la posicion 2
print("3)", nums[2:])
#Todos hasta la posicion 2
print("4)", nums[:2])
#Todos
print("5)", nums[:])
#Todos hasta el penúltimo
print("6)", nums[:-1])
#Reemplaza las posiciones 2,3 (porque 4 es abierto)
nums[2:4] = [8, 9]
print("7)", nums)
1) [0 , 1, 2, 3, 4]
2) [2, 3]
3) [2, 3, 4]
4) [0 , 1]
5) [0 , 1, 2, 3, 4]
6) [0 , 1, 2, 3]
7) [0 , 1, 8, 9, 4]

5. Loops

Los bucles te permiten ejecutar código una y otra vez dependiendo de ciertas condiciones. Tambien permiten iterar dentro de listas, diccionarios, entre otros. Para el uso de bucles aprenderemos los siguientes términos:

5.1. For in range

Sirve para ejecutar un código una cantidad determinada de veces. Junto con una variable “i” que cambia cada iteración.

for i in range(3):
   print("Hola amigo #",i)

Esto devolvera la siguiente lista de saludos.

Hola amigo # 0
Hola amigo # 1
Hola amigo # 2

5.2. For in list

Para iterar de la siguiente forma: for iterador in lista_animales –> imprime sus elementos. El iterador empieza desde la posición cero.

animals = ['cat', 'dog', 'monkey']
for animal in animals:
    print(animal)

Esto devolvera la lista de animales

cat
dog
monkey

5.2. While

Sirve para ejecutar un código una cantidad indeterminada de veces. Seguirá ejecutándose hasta que la condición sea falsa.

x = 0
while (x<3):
 print("Adios amigo #",x)
 x=x+1

Esto devolvera la siguiente lista de despedidas

Adios amigo # 0
Adios amigo # 1
Adios amigo # 2

6. Funciones

Nos permiten encapsular una funcionalidad para mejorar el performance de nuestro código y podamos reutilizarlas solo declarándolas. Estas funciones se declaran usando def al inicio.

#esta función tiene el parámetro "x" y evalúa si "x" es positivo, negativo o cero
def sign(x):
    if x > 0:
        return 'positivo'
    elif x < 0:
        return 'negativo'
    else:
        return 'cero'

Luego para llamar la función que acabamos de crear, lo podemos hacer de diversas maneras:

#solo imprimir lo que nos da la función
print(sign(-1))

#también lo podemos agregar a una variables (castear)
validador_signo = sign(-1)
print(validador_signo)

7. Clases

Una clase corresponde a un objeto en progamación. Este concepto nos servirá mucho en el desarrollo del trabajo final (ecommerce). Primero utilizaremos un ejemplo para entender la logica a través de una clase Carro que tiene un Constructor, Atributos y Métodos.

Un carro tiene Atributos como el año de edición, los kilometros recorridos y el color. Por lo tanto nustra clase Carro tambien lo tendrá.

def __init__(self, col, año, km):
    self.color = col
    self.año = año
    self.kilómetros = km

Adicionalmente un carro puede realizar acciones, como avanzar y frenar. Por lo que nuestra clase Carro tambien podrá hacerlo a través de los Métodos

def avanzar(self):
       return "Rum Rum... Carro avanzando." 

def frenar(self):
       return "uuu... El carro ha frenado."

Seguro te preguntaras donde quedo el Constructor. Por el momento no hay problema, puesto que ya lo hemos utilizado. Es una función que utiliza las propiedades de las clases para crear objetos. Además, puede incluir variables que permitirán personalizarlo. Puedes verlo como una fabrica de autos que puede componer diferentes modelos.

class Carro:
    # __init__ declara las variables como parte del nuevo objeto.
   def __init__(self, col, año, km):
       self.color = col
       self.año = año
       self.kilómetros = km

Finalmente todo junto se veria así:

class Carro:
   def __init__(self, col, año, km):
       self.color = col
       self.año = año
       self.kilómetros = km

   def avanzar(self):
       return "Rum Rum... Carro avanzando."
   def retroceder(self):
       return "uuu... El carro ha frenado."

Ahora que tenemos todo listo ya podemos fabricar nuestro propio auto.

#Fabricamos un nuevo auto rojo del 2016 que ha recorrido 0.0 kilometros
MiCarro = Carro("rojo",2016,0.0);
#Hacemos que el auto nuevo avance
print(MiCarro.avanzar());

Acá podemos ver otro ejemplo.

#declaramos la clase
class Greeter:
    # Constructor
    def __init__(self, name):
        self.name = name  # Create an instance variable
    # Métodos
    def greet(self, loud):
        if loud==1:
            print('HELLO, %s!' % self.name.upper())
        else:
            print('Hello, %s' % self.name)

Reutilizamos nuestra clase Greeter:

g = Greeter('Fred')  # Gracias al constructor podemos crear la clase 'Freed'
g.greet(loud=1) # Llamamos al método usando 1. Ingresa al if
g.greet(loud=0) # Llamamos al método usando 0. Ingresa al else

< Anterior lab
Siguiente lab >