Introducción al lenguaje Python

Introducción

Este es un cuaderno introductorio a Python diseñado en JupyterLab, exploraremos las funciones básicas disponibles de Python y la programación básica para su posterior uso en el diplomado. Comencemos con un ambiente de Python 3. Para una introducción más extensa, ir aquí.

¿Qué es Python?

Logo Python

Python es un lenguaje de programación (¿Qué es un programa?) popular que se usa normalmente para:

  • Desarrollo web en servidores,

  • Desarrollo de Software,

  • Cálculos Matemáticos,

  • Desarrollo de Scripts.

¿Qué puede hacer Python?

  • Puede ser usado en un servidor para crear aplicaciones web,

  • Puede conectarse a sistemas de bases de datos. Puede leer y modificar archivos.

  • Puede ser usado para manejar Big Data y hacer cálculos matemáticos de alta complejidad.

  • Prototipo rápido para producción de Software.

¿Por qué Python?

  • Funciona en diferentes plataformas (Windows, Mac, Linux, etc).

  • Tiene una sintaxis (forma de escribir) simple, similar al idioma inglés.

  • Tiene una sintáxis que permite escribir programas en muy pocas líneas, comparado con otros lenguajes de programación.

  • Pyhton se ejecuta en un sistema interpretado. Es decir, que los códigos se pueden correr justo después de ser escritos; en otras palabras, no necesitan compilación previa.

  • Se puede usar como un lenguaje clásico, como un lenguaje orientado a objetos, o como un lenguaje funcional.

  • Es el principal lenguaje de la Ciencia de Datos.

Hello World!

El primer ejemplo clásico de programación es saludar, o sea, decirle al computador que muestre un saludo. Para esto, se usa la función de Python llamada print. Para colocar un saludo (o un texto cualquiera), se debe colocar entre comillas dobles o sencillas dentro del comando print. Entonces, para que el computador muestre un saludo, por ejemplo Hello, World!, debemos escribir en ambiente de código como sigue

print("Hello friend. Hello friend?")
Hello friend. Hello friend?

Note que el resultado se muestra sin las comillas dobles. Estas comillas dobles se usan para decirle al computador que vamos a ingresar texto. Si quisieramos escribir con un salto de linea escribimos “\n” así al escribir print("Hola\nMundo") tenemos:

print("Hola\nMundo")
Hola
Mundo

Variables en Python

Escriba un código que le diga a Python que devuelva el texto:


Sólo sé …
… que nada sé.


# Escriba el código aqui

Variables en Python

Una variable sirve para guardar un valor específico, ya sea numérico, texto u otro tipo de Dato con el nombre con la que se nombre dicha variable. Observe el siguiente ejemplo.

# Asignamos 1 a la variable x

x = 1

print("El valor de la variable x es", x)

# Asignamos "¡Vamos a programar!" a la variable y

y = "¡Vamos a programar!"

print("\nEl valor de la variable y es", y)
El valor de la variable x es 1

El valor de la variable y es ¡Vamos a programar!

Asignación dinámica en Python

En Python, como en R, Julia, Matlab y otros lenguajes no es necesario declarar una variable de antemano, como ocurre en otros lenguajes como C, C++ y muchos otros lenguajes de bajo nivel. La asignación dinámica implica que es posible cambiar el tipo de dato de una variable con tan solo reasignarle un valor. En Python, se delega al programador la responsabilidad de cuidarse de efectos no esperados al cambiar el tipo de una variable. Vea el siguiente ejemplo.

x = 5.6
print('x es número un real:', x)

x = 3+4j
print('x es ahora un número complejo:', x)

x = '25 de mayo'
print('En cambio ahora x es un string:', x)
x es número un real: 5.6
x es ahora un número complejo: (3+4j)
En cambio ahora x es un string: 25 de mayo

Reglas para la creación de variables

  • El nombre de una variable debe comenzar con una letra ó con _.

  • El nombre de una variable no puede comenzar con un número.

  • El nombre de una variable sólo puede contener carácteres alfa-numéricos.

  • El nombre de una variable tiene sensibilidad a mayúsculas y minúsculas (x es diferente de X).

Ejercicio

Escriba un código que le diga a Python que devuelva los textos Tengo my_age años, donde my_age es una variable que tenga asignada su edad.

# Escriba aquí

Tipos de datos básicos en Python

Enteros (int)

Considere el siguiente ejemplo:

x = 1
print(x)
print(type(x))
x = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
print(x)
print(type(x))
1
<class 'int'>
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
<class 'int'>

Se observan dos cosas interesantes. Primero, el tipo de dato es una clase ‘int’. Todo en Python son objetos, incluidos la variables simples. En otro cuaderno estudiaremos las clases y objetos en detalle.

Segundo, En Python puede tener números enteros tan grandes como desee, a diferencia de otros lenguajes. de otros lenguajes.

Para convertir un tipo de dato diferente a int, siempre que sea posible se usa el cast int. Por ejemplo

# '120' es un string

total = '120'
print(total)
print(type(total))

total = int('120')
print(total)
print(type(total))
120
<class 'str'>
120
<class 'int'>

Usando input

La sentencia input se utiliza para solicitar información al usuario. input siempre regresa un string.

edad = int(input('Por favor entre su edad:'))
print(edad)
print(type(edad))
---------------------------------------------------------------------------
StdinNotImplementedError                  Traceback (most recent call last)
/var/folders/w7/ws1ycc_x4ldf54pl86v3j8xr0000gn/T/ipykernel_78844/3882946908.py in <module>
----> 1 edad = int(input('Por favor entre su edad:'))
      2 print(edad)
      3 print(type(edad))

/opt/anaconda3/lib/python3.8/site-packages/ipykernel/kernelbase.py in raw_input(self, prompt)
   1001         """
   1002         if not self._allow_stdin:
-> 1003             raise StdinNotImplementedError(
   1004                 "raw_input was called, but this frontend does not support input requests."
   1005             )

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

Punto Flotante (float)

Lo número reales son representados usando el estándar IEEE 754 double precision.

x = 1.56
print(x)
print(type(x))
1.56
<class 'float'>

Números complejos (complex)

Se representan en la forma \(a + bj\), en donde \(a\) es la parte real y \( b\) la parte imaginaria

z = 3.4 + 4j
print(z)
print(type(z))
(3.4+4j)
<class 'complex'>

Booleanas (bool)

El tipo booleano se utiliza para variables que solamente pueden ser ‘True’ o ‘False’, es decir, valores booleanos o lógicos. Por ejemplo:

t = True 
print(t)
print(type(t))
True
<class 'bool'>

None

Este es un tipo especial de dato utilizado para indicar que una determinada variable no contiene ningún dato. Es muy útil en el control de muchas situaciones, porque sirve para saber si algún objeto a llegado a ser None. Mire el siguiente ejemplo.

b = None
print(b)
print(type(b))

z = 5

b is None
None
<class 'NoneType'>
True
# Pruebe: z is None

Textos: strings

Los string son expresiones que representan una cadena de caracteres, útiles para escribir mensajes y combinarlos con valores que generemos en nuestros procesamientos. Para escribir un texto en Python usamos comillas simples: '...' o comillas dobles: "...". Combinamos comillas para poner comillas adentro:

a='Texto simple escrito entre comillas simples'
print(a)
a
Texto simple escrito entre comillas simples
'Texto simple escrito entre comillas simples'
b="Texto simple escrito entre comillas dobles"
print(b)
b
Texto simple escrito entre comillas dobles
'Texto simple escrito entre comillas dobles'
c='Texto simple escrito entre comillas simples que necesita "adentrico" comillas dobles'
print(c)
Texto simple escrito entre comillas simples que necesita "adentrico" comillas dobles
d="Texto simple escrito entre comillas dobles que necesita 'adentro' comillas simples"
print(d)
Texto simple escrito entre comillas dobles que necesita 'adentro' comillas simples

Como vimos, la función print es la que nos permite imprimir estos mensajes. El texto \n indica una nueva linea en el texto:

print("Una línea\nOtra línea")
Una línea
Otra línea

No obstante, a veces necesitamos escribir \n en un mensaje:

print('La ruta del archivo es C:\nombres\archivo.ipynb')
La ruta del archivo es C:
ombresrchivo.ipynb

En este caso la aparición del símbolo \ dañó el mensaje. La primera solución es la siguiente. ¿puede explicarla por favor?

print('La ruta del archivo es C:\\nombres\\archivo.ipynb')
La ruta del archivo es C:\nombres\archivo.ipynb

Una segunda solución para resolver el problema consiste en escribimos r antes del string, así:

# Qué significa la r???
print(r'La ruta del archivo es C:\nombres\archivo.ipynb')
La ruta del archivo es C:\nombres\archivo.ipynb

Finalmente, podemos recorrer los valores de la cadena de texto de la siguiente forma:

texto="cuidado_con_el_orden"
texto
'cuidado_con_el_orden'

Extrayendo el elemento cero del texto (primer caracter):

print(texto[0])
c

Extrayendo el elemento uno del texto (segundo caracter):

texto[1]
'u'

Extrayendo el elemento cinco hasta el elemento 9 del texto (sin incluir el 9):

texto[5:9]
'do_c'

También se pueden usar índices negativos (Python exclusive):

texto[3:-1]
'dado_con_el_orde'
texto[-1]
'n'

Asignación múltiple

Es posible asignar valores a diferentes variables en una línea de código:

# Asignación múltiple

w, x, y, z = "Apple", "Watermelon", "Grape", 28;

print(w);
print(x);
print(y);
print(z);
print(w,x,y,z,sep=", ");
Apple
Watermelon
Grape
28
Apple, Watermelon, Grape, 28

También es posible asignar un mismo valor a diferentes variables:

# Asignación múltiple del mismo valor

x1 = x2 = x3 = 0.5;
print('x1 =',x1);
print('x2 =',x2);
print('x3 =',x3);
x1 = 0.5
x2 = 0.5
x3 = 0.5

Ejercicio

Explique qué hace el siguiente código. Imprima

x, y = 3, 10

y, x = x, y

print(y,x)
3 10

Cuidado con las variables no asignadas

Generan error al usarse sin ser asignadas.

Observe el siguiente ejemplo:

n # Variable sin asignar
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/tmp/ipykernel_3454/2966927032.py in <module>
----> 1 n # Variable sin asignar

NameError: name 'n' is not defined

Suma de variables y concatenación de variables

Python es tan sencillo e intuitivo, que es posible sumar diferentes variables y sumarlas con el símbolo +. Cuando las variables son numéricas, se suman matemáticamente y cuando es texto se concatenan.

# Sumar dos textos

x = "Python is "; 
y = "awesome";
z =  x + str(y);
print(z);

# Sumar dos números

n1 = 1;
n2 = 5;
suma = n1 + n2;
print(suma);

# Escribir texto y números
print(x+"the number",n1);
Python is awesome
6
Python is the number 1

En el apartado anterior es claro que usamos dos tipos de variables unas textuales y otras numéricas, profundicemos en estos temas.

Operadores Aritméticos y redondeo

La fortuna de que Python reconozca variables numéricas nos permite usarla como una calculadora simple, podemos ejecutar operaciones muy sencillas teniendo en cuenta la siguiente tabla:

Operador

Descripción

+

Suma

-

Resta

*

Multiplicación

/

División

**

Potencia

Ejemplo

Si queremos operar:

\[ 5\times(3-5)^2-\cfrac{6}{(9)^{1/2}}\]

tenemos que escribir:

5*(3-5)**2-(6)/(9**(1/2))
18.0

Recuerde oprimir [Shift]+[Enter].

El orden en que se interpretan las expresiones es como en todos los demás lenguajes comunes de programación.

Ejercicio

Es muy importante usar bien los paréntesis, el uso o desuso puede generar problemas graves en las cuentas, encuentre el error y describa lo que hizo la máquina en los siguientes casos respecto a la operación anterior:

5*3-5**2-(6)/(9**(1/2))
-12.0
5*(3-5)**2-6/(9**1/2)
18.666666666666668
5*(3-5)**2-6/9**1/2
19.666666666666668
5*3-5**2-6/9**1/2
-10.333333333333334

Divsión y residuo entre enteros

La división es una operación bien especial pues la mayoría de ocasiones produce un número con parte fraccionaria. Sin embargo, cuando estábamos pequeños nos enseñaron a dividir enteros dando como respuesta un entero llamado cociente y lo que hacia falta para completar la división, un número llamado residuo. En Python podemos calcular esos valores con \\ para el cociente y %para el residuo. Por ejemplo, sabemos que:

\[ 20 \div 3 = 6 \ \ \ \text{ con residuo } 2\]

tenemos:

20//3
6
20%3
2
3+(-4)**(1/2) # Recordemos un poquito de nuestras matemáticas
(3+2j)

Finalmente, una función elemental y útil para el tratamiento de números decimales es round. Lo usamos para redondear los valores a uno con el decimal que escojamos. Tenemos:

n1=47/3
n1
n2=round(n1)
n2
n3=round(n1,3)
n3

Ejercicio

Use la función round() para redondear el número \(\pi\) hasta 5 cifras decimales.

Pista: Para poder usar el número \(\pi\), use el siguiente código:

# importando el número pi

from math import *

# visualizar pi
print(pi)

# Your code here
round(pi,5)
3.141592653589793
3.14159

Estructuras de control

En cualquier lenguaje de programación existen tres estructuras de control básicas que corresponden a

  • Secuencia

  • Selección (o decisión)

  • Iteración (repetición)

Secuencia

La ejecución de cualquier programa (algoritmo codificado en algún lenguaje de programación) se realiza en orden de aparición de las sentencias. Una sentencia puede ser simple (solamente una instrucción) o compuesta (varias instrucciones).

Ejemplo

Observe el siguiente código Python:

x = 1; 
y = 2;

print(x,y)
1 2

En el ejemplo hay tres sentencias. Dos sentencias de asignación de valores y una sentencia de impresión. Se ejecuta una después de la otra.

Selección (if)

Esta estructura de control está diseñada para que un programa pueda seguir diferentes caminos de ejecución, dependiendo de la evaluación de una expresión lógica. Observe el siguiente ejemplo.

# ejemplo if
x = 5
y = 3

if x>y:
    print("Cinco es mayor que Tres")
    print("lunes")
Cinco es mayor que Tres
lunes

La estructura empieza con la palabra clave if. Luego aparece una condición lógica que es evaluada (x>y). Si la condición es verdadera, como en este caso, se ejecutan las instrucciones escritas dentro de la estructura.

Ahora observe el siguiente cambio

# ejemplo if
x = 3
y = 5

if x>y:
    print("Cinco es mayor que Tres")
    print("lunes")

En este caso, no se imprime nada, debido a que la condición es falsa. Ahora observe el siguiente ejemplo

# ejemplo if
x = 3
y = 5

if x>y:
    print("La condición es verdadera")
    print("Lunes")
else:
    print('La condición es falsa')
    print('Martes')
La condición es falsa
Martes

Pregunta

De acuerdo al script anterior, ¿cuál es la función de la clúsula else?

Ejercicio

Cambie el código anterior para que corra el otro camino de ejecución.

 # Consigne su respuesta aquí.

Ejercicio

El siguiente código calcula la longitud del nombre y escribe una frase acorde a la longitud. Observe que en el comando print() , sep= es un parámetro que separa los valores ingresados dentro de la función print. Como vemos, escribimos N='Tu_nombre' eso asigna a la letra N el texto Tu_nombre. La función len devuelve la longitud de la cadena.

N='Daniel'# cambiar 'Tu_nombre' por su verdadero nombre
if len(N)>10:
    A="es un nombre muy largo"
else:
    A="es un nombre muy corto"

print(N,A,sep=" ")
Daniel es un nombre muy corto
N='Alvaro Mauricio Montenegro Díaz' #cambiar 'Tu_nombre_completo' por su verdadero nombre completo
if len(N)>10:
    A="es un nombre muy largo"
else:
    A="es un nombre muy corto"

print(N,A,sep="/")
Alvaro Mauricio Montenegro Díaz/es un nombre muy largo
N='El nombre'
if len(N)>10:
    A="es un nombre muy largo"
else:
    A="es un nombre muy corto"

print(N,A,sep="         ")
El nombre         es un nombre muy corto

Indentación en Python

Indentar significa mover un bloque de texto hacia la derecha, dejando una serie de espacios o un tabulador para distinguirlo del texto alineado a la izquierda.

Por ejemplo:

Este texto está indentado.

En Python, la identación es obligatoria para indica el alcance de una estructura. Además solamente debe usarse para tal fín.

Ejemplo: Identación en Python

En este ejemplo

# ejemplo if
x = 3
y = 5

if x>y:
    print("Five is greater than Three")
    print("lunes")
    
# por fuera del if
x = 9.6
print(x)
    
9.6

Nota

Sin la indentación, el código produce un error.

x = 3
y = 5
print(x,y)

if x>y:
print("Five is greater than Three")
  File "<ipython-input-46-eb6f8857a709>", line 6
    print("Five is greater than Three")
    ^
IndentationError: expected an indented block

Operadores de comparación

Operador

Descripción

Ejemplo

==

Prueba si dos valores son iguales

3==3

!=

Prueba si dos valores no son iguales entren si

2!=3

<

Prueba si el valor de la izquierza es menor que el de la derecha

4<3

>

Prueba si el valor de la izquierza es mayor que el de la derecha

4<3

<=

Prueba si el valor de la izquierza es menor o igual que el de la derecha

4<=3

>=

Prueba si el valor de la izquierza es mayor igual que el de la derecha

4<=3

Operadores Lógicos

Operador

Descripción

Ejemplo

and

Regresa verdadero si el valor de las izquierda y el de la derecha son verdaderos

(3<4) and (5>1)

or

Regresa verdadero si uno de los dos valores a(izquierda o derecha es verdadero, o ambos

(3<4) or (5<1)

not

Regresa verdadero si el valor que se esta evaluado es falso

not 3>2

Ejercicio

Verifique que entiende qué hace el siguiente código. ¿Cuál es la salida?

edad = 15
status = None

if (edad >12) and (edad<20):
    status = 'adolescente'
else:
    status = 'no adolescente'

print(status)
adolecente

Estructura de repetición [ciclos]

Este tercer tipo de estructura de control se usa para los casos en los cuales es necesario correr un proceso varas veces en forma continua.

Ciclo while

Al comienzo del ciclo se evalúa una condición. Si la condición es verdadera se ejecuta de nuevo el ciclo. En otro caso, termina. Corra y analice el siguiente fragmento (snippet) de código

contador = 0

print('Starting')
while contador < 10:
    #Instrucciones útiles
    print(contador,' ', end='')
    contador = contador + 1
    
print()
print('Done')
Starting
0  1  2  3  4  5  6  7  8  9  
Done

Ejercicio

¿Qué hace el parámetro end en el print anterior?

Ciclo for

En este caso se usa una variable de salto que va recorriendo un conjunto de valores hasta terminar. Revise el siguiente snippet.

print('\nStart:')
for i in range(20):
    # Instrucciones útiles
    print(i, ' ', end='')

print('\nDone.')
Start:
0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  
Done.

Pregunta

¿Cuál es la diferencia entre while y for?

Break

Se usa para terminar la ejecución de un ciclo while o for. Corra el siguiente ejemplo dadno difentes valores.

for  i in range(10):
    print(i)
    if i==5:
        break
0
1
2
3
4
5

Estructuras de control anidadas

Es posible incluir (o anidar) estructuras de control dentro de otras estructuras de control.

Esto es de gran utilidad para realizar programas de mayor complejidad.

Ejemplo:

x = 5
y = 3
print(x,y)
if x>y:
    print("Cinco es mayor que tres")
    for i in range(10):
        print(i)
    x = 9.9

y = 2
print(x, y)
Cinco es mayor que tres
0
1
2
3
4
5
6
7
8
9
9.9 2

No importa cuántos espacios en blanco se dejen, siempre y cuando sea al menos uno:

if 5 > 3:
    print("Five is greater than Three")  
if 5 > 3:
       print("Five is greater than Three")
Five is greater than Three
Five is greater than Three

Ciclos anidados

Un ejemplo de ciclos anidados, por ejemplo crear las tablas de multiplicar, puede ser de gran utilidad para realizar procesos iterativos.

Ejemplo:

print("\nAlgunas Tablas de Multiplicar:")
for i in range(1,5): # i va aumentado desde 1, luego va a 2,3,...
    print(f'\nTabla del {i}\n')
    for j in range(1,13): # Recorre desde el 1 hasta el 12
        print(i,"x",j," = ",i*j,sep='')
Algunas Tablas de Multiplicar:

Tabla del 1

1x1 = 1
1x2 = 2
1x3 = 3
1x4 = 4
1x5 = 5
1x6 = 6
1x7 = 7
1x8 = 8
1x9 = 9
1x10 = 10
1x11 = 11
1x12 = 12

Tabla del 2

2x1 = 2
2x2 = 4
2x3 = 6
2x4 = 8
2x5 = 10
2x6 = 12
2x7 = 14
2x8 = 16
2x9 = 18
2x10 = 20
2x11 = 22
2x12 = 24

Tabla del 3

3x1 = 3
3x2 = 6
3x3 = 9
3x4 = 12
3x5 = 15
3x6 = 18
3x7 = 21
3x8 = 24
3x9 = 27
3x10 = 30
3x11 = 33
3x12 = 36

Tabla del 4

4x1 = 4
4x2 = 8
4x3 = 12
4x4 = 16
4x5 = 20
4x6 = 24
4x7 = 28
4x8 = 32
4x9 = 36
4x10 = 40
4x11 = 44
4x12 = 48

Ejemplo 2:

for i in range(0,11):             #line 1
    for j in range(i):            #line 2
        print('*', end='')        #line 3
    print('')                     #line 4
*
**
***
****
*****
******
*******
********
*********
**********

Ejercicio

Escriba un código que le diga al computador que devuelva los textos I’m ready to code! si su nombre tiene más de diez caracteres o Hello, World! si pasa lo contrario, para medir la longitud de su nombre utilice la función len().

len("Tu_nombre") #pruebe la funcion len. Cambia Tu_nombre por su nombre real.
9
# Ingrese aquí el condicional

Autores

  1. Alvaro Mauricio Montenegro Díaz, ammontenegrod@unal.edu.co

  2. Daniel Mauricio Montenegro Reyes, dextronomo@gmail.com

Comentarios