🐍

Conceptos básicos de Python

TemaProgramaciónPython
TipoTutoriales

Comentarios

#Yo soy un comentario de una linea
yo no soy un comentario, aqui doy error
"""No soy comentario pero algunos programadores me usan así, no lo deberían hacer :(
"""
#En Python no existen comentarios de lineas multiples, entonces
#hay que usar el simbolo # para cada linea que se quiera comentar

#En el caso en que se quiera poner un comentario al lado de una linea 
#de código, se ejecutrá hasta que se encuentre el símbolo #, ejemplo:
print('Hola Mundo!') #Este código se ejecutará, pero este cometnario no.

Variables

Las variables son la manera mas sencilla de almacenar información. Existen muchos tipos de variables que tienen diferentes características. Por ejemplo, las variables de tipo int sirven para almacenar números enteros, mientras que las variables de tipo float o double sirven para amacenar números con decimales.

Tener variables nos permite usar la información y hacer cambios en ella. Por ejemplo, si tenemos dos variables que representen números podríamos asignar la suma de estas dos variables a una variable nueva.

Las variables representan un espacio en la memoria del computador a la que se puede acceder mediante un nombre, sin embargo, a nivel de usuario esto no es relevante, ya que el lenguanje de programación se encargará de hacer estos procesos.

En conclusión, las variables al nivel de usario tendrán: Un nombre, un tipo y un valor.

Declarar variables

Para declarar variables en Python basta con usar el símobolo = al que se puede entender como Asignación . Puden llevar cualquier nombre y el valor puede ser de cualquier tipo. Por ejemplo, si queremos crear una variable que tenga como nombre zanahorias que almacene el número decimal 2.5 el códgio se puede escribir así:

zanahorias = 2.5

Tipos de variables

En Python existe una gran cantidad de tipos de variables, la lista completa esta aquí, sin embargo, en este tutorial solo se introducirá a los tipos de variables que nos encontraremos en el transcurso del curso.

La función type

Con la función type podremos saber el tipo de una variable, por ejemplo, si usamos la variable anterior (zanahorias) se espera que la función type nos diga que esta variable es de tipo float

Comando

Salida

type(zanahorias)
>>> <class 'float'>

Números

int: representa cualquier número entero.

float: representa un número decimal con presición double.

complex: Representa un numero complejo de la forma a+bj

zanahorias = 1
>>> type(zanahorias)
<class 'int'>
zanahorias = 2.5
>>> type(zanahorias)
<class 'float'>
zanahorias = 3+4j
>>> type(zanahorias)
<class 'complex'>

Operaciones

Cuando dos numeros enteros se suman el resultado es un número entero, por ejemplo

a = 4
b = 5
c = a+b
print(c)
9
type(a)
>>> <class 'int'>
type(b)
>>> <class 'int'>
type(c)
>>> <class 'int'>

Sin embargo, si intentamos sumar un número decimal con un número entero, el resultado será un numero decimal.

a = 4
b = 5.5
c = a+b
print(c)
9.5
type(a)
>>> <class 'int'>
type(b)
>>> <class 'float'>
type(c)
>>> <class 'float'>

Este mismo principio aplica para todas las operaciones que siguen.

a = 4
b = 5.5
c = a-b
print(c)
-1.1
type(a)
>>> <class 'int'>
type(b)
>>> <class 'float'>
type(c)
>>> <class 'float'>

En este caso, a pesar que la multiplicación da un número sin decimales, la variable sigue siendo de tipo float

a = 4
b = 5.5
c = a*b
print(c)
22.0
type(a)
>>> <class 'int'>
type(b)
>>> <class 'float'>
type(c)
>>> <class 'float'>
a = 4
b = 5.5
c = a/b
print(c)
0.7272727272727273
type(a)
>>> <class 'int'>
type(b)
>>> <class 'float'>
type(c)
>>> <class 'float'>

Retorna el residuo de la división entre dos números.

a=10
b=22
c = b%a
print(c)
2
type(a)
>>> <class 'int'>
type(b)
>>> <class 'int'>
type(c)
>>> <class 'int'>
1052=316.227710^{\frac{5}{2}}=316.2277
a=10
b=5/2
c = a**b
print(c)
316.22776601683796
type(a)
>>> <class 'int'>
type(b)
>>> <class 'float'>
type(c)
>>> <class 'float'>

Realiza la división normal y quita los decimales del resultado (aproximación hacia abajo)

a=5
b=2
c1 = a/b
c2 = a//b
print(c1)
2.5
print(c2)
2
type(a)
>>> <class 'int'>
type(b)
>>> <class 'int'>
type(c1)
>>> <class 'float'>
type(c2)
>>> <class 'int'>

Booleanos (bool)

Representa el estado verdadero o falso. Los booleanos pueden declararse explícitamente o ser obtenidos mediante comparaciones.

a=True
b=False

type(a)
>>> <class 'bool'>
type(b)
>>> <class 'bool'>
a = 5
b = 3
c =  a <= b
print(c)
False
type(a)
>>> <class 'int'>
type(b)
>>> <class 'int'>
type(c)
>>> <class 'bool'>

Comparaciones

a = 5
b = 3
c =  a <= b
print(c)
False
a = 5
b = 3
c =  a >= b
print(c)
True
a = 5
b = 3
c =  a > b
print(c)
False
a = 5
b = 5
c =  a < b
print(c)
False
a = 5
b = 3
c =  a == b
print(c)
False
a = 5
b = 3
c =  not a == b
print(c)
True

Operadores Lógicos

and

or

a = 5
b = 3
c =  a == b and a == 3
print(c)
False
a = 5
b = 5
c =  a == b and a == 3
print(c)
False
a = 5
b = 3
c =  a == b or a == 3
print(c)
False
a = 5
b = 5
c =  a == b or a == 3
print(c)
True

Cadenas de texto (str)

Se usan para guardar texto de cualquier longitud. El texto debe ir en comillas. Se pueden usar comillas simples y/o comillas dobles.

a = 'Hola Mundo!'
print(a)
Hola Mundo!
type(a)
>>> <class 'str'>

Comparación

Las cadenas de texto solo pueden compararse en igualdad, es decir, no existe una cadena de texto que sea mayor o menor que otra.

a = 'Hola Mundo!'
b = "Hola Mundo"
c = a == b
print(c)
False
type(a)
>>> <class 'str'>
type(b)
>>> <class 'str'>
type(c)
>>> <class 'bool'>

Longitud

Usando la función len se puede encontrar la longitud en caracteres de cualquier cadena de texto. Por ejemplo, si pasamos la cadena de texto a del ejemplo pasado

a = 'Hola Mundo!'
b = len(a)
print(b)
11
type(a)
>>> <class 'str'>
type(b)
>>> <class 'int'>

Listas (list)

Es el contenedor mas versatil de Python. Se usa para guardar datos de cualquier tamaño. Se declaran usando los parentesis cuadrados [ ] y los items de la lsita deben separase por comas.

a = [1, 4, 9, 16, 25]

type(a)
>>> <class 'list'>

Para acceder a la información de las listas se debe usar un índice. El índice representa la posicion en la lista que se quiere obtener. En python las listas comienzan desde 0.

print(a[0])
1
print(a[1])
4
print(a[4])
25

Cuando se intenta obtener un elemento que no existe en la lista, se retornará un error.

print(a[5])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Además, se pueden acceder a los elementos de la lista de "atras para adelante" usando índices negativos, por ejemplo

print(a[-1])
25
print(a[-2])
16
print(a[-3])
9
print(a[-6])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Las listas pueden almacenar cualquier tipo de variable dentro de sus casillas, por ejemplo:

a = [1, 4.0, True, 'He', 3 + 5j]
type(a)
>>> <class 'list'>
type(a[0])
>>> <class 'int'>
type(a[1])
>>> <class 'float'>
type(a[2])
>>> <class 'bool'>
type(a[3])
>>> <class 'str'>
type(a[4])
>>> <class 'complex'>

Agregar elementos a una lista

Se usa el método .append

a = [1, 4.0]
print(a)
[1, 4.0]
a.append('Hola')
print(a)
[1, 4.0, 'Hola']

Quitar elementos a una lista

Se usa el método .pop

a = [1, 4.0, 'Hola']
print(a)
[1, 4.0, 'Hola']
a.pop()
print(a)
[1, 4.0]
a = [1, 4.0, 'Hola']
print(a)
[1, 4.0, 'Hola']
a.pop(0) #Se puede pasar el índice que se quiere eliminar
print(a)
[4.0, 'Hola']

Longitud de una lista

Usando la función len se puede encontrar la longitud de la lista. Si la lista tiene longitud n, sus índices van desde 0 hasta n-1

a = [1, 4.0, 'Hola']
b = len(a)
print(b)
3
type(a)
>>> <class 'list'>
type(b)
>>> <class 'int'>

Listas y cadenas de texto

Las cadenas de texto pueden interpretarse como una lista de caracteres:

a = 'Hola Mundo!'
print(a[0])
'H'

El método split de las cadenas de texto es muy util para el manejo de la información, lo que hace es dividir una cadena de texto grande en una lista de cadenas de texto mas pequeñas basado en un separador

a = 'Hola estudiantes modelación'
b = a.split(' ')
print(b)
['Hola', 'estudiantes', 'modelación']
b = a.split('a')
['Hol', ' estudi', 'ntes model', 'ción']

None

Es el valor que toma una variable sin valor. El concepto de None es parecido al de el null en otros lenguajes de programación

Condicionales

Permiten que el código tome una descicion basado en un booleano

x = 5
if x < 0:
    print('Número negativo')
elif x == 0:
    print('Cero')
else:
    print('Mayor a cero')
>>> Mayor a cero
a = 'Permiso Denegado'
entrada = a == 'Permiso concedido'
if entrada:
	print('Siga por favor')
else:
	print('Seguridad!')
>>> Seguridad!
imprimir = True
if imprimir:
	print('Se esta conectando con la impresora...')
	documento.imprimir()
	print('El documento se imprimió de manera correcta')
>>> Se esta conectando con la impresora...
>>> El documento se imprimió de manera correcta

Bloques de código [IMPORTANTE]:

Note que dentro de los if's hay "bloques de código" que se ejecutan cuando la condicion se cumple (es verdadera). Estos bloques se encuentran desplazados hacia la derecha. A estos espacios se les llama IDENTACIÓN. La identación en Python es FUNDAMENTAL para que el código funcione. Si un bloque de código no esta identado no se ejecutará dentro del if y en casos extremos dará error:

a = 'Permiso concedido'
entrada = a == 'Permiso concedido'
if entrada:
	print('Siga por favor')
print('Seguridad!')
>>> Siga por favor
>>> Seguridad!

a = 'Permiso Denegado'
entrada = a == 'Permiso concedido'
if entrada:
	print('Siga por favor')
else:
print('Seguridad!')
File "<stdin>", line 4
    print('Seguridad!')
        ^
IndentationError: expected an indented block

Ciclos

For

Los ciclos for iteran sobre una lista/iterable, por ejemplo

verduras = ['Zanahoria', 'Pepino', 'Arvejas']
for verdura in verduras:
	print(verdura)
>>> Zanahoria
>>> Pepino
>>> Arvejas

En este ejemplo la variable verduras hace referencia a una LISTA de cadenas de texto, mientras que la variable verdura tomará el valor de cada una de las casillas de la lista en el orden en el que fueron agregadas.

Para hacer ciclos de Python con números, se puede usar la función range que se asemeja a los ciclos de otros lenguajes.

for i in range(0,3): #Por defecto el paso es = 1
	print(i**2)
>>> 0
>>> 1
>>> 4

La función rangetoma como parámetro el inicio, el final y el paso. Estos parametros deben ser enteros, no pueden tener decimales. Si en range se pasa por parametro inico 0, final 10, la lista irá desde cero hasta 9, es decir, siempre llega a n-1 donde n es el final. Por ejemplo:

range(0,10,1) >>> [0,1,2,3,4,5,6,7,8,9] 
range(0,10,2) >>> [0,2,4,6,8]
range(0,10,1.5) 
>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer

Si se quiere hacer un ciclo desde 0 hasta 10 entonces se debería escribir así:

for i in range(0,11):
	print(i**2)
>>> 0
>>> 1
>>> 4
>>> ...
>>> 100

While

El funcionamiento del While es parecido al for, sin embargo, su diferencia radica en que el for hace un número de iteraciones predefinido, mientras que el while itera dependiendo de una condición booleana (muy parecido al if)

Por ejemplo, un ciclo while que se termine cuando el número es divisible entre 7.

i = 0
lista = [3,6,3,8,32,27,28,65,34]
while not lista[i]%7==0:
	i = i + 1

Otra manera de hacerlo:

i = 0
condicion = True
lista = [3,6,3,8,32,27,28,65,34]
while condicion:
	if lista[i]%7==0:
		condicion=False
	i = i + 1

Si los Whiles estan mal formulados pueden llevar a un bucle infinito en el programa, por lo que deben tratarse con precaución.

Funciones

Las funciones permiten agrupar bloques de código y procesos complejos. Permiten tener parámetros y salidas. Generalmente son usadas para realizar acciones que se repitan en diferentes contextos.

Las funciones se declaran usando la palabra def , con la siguiente sintaxis:

def nombre_funcion(parametro_1,parametro_2,....,parametro_n):
	bloque que se ejecuta
	al llamar a la función
	return resultado de llamar a la función

Hagamos una función que nos diga si un número es par o impar

Entonces, empezamos creando una función vacía con el parámetro n que sea el número a evaluar:

def es_par(n):

Luego tenemos que evaluar de manera numérica si el número es o no par, por ejemplo, podemos usar la operación módulo, porque, todo número par es divisible entre 2, lo que hace que el residuo sea 0.

def es_par(n):
	residuo = n%2
print(es_par(3))
>>> None

La función no retorna nada, por eso al imprimir sale None

def es_par(n):
	residuo = n%2
	return residuo
print(es_par(3))
>>> 1

Por útlimo debemos retornar el booleano, esto lo podemos evaluar con un if

def es_par(n):
	residuo = n%2
	if residuo == 0:
		return True
	else:
		return False
print(es_par(3))
>>> False

Note que pusimos el return dentro del if, esto tambien es válido.

Hagamoslo un poco mas complejo...

Hagamos una función que nos diga si una lista de números es par o impar

Partimos del ejemplo anterior, la intuición nos dice que hay que meter un ciclo en el código:

def es_par(lista):
	for i in range(0,len(lista)):
		if lista[i]%2 == 0:
			print(True)
		else:
			print(False)

Modificamos el return para que imprimiera el resultado.

lista[i] es la iésima poscicion de la lista

len(lista) es la longitud de la lista

 a = [1,2,3,4,5,6,7,8]
es_par(a)
>>> False
>>> True
>>> False
>>> True
>>> False
>>> True
>>> False
>>> True

for i in range(0,len(lista)) hace que i tome los valores desde 0 hasta la longitud de la lista -1

En cada iteración estamos comprobando si el número en la iésima posicion de la lista es par o impar y lo imprimimos, ahora hagamos que retorne una lista.

Deberíamos crear una lista vacía y en cada iteración agregarle una posicion que indique si el numero es par o impar

def es_par(lista):
		lista_retorno = [] #Asi se declara una lista vacía
	for i in range(0,len(lista)):
		if lista[i]%2 == 0:
			lista_retorno.append(True)
		else:
			lista_retorno.append(False)
	return lista_retorno

Y listo!

a = [1,2,3,4,5,6,7,8]
print(es_par(a))
>>> [False, True, False, True, False, True, False, True]

Este resumen de conceptos básicos en Python recorre los temas necesarios para poder empezar programar en Python, si embargo, el mundo de la programación es muy grande.

Hay mil maneras distintas de llegar a los mismos resultados y en muchos casos mas eficientes. El objetivo de este tutorial es que tengan las bases de programación para que al momento de introducir conceptos nuevos no existan vacíos de conceptos previos.

El ejemplo de números pares recoge casi todo lo que vimos en el tutorial completo, sin duda puede hacerse mucho mas compacto.

a = [1,2,3,4,5,6,7,8]
b = [n%2==0 for n in a]
print(b)