Apuntes Python V2
Apuntes Python V2
Apuntes Python V2
Í NDICE
1 Introducción a la programación 4
1.1 Conceptos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Representación de datos en las computadoras . . . . . . . . . . . . . 7
1.2.1 Representación binaria de los números naturales . . . . . . . 8
1.2.2 Cambiar de un sistema a otro . . . . . . . . . . . . . . . . . . 11
1.3 Operaciones básicas con números binarios . . . . . . . . . . . . . . 11
1.4 Pseudocódigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5 Variables en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.1 Listas en Python . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5.2 Cadenas de texto en Python . . . . . . . . . . . . . . . . . . . 18
1.5.3 Constantes en Python . . . . . . . . . . . . . . . . . . . . . . 19
1.5.4 Comparando valores en Python . . . . . . . . . . . . . . . . 20
1.6 Condicionales en Python . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.6.1 Solicitando información al usuario . . . . . . . . . . . . . . . 21
1
Luisantos Bonilla Mejía Programación con Python
3 Módulos 42
3.1 Módulos en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.1.1 Usando Módulos . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.1.1.1 Import . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.1.1.2 From e Import . . . . . . . . . . . . . . . . . . . . . 43
3.2 Creación de módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.2.1 Usando As . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.2.1.1 Paquetes y módulos . . . . . . . . . . . . . . . . . . 46
3.3 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4 Secuencias en Python 48
4.1 Tuplas y listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.1.1 Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.2 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2.1 Métodos para cadenas de texto. . . . . . . . . . . . . . . . . . 49
4.2.2 Métodos para las listas. . . . . . . . . . . . . . . . . . . . . . 52
4.2.3 Métodos para tuplas . . . . . . . . . . . . . . . . . . . . . . . 55
4.3 Diccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3.1 Métodos de los diccionarios . . . . . . . . . . . . . . . . . . . 57
2
Programación con Python Luisantos Bonilla Mejía
4.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5 Ficheros 60
5.1 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.1.1 Matriz en Numpy. . . . . . . . . . . . . . . . . . . . . . . . . 61
5.1.1.1 Atributos de las matrices. . . . . . . . . . . . . . . . 61
5.1.1.2 Operaciones con matrices. . . . . . . . . . . . . . . 63
5.1.1.3 Métodos de las matrices. . . . . . . . . . . . . . . . 65
5.2 Archivos .txt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.2.1 Atributos de los archivos. . . . . . . . . . . . . . . . . . . . . 68
5.3 Archivos .csv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.3.1 Métodos de Pandas. . . . . . . . . . . . . . . . . . . . . . . . 69
5.3.1.1 Métodos de los DataFrame de Pandas. . . . . . . . 71
5.4 Laboratorio - 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.5 Laboratorio - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6 Recursividad 78
6.1 Funciones recursivas . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.2 Tipos de recursión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.3 Algoritmos de ordenamiento . . . . . . . . . . . . . . . . . . . . . . 81
6.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7 Programación funcional 82
7.1 Función lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
7.2 filter, map, reduce. . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.2.1 filter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.2.2 map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.2.3 reduce. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.3 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
3
Luisantos Bonilla Mejía Programación con Python
1. I NTRODUCCIÓN A LA PROGRAMACIÓN
4
Programación con Python Luisantos Bonilla Mejía
5
Luisantos Bonilla Mejía Programación con Python
Glosario
Términos Definición
Lenguaje informático Es un idioma artificial, utilizado por ordenado-
res, cuyo fin es transmitir información de al-
go a alguien. Los lenguajes informáticos, pue-
den clasificarse en: a) lenguajes de programa-
ción (Python, PHP, Pearl, C, etc.); b) lenguajes de
especificación (UML); c) lenguajes de consulta
(SQL); d) lenguajes de marcas (HTML, XML); e)
lenguajes de transformación (XSLT); f) protoco-
los de comunicaciones (HTTP, FTP); entre otros.
Lenguaje de programa- Es un lenguaje informático, diseñado para expre-
ción sar órdenes e instrucciones precisas, que deben
ser llevadas a cabo por una computadora. El mis-
mo puede utilizarse para crear programas que
controlen el comportamiento físico o lógico de
un ordenador. Está compuesto por una serie de
símbolos, reglas sintácticas y semánticas que de-
finen la estructura del lenguaje.
Lenguajes interpreta- A diferencia de los lenguajes compilados, no re-
dos quieren de un compilador para ser ejecutados
sino de un intérprete. Un intérprete, actúa de
manera casi idéntica a un compilador, con la sal-
vedad de que ejecuta el programa directamen-
te, sin necesidad de generar previamente un eje-
cutable. Ejemplo de lenguajes de programación
interpretado son Python, PHP, Ruby, Lisp, entre
otros.
Tipado dinámico Un lenguaje de tipado dinámico es aquel cuyas
variables, no requieren ser definidas asignando
su tipo de datos, sino que éste, se auto-asigna en
tiempo de ejecución, según el valor declarado.
Multiplataforma Significa que puede ser interpretado en diversos
Sistemas Operativos como GNU/Linux, Win-
dows, Mac OS, Solaris, entre otros.
Multiparadigma Acepta diferentes paradigmas (técnicas) de pro-
gramación, tales como la orientación a objetos,
aspectos, la programación imperativa y funcio-
nal.
Código fuente Es un conjunto de instrucciones y órdenes lógi-
cas, compuestos de algoritmos que se encuen-
tran escritos en un determinado lenguaje de pro-
gramación, las cuales deben ser interpretadas o
compiladas, para permitir la ejecución del pro-
grama informático.
6
Programación con Python Luisantos Bonilla Mejía
Unidades de información
Unidad Símbolo Equivalencia
Bit b 0y1
Byte B 8b
Kbyte KB 1024 B
Mbyte MB 1024 KB
Gbyte GB 1024 MB
Tbyte TB 1024 GB
7
Luisantos Bonilla Mejía Programación con Python
1. ASCII: El código ASCII (por sus siglas en ingles American Standard Code
for Information Interchange) es el código estándar para el intercambio de
información (se pronuncia Aski).
2. EBCDIC: El código (por sus siglas en ingles EBCDIC Extended Binary Co-
ded Decimal Interchange Code) es un código binario que representa carac-
teres alfanuméricos, controles y signos de puntuación. Cada carácter está
compuesto por 8 bits.
8
Programación con Python Luisantos Bonilla Mejía
Como vemos tenemos que ir dividiendo entre dos el cociente en cada nuevo
paso, luego para saber el código binario del número 5, tomamos el último cocien-
te y tomamos los residuos de forma ascendente como indica la flecha roja. Así
tenemos que 5 en código binario es 101.
Ahora para recuperar la información a partir del código binario, hacemos una
multiplicación de derecha a izquierda, multiplicando el dígito binario por una
potencia de dos, donde el exponente de dos es la posición del dígito binario. Las
posiciones comienzan desde cero. Implementemos lo anterior para la secuencia
101.
(1 ∗ 22 ) + (0 ∗ 21 ) + (1 ∗ 20 ) = 4 + 0 + 1 = 5
Una pregunta que puede surgir es ¿podemos hacer lo mismo pero con un nú-
mero diferente de dos?
La respuesta a la pregunta anterior es sí, veamos un caso usando el número
entero 16 para realizar la codificación y decodificación.
Codificación:
9
Luisantos Bonilla Mejía Programación con Python
Decodificación:
(1 ∗ 161 ) + (3 ∗ 160 ) = 16 + 3 = 19
Observación: Notemos que son los mismos pasos, salvo que se ha cambiado
el 2 por 16.
Teniendo esto en cuenta, tenemos la siguiente tabla de equivalencia entre un
código binario y un código hexadecimal.
10
Programación con Python Luisantos Bonilla Mejía
(1 ∗ 161 ) + ( B ∗ 160 ) = 16 + 11 = 27
1. Sumar. Para sumar números binarios lo hacemos de manera usual, pero te-
niendo en cuenta las siguientes operaciones.
• 0+0 = 0
• 1+0 = 1
• 0+1 = 1
• 1 + 1 = 0, y se lleva 1 a la siguiente columna (para sumar).
Ejemplo:
101+ ⇔ 5+
11 ⇔ 3
1000 ⇔ 8
2. Restar. Para restar números binarios lo hacemos de manera usual, pero te-
niendo en cuenta las siguientes operaciones.
• 0−0 = 0
• 1−0 = 1
• 1−1 = 0
• 0 − 1 = 1, y se lleva 1 a la siguiente columna (para restar).
11
Luisantos Bonilla Mejía Programación con Python
Ejemplo:
101- ⇔ 5-
11 ⇔ 3
010 ⇔ 2
101 × 11 ⇔ 5×3
101 15
101
1111 ⇔ 15
Ejercicios:
12
Programación con Python Luisantos Bonilla Mejía
• 11111 ÷ 11
2. Investigar las reglas para realizas operaciones sobre los números reales co-
dificados en el sistema binario.
1.4 Pseudocódigo
Proceso Nombre_del_Programa
acción 1
acción 2
...
acción n
FinProceso
guaje.
13
Luisantos Bonilla Mejía Programación con Python
Proceso Numero_par
n #un numero entero positivo.
si el residuo de n al ser dividido por 2 es igual a cero:
imprimir n es par
sino:
imprimir n es impar
FinProceso
********
* Hola *
* Mundo*
********
imprimir Hola
imprimir Un gusto
14
Programación con Python Luisantos Bonilla Mejía
5
∠ < class ’ int ’ >
1 b = 5.5
¥ 2 print (b)
3 p r i n t ( type (b) )
5.5
∠ < class ’ float ’ >
1 c = " H o l a Mundo"
¥ 2 print (c)
3 p r i n t ( type ( c ) )
Hola Mundo
∠ < class ’ str ’ >
[1 , 1.1 , ’ Hola ’ , [ ’ xD ’ ]]
∠ < class ’ list ’ >
15
Luisantos Bonilla Mejía Programación con Python
5.5
∠ < class ’ float ’ >
1 b = " H o l a de n u e v o "
¥ 2 print (b)
3 p r i n t ( type (b) )
Hola de nuevo
∠ < class ’ str ’ >
Lista: es un tipo de dato que almacena enteros (int), reales (float) y cadenas
de texto (str), internamente cada posición puede ser un tipo de datos distinto.
También dentro de pueden almacenar listas (list).
Ejemplo:
1 m i _ l i s t a = [ " c a d e n a de t e x t o " , 1 5 , 2 . 8 , " o t r o d a t o " , 2 5 ]
¥ 2 print ( mi_lista )
∠ [ " cadena de texto " , 15 , 2.8 , " otro dato " , 25]
Las listas pueden pensarse como una secuencia de datos ordenados por su
posición dentro de la lista; esto quiere decir que cada elemento dentro de la lis-
ta tiene una posición, estas posiciones comienzan a enumerarse de izquierda a
derecha comenzando desde cero y termina una unidad menos a la cantidad de
16
Programación con Python Luisantos Bonilla Mejía
elementos que posea la lista (en programas como Matlab u Octave la numeración
comienza desde uno hasta el número total de elementos que posea la lista).
A la posición de cada elemento se les llamará índice, siendo el índice cero (0)
el perteneciente al primer elemento.
Ejemplo:
1 m i _ l i s t a = [ " c a d e n a de t e x t o " , 1 5 , 2 . 8 , " o t r o d a t o " , 2 5 ]
2 print ( mi_lista [0 ])
¥ 3 print ( mi_lista [3 ])
4 print ( mi_lista [4 ])
cadena de texto
∠ otro dato
25
Además, a través del índice, podemos cambiar los elementos de una lista en el
lugar que especifica dicho índice.
Ejemplos:
1 m i _ l i s t a = [ " c a d e n a de t e x t o " , 1 5 , 2 . 8 , " o t r o d a t o " , 2 5 ]
¥ 2 print ( mi_lista [0 ])
∠ cadena de texto
17
Luisantos Bonilla Mejía Programación con Python
∠ 2
2.8
∠ ¡ Hola mundo !
18
Programación con Python Luisantos Bonilla Mejía
5 print ( texto [ 1 : 5 ] )
6
¥
7 print ( len ( texto ) )
a
ola
∠ ola M
10
1 t e x t o = " H o l a Mundo"
¥ 2 nuevo_texto = " Hola o t r a vez "
3 p r i n t ( t e x t o + " " + nuevo_texto )
En Python hay valores que son únicos y que se pueden pensar como constan-
tes, los cuales son:
1. None: Este valor significa literalmente nada. Es muy útil para crear variables
que no queramos utilizar aún.
3. False: Este valor significa literalmente Falso. Es de gran utilidad para deno-
tar que cierta condición es falsa.
19
Luisantos Bonilla Mejía Programación con Python
Observación: Para acceder a esta información basta escribir None, True o False.
Por esa razón son constantes, porque tienen identificador (nombre).
Para comparar valores en Python se utiliza el doble igual (==), esta instrucción
devuelve True, si ambas expresiones son equivalentes o False, si no son equiva-
lente.
Ejemplos:
¥ 1 p r i n t (2==2)
∠ True
¥ 1 p r i n t (2==5)
∠ False
1. print(2<3)
2. print(2<=3)
3. print(2>3)
4. print(2>=3)
20
Programación con Python Luisantos Bonilla Mejía
if n%2==0:
print("Es par")
if n%2==0:
print("Es par")
else:
print("Es impar")
if n<3==True:
print("Es menor")
elif n>3==True:
print("Es mayor")
>>> n = input()
21
Luisantos Bonilla Mejía Programación con Python
∠ Ingrese un entero : _
∠ Ingrese un entero : _
Ciclo While: este ciclo evalúa una condición e ingresa al ciclo mientras ésta
sea verdadera. Caso contrario, finaliza las iteraciones y continúa con el resto del
programa.
Por ejemplo:
1 count = 0
2 while count < 5:
¥ 3 p r i n t ( c o u n t , " e s menor que 5 " )
4 count = count + 1
5 p r i n t ( c o u n t , " no e s menor que 5 " )
0 es menor que 5
1 es menor que 5
∠ 2 es menor que 5
3 es menor que 5
4 es menor que 5
4 En Python 2 la instrucción input () mantiene el tipo de información ingresada, y existe la instruc-
22
Programación con Python Luisantos Bonilla Mejía
5 no es menor que 5
∠
Una característica de los ciclos while es que la acción a repetirse puede hacerse
desde 0 hasta un número indefinido de veces. Es posible que la cantidad máxima
de iteraciones no pueda conocerse una vez iniciada la ejecución del programa.
Ciclo For: este ciclo asigna a una variable contador cada uno de los datos in-
cluidos en una secuencia. A diferencia del ciclo while, no evalúa una condición,
este ciclo finaliza cuando la variable contador llega al final de la secuencia.
Por ejemplo:
1 f o r count i n [ 0 , 1 , 2 , 3 , 4 ] :
¥ 2 p r i n t ( c o u n t , " e s menor que 5 " )
3 p r i n t ( c o u n t , " no e s menor que 5 " )
0 es menor que 5
1 es menor que 5
2 es menor que 5
∠ 3 es menor que 5
4 es menor que 5
4 no es menor que 5
23
Luisantos Bonilla Mejía Programación con Python
4. Si se colocan dos de los tres argumentos, se asume que son inicio y fin.
Por ejemplo:
1 f o r count i n range (10) :
¥ 2 p r i n t ( c o u n t , end=" , " )
∠ 0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,
∠ 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,
∠
1 f o r c o u n t i n r a n g e (0 , −8 , −1) :
¥ 2 p r i n t ( c o u n t , end=" , " )
∠ 0 , -1 , -2 , -3 , -4 , -5 , -6 , -7 ,
∠
1 f o r count i n range (10 ,2) :
¥ 2 p r i n t ( c o u n t , end=" , " )
pass: Esta sentencia hace nada. Se utiliza cuando una sentencia se requiere
sintácticamente, pero no funcionalmente.
24
Programación con Python Luisantos Bonilla Mejía
Por ejemplo:
if x>=0:
pass
else:
x=-x
else: Las estructuras iterativas también pueden contener una cláusula else. Se
ejecuta cuando el ciclo termina al agotar la lista (for) o cuando la condición se
evalúa falsa (while).
Por ejemplo: Generar los números primos menores de un dígito.
1 f o r n i n range (2 , 10) :
2 f o r x in range (2 , n) :
3 i f n % x == 0 :
¥ 4 break
5 else : # el ciclo f i n a l i z ó sin r e c u r r i r a break
6 p r i n t ( n , ’ es primo ’ )
25
Luisantos Bonilla Mejía Programación con Python
2 es primo
3 es primo
∠ 5 es primo
7 es primo
2.4 Listas
Un tipo de dato especial dentro de Pythones la lista, este tipo de dato puede
almacenar colecciones de datos de diversos tipos (incluyendo ellos mismos).
Lista: son variables que almacenan enteros (int), reales (float) y cadenas de
texto (str), internamente cada posición puede ser un tipo de datos distinto. Tam-
bién dentro de pueden almacenar listas (list).
Ejemplo:
1 m i _ l i s t a = [ " c a d e n a de t e x t o " , 1 5 , 2 . 8 , " o t r o d a t o " , 2 5 ]
¥ 2 print ( mi_lista )
∠ [ " cadena de texto " , 15 , 2.8 , " otro dato " , 25]
Las listas pueden pensarse como una secuencia de datos ordenados por su
posición dentro de la lista; esto quiere decir que cada elemento dentro de la lis-
ta tiene una posición, estas posiciones comienzan a enumerarse de izquierda a
derecha comenzando desde cero y termina una unidad menos a la cantidad de
elementos que posea la lista (en programas como Matlab u Octave la numeración
comienza desde uno hasta el número total de elementos que posea la lista).
A la posición de cada elemento se les llamará índice, siendo el índice cero (0)
el perteneciente al primer elemento.
Ejemplo:
1 m i _ l i s t a = [ " c a d e n a de t e x t o " , 1 5 , 2 . 8 , " o t r o d a t o " , 2 5 ]
2 print ( mi_lista [0 ])
¥ 3 print ( mi_lista [3 ])
4 print ( mi_lista [4 ])
26
Programación con Python Luisantos Bonilla Mejía
Además, a través del índice, podemos cambiar los elementos de una lista en el
lugar que especifica dicho índice.
Ejemplo:
1 m i _ l i s t a = [ " c a d e n a de t e x t o " , 1 5 , 2 . 8 , " o t r o d a t o " , 2 5 ]
2 print ( mi_lista [0 ])
3 m i _ l i s t a [ 0 ] = 2 #Cambiamos " c a d e n a de t e x t o " p o r 2 .
4 print ( mi_lista [0 ])
¥ 5
6 print ( mi_lista [2 ])
7 m i _ l i s t a [ 2 ] = " ¡ H o l a mundo ! " #Cambiamos 2 . 8 p o r " ¡ H o l a mundo ↘
!".
8 print ( mi_lista [2 ])
27
Luisantos Bonilla Mejía Programación con Python
Ejemplo:
1 m i _ l i s t a = [ 2 , 1 5 , " ¡ H o l a mundo ! " , " o t r o d a t o " , 2 5 ]
2 print ( mi_lista )
¥ 3 m i _ l i s t a . append ( " Nuevo Dato " )
4 print ( mi_lista )
∠ 3
∠ 5
Observación: al concatenar dos listas, el resultado es una nueva lista que con-
tiene en las primeras posiciones los elementos de la lista a la izquierda del símbolo
+, y luego van los elementos de la segunda lista a la derecha del símbolo +.
También, podemos usar la concatenación para agregar un elemento de cual-
quier tipo a una lista. La sintaxis es la siguiente: lista += [elemento_nuevo] o
lista = lista + [elemento_nuevo].
Nota: el operador suma (+) necesita que los dos operandos sean listas.
28
Programación con Python Luisantos Bonilla Mejía
Ejemplo:
1 lista1 = [1 ,2 ,3]
¥ 2 l i s t a 1 += [ " Nuevo d a t o " ]
3 print ( lista1 )
29
Luisantos Bonilla Mejía Programación con Python
def mi_funcion():
instrucciones
Donde:
∠ ¡ Hola mundo !
2.5.2 Parámetros
def mi_funcion(lista_de_parametros):
instrucciones
Donde:
30
Programación con Python Luisantos Bonilla Mejía
∠ 2
Ejemplo:
1 def mi_funcion ( a = 1 , b = 3) :
2 p r i n t ( a−b )
3
¥ 4 mi_funcion (5 ,3)
5 mi_funcion ( )
6 mi_funcion (6)
∠ 2
-2
31
Luisantos Bonilla Mejía Programación con Python
3
∠
Como podemos observar, al parámetro a se le ha asignado 1 y a b, 2, en caso
que la función sea llamada sin argumentos, por esta razón cuándo ejecutamos
mi_funcion(), el resultado7 en pantalla es −2.
Además, note se que en el caso de la instrucción mi_funcion(6), la función
toma como valor para a el número 6 (en el caso de a ver más parámetros y menos
argumentos, Python irá asignando en orden de izquierda a derecha, argumento
con parámetro).
8
∠ El texto ingresado es : Hola
32
Programación con Python Luisantos Bonilla Mejía
y especificando su valor.
Ejemplo:
1 d e f f u n c i o n _ 2 ( numero , t e x t o ) :
2 p r i n t ( 2 ∗ ∗ numero )
¥ 3 p r i n t (" El texto ingresado es : " , texto )
4
5 f u n c i o n _ 2 ( t e x t o = " H o l a " , numero = 3 )
8
∠ El texto ingresado es : Hola
None: Es el único valor del tipo NoneType. None se usa con frecuencia para re-
presentar la ausencia de un valor, como cuando los argumentos predeterminados
no se pasan a una función.
Como se mencionado anteriormente, si no deseamos colocar valores por de-
fecto a los parámetros de una función, podemos usar None, y mostrar un mensaje
en pantalla, indicando que no se colocaron argumentos.
Ejemplo:
1 d e f m i _ f u n c i o n ( a = None , b = None ) :
2 i f a == None o r b == None :
3 p r i n t ( " E r r o r , s e n e c e s i t a n d o s nú m eros como a r g u m e n t o s ↘
para e j e c u t a r l a f u n c i ón" )
4 else :
¥ 5 p r i n t ( a−b )
6
7 mi_funcion ( )
8 mi_funcion (6)
9 mi_funcion (5 ,3)
33
Luisantos Bonilla Mejía Programación con Python
2
∠ 2
∠ (2 , 5 , 3 , [5 , 3])
pass: es una operación nula, cuando se ejecuta, no sucede nada. Es útil como
34
Programación con Python Luisantos Bonilla Mejía
Las variables por defecto son locales en Python, esto quiere decir que las va-
riables definidas dentro de una función no podrán ser utilizadas fuera de ellas.
Para entender mejor lo descrito antes, veamos un ejemplo.
Ejemplo:
1 d e f suma ( x , y ) :
2 a=1
¥ 3 r e t u r n x+y
4
5 print (a)
2
∠ 5
35
Luisantos Bonilla Mejía Programación con Python
∠ 1
En la medida que interactuamos con Python, nos podemos encontrar con al-
gunos errores, estos los podemos clasificar como errores de sintaxis y errores de
excepción. El primer tipo, es quizás el más conocido, ya que este aparece en pan-
talla cuando escribimos algo que no está dentro del lenguaje de Python.
Ejemplo:
¥ 1 if x
36
Programación con Python Luisantos Bonilla Mejía
El segundo tipo de errores que podemos encontrar en Python son los errores
de excepción, este tipo son el resultado de un error lógico o de operación no válida,
en otras palabras está bien escrito en el lenguaje Python, pero no tiene sentido.
Veamos algunos ejemplos:
Ejemplos:
¥ 1 1/0
¥ 1 "2" +[2]
∠ TypeError : can only concatenate str ( not " list " ) to str
Nota: Estos tipos de errores hacen que se detenga la ejecución del programa.
Como vemos, los errores producidos son errores donde no está definida la ope-
ración, sin embargo están correctamente bien definida en el lenguaje de Python.
Los errores de excepción podemos de alguna manera controlarlos, y hacer que
nuestro programa no pare su ejecución, esto lo logramos con try y except. La
partícula try nos permite buscar errores en un bloque de código. Por otro lado
except, te permite manejar los errores encontrados, especificando en pantalla que
ha sucedido un error, pero permitiendo que el programa continué su ejecución
con normalidad.
Ejemplo:
1 try :
2 1/0
¥ 3 except :
4 p r i n t ( "No s e p u e d e d i v i d i r por cero " )
En los primeros ejemplos vimos como Python ya clasifica estos tipos8 de erro-
res, por ejemplo 1/0, es un error del tipo ZeroDivisionError, entonces nosotros
podemos ir buscando un tipo de error en específico en nuestros códigos por medio
de except.
Ejemplo:
1 try :
¥ 2 1/0
3 except Z e r o D i v i s i o n E r r o r :
8 Una lista completa de los diferentes tipos de excepciones que podemos usar en Python 3, lo po-
37
Luisantos Bonilla Mejía Programación con Python
∠ 5
38
Programación con Python Luisantos Bonilla Mejía
Ejemplo:
1 d e f suma ( x , y ) :
2 """
3 E s t a f u n c i ó n suma d o s nú m eros r e a l e s
4 V a l o r e s de e n t r a d a : x , y ( d e b e n s e r nú mer os r e a l e s )
5 V a l o r e s de s a l i d a : r ( e s t e e s e l r e s u l t a d o de sumar x con ↘
y)
6
7 Ejemplo :
¥ 8 >>> suma ( 2 , 3 )
9 5
10
11 Creador : Luisantos B o n i l l a (09/05/2020)
12 """
13 r = x + y
14 return r
15
16 p r i n t ( suma ( 3 , 4 ) )
∠ 7
Nota: La documentación de una función debe colocarse siempre entre las tri-
ples comillas, o sea la sintaxis es """texto""".
La documentación nunca se despliega en pantalla mientras se ejecuta la fun-
ción, ya que es un recurso de carácter informativo, así para que podamos ver dicha
documentación es necesario usar help.
Ejemplo:
1 d e f suma ( x , y ) :
2 """
3 E s t a f u n c i ó n suma d o s nú me ros r e a l e s
4 V a l o r e s de e n t r a d a : x , y ( d e b e n s e r nú mer os r e a l e s )
5 V a l o r e s de s a l i d a : r ( e s t e e s e l r e s u l t a d o de sumar x con ↘
y)
6
7 Ejemplo :
¥ 8 >>> suma ( 2 , 3 )
9 5
10
11 Creador : Luisantos B o n i l l a (09/05/2020)
12 """
13 r = x + y
14 return r
15
16 h e l p ( suma )
∠ suma (x , y )
Esta funci ó n suma dos n ú meros reales
Valores de entrada : x , y ( deben ser n ú meros reales )
Valores de salida : r ( este es el resultado de sumar x con y )
39
Luisantos Bonilla Mejía Programación con Python
Ejemplo :
>>> suma (2 ,3)
∠ 5
Observación: Notese que para usar help, solo es necesario colocar entre pa-
réntesis el nombre de la función (ejemplo: help(suma)).
2.9 Ejercicios - 1
2. Dadas dos listas, hacer un programa que imprima los elementos de la pri-
mera lista en orden normal (respecto a su índice), y la segunda en orden
inverso, como por ejemplo:
3. Escribir un programa que sume dos listas, elemento por elemento (las listas
solo deben tener elementos enteros o reales). Además, considere el hecho
que pueden ser listas de diferentes tamaños.
6. Escribir un programa que tome dos listas y las concatene, pero que el re-
sultado sea una lista con elementos alternados de las dos listas dadas, por
ejemplo:
40
Programación con Python Luisantos Bonilla Mejía
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
2.10 Ejercicios - 2
Indicaciones: Crea un archivo .py para cada ejercicio. Además, valida los pará-
metros de cada función teniendo en cuenta el tipo de valor a usar. También, en el
archivo debes implementar los ejemplos necesarios para corroborar el buen fun-
cionamiento de la función.
1. Cree una función que devuelva el área de un triángulo dadas las coordena-
das de sus vértices. Nota: El área de un triángulo se puede calcular con la
siguiente formula:
1
A= | x2 y3 − x3 y2 − x1 y3 + x3 y1 + x1 y2 − x2 y1 |
2
2. Cree un función que dada una lista de números devuelva la moda de la lista
de números presentado.
3. Escribir una función que dado un número entero, devuelva otro con sus
dígitos invertidos.
4. Escriba una función que devuelva el elemento más grande y el más pequeño
en una lista..
5. Escribir una función que reciba un número entero y devuelva una cadena
con una representación como esta: 1569 = 1*10^3+5*10^2+6*10^1+9*10^0
41
Luisantos Bonilla Mejía Programación con Python
7. Diseña una función que reciba una lista de cadenas y devuelva el prefijo
común más largo. Por ejemplo, la cadena "pol" es el prefijo común más
largo de esta lista:
8. Escribir una función que calcule la cantidad de días que han transcurrido en
un año hasta una fecha dada.
10. Escriba una función que rote una lista (sin hacer copias de la lista dada) n
espacios a la izquierda cada elemento.
11. Escribir una función que tome una ecuación de primer grado como texto, y
que calcule la solución.
3. M ÓDULOS
9 Las clases son estructuras más complejas que las funciones en Python. las clases serán estudiadas
Numpy es una librería. Las librerías serán tratadas como módulo, ya que la sintaxis para usar sus
funciones es similar.
42
Programación con Python Luisantos Bonilla Mejía
3.1.1.1. Import
Para usar un módulo en otro programa, debe usarse la sentencia import, al
inicio de nuestro programa o antes de usar alguna función del módulo. La sintaxis
es: import nombre_del_modulo
Una vez importado el módulo, la sintaxis para usar una función del módulo
debe ser:
nombre_del_modulo.nombre_de_la_funcion(argumentos)
Lo mismo aplica si queremos usar las constantes del módulo, solo debemos
cambiar el nombre de la función por el nombre de la constante.
Ejemplos:
1 i m p o r t numpy
2 a=4
¥ 3 print (a)
4
5 p r i n t ( numpy . c o s ( 1 ) )
4
∠ 0 .5 4 03 0 23 0 5 8 6 8 1 3 9 8
1 a=4
2 print (a)
¥ 3 i m p o r t numpy
4 p r i n t ( numpy . c o s ( 1 ) )
4
∠ 0 .5 4 03 0 23 0 5 8 6 8 1 3 9 8
Observación: Notemos que para usar las funciones que las librerías11 contie-
nen, se usa la misma sintaxis que para los módulos, por está razón los trataremos
como módulos especiales.
43
Luisantos Bonilla Mejía Programación con Python
Ejemplos:
1 f r o m numpy i m p o r t ∗
2 a=4
¥ 3 print (a)
4
5 p r i n t ( cos (1) )
4
∠ 0 .5 4 03 0 23 0 5 8 6 8 1 3 9 8
1 a=4
2 print (a)
¥ 3 f r o m numpy i m p o r t ∗
4 p r i n t ( cos (1) )
4
∠ 0 .5 4 03 0 23 0 5 8 6 8 1 3 9 8
4
∠ 0 .5 4 03 0 23 0 5 8 6 8 1 3 9 8
1 a=4
2 print (a)
¥ 3 f r o m numpy i m p o r t c o s
4 p r i n t ( cos (1) )
4
∠ 0 .5 4 03 0 23 0 5 8 6 8 1 3 9 8
Observación: En este ejemplo será imposible usar otra función del módulo es-
pecial numpy, porque se especificó que la función cos sea la única que se importe,
44
Programación con Python Luisantos Bonilla Mejía
A lo largo del curso hemos estado creando módulos inconscientemente (de al-
guna manera claro), ahora para crear un módulo estrictamente debemos crear un
archivo con extensión .py, y dicho archivo debe contener solo funciones y cons-
tates (si fuese necesario). Nuestros módulos no deben contener pruebas de las
funciones, porque serán cargadas por defecto a la hora de importar el módulo.
Ejemplo: Considere el módulo llamado aritmética.py, que contenga la siguientes
funciones:
def sumar(x,y):
return x+y
def restar(x,y):
return x-y
Observación: Este archivo que solo contiene dos funciones es un módulo con
nombre aritmética.
Una pregunta valida sería: ¿cómo puedo hacer pruebas para saber si las funcio-
nes del módulo están bien hechas? Para ello debemos usar la siguiente instrucción:
if __name__==’__main__’: al final del archivo (módulo).
Ejemplo: Retomemos el módulo aritmética.
def sumar(x,y):
return x+y
def restar(x,y):
return x-y
if __name__==’__main__’:
print("Ejemplos:")
print(sumar(3,4))
print(resta(7,3))
45
Luisantos Bonilla Mejía Programación con Python
3.2.1 Usando As
A veces los nombres que colocamos a nuestro módulos son muy largos, y si
estamos usando solamente import para impórtalos, resultaría un poco incómodo
de escribir siempre el nombre del módulo cuando usamos sus funciones. Para una
mayor comodidad, podemos usar la instrucción as, esta instrucción nos permite
renombrar el nombre de los módulos en nuestro programa, para un mejor manejo
de la escritura del programa donde estamos usándolos.
Ejemplo:
1 i m p o r t numpy a s npy
2 a=4
¥ 3 print (a)
4
5 p r i n t ( npy . c o s ( 1 ) )
4
∠ 0 .5 4 03 0 23 0 5 8 6 8 1 3 9 8
en un paquete, dicho archivo siempre está (puede incluso ser un archivo vacío).
46
Programación con Python Luisantos Bonilla Mejía
Para poder usar un paquete en nuestros programas, debemos usar las senten-
cias from y import de la siguiente manera:
4
∠ 3
3.3 Ejercicios
47
Luisantos Bonilla Mejía Programación con Python
4. S ECUENCIAS EN P YTHON
Ya hemos estudiado al inicio del curso las listas, en este apartado no solo re-
tomamos el estudio de las listas, sino también conoceremos un tipo de dato de
Python muy parecido a las listas, las cuales llamaremos tuplas.
4.1.1 Tuplas
Tuplas: Las tuplas son secuencias al igual que las listas, con la diferencia que
son inmutables una vez creadas. Significa que una vez hechas, ya no se podrán
modificar de ninguna manera. La sintaxis de las tuplas es: nombre_tupla =(elementos).
48
Programación con Python Luisantos Bonilla Mejía
Ejemplo:
Observación: Al igual que las listas, las tuplas pueden contener una combi-
nación de los diferentes tipos de datos, incluso puede contener otra tupla como
elementos.
El tipo de datos para las tuplas es tuple, además por ser una secuencia, sus
elementos están indexados, y su numeración es de cero hasta una unidad menos
a la cantidad de elementos que contenga la tupla. Como podemos observar las
tuplas son básicamente listas que no podemos modificar.
Ejemplos:
1 mi_tupla = ( 1 , 2 , " h o l a " , [ 1 , ( 2 , 3 ) ] , ( 5 ) )
2 p r i n t ( mi_tupla [ 1 ] )
¥ 3 p r i n t ( mi_tupla [ 0 ] )
4 p r i n t ( mi_tupla [ 3 ] )
5 p r i n t ( l e n ( mi_tupla ) )
2
1
∠ [1 , (2 , 3) ]
5
Observación: También podemos usar len() en las tuplas para saber cuántos
elementos posee. No debe olvidarse que al igual que las listas, el índice del primer
elemento es 0 y del último elemento es len(mi_tupla)-1.
4.2 Métodos
De manera informal los métodos14 son funciones que son exclusivamente para
tipos de datos que pueden contener otros elementos15 dentro de Python. En este
curso solo hablaremos de métodos para cadenas de texto, listas y tuplas.
La sintaxis para usar métodos es: nombre_dato.nombre_metodo(argumentos).
A continuación presentamos los métodos más usados para cadenas de texto, listas
y tuplas.
49
Luisantos Bonilla Mejía Programación con Python
Ejemplo:
1 m i _ t e x t o=" h o l a mundo"
¥ 2 p r i n t ( mi_texto . c a p i t a l i z e ( ) )
0
∠ 1
2
1
∠ 1
-1
50
Programación con Python Luisantos Bonilla Mejía
Ejemplos:
1 m i _ t e x t o=" h o l a mundo"
¥ 2 p r i n t ( mi_texto . i s a l n u m ( ) )
∠ False
∠ True
∠ True
1 t e x t o 4 = " HolaMundo%"
¥ 2 p r i n t ( texto4 . isalnum () )
∠ False
∠ False
∠ True
∠ False
1 t e x t o 4 = " HolaMundo%"
¥ 2 print ( texto4 . isalpha () )
∠ False
51
Luisantos Bonilla Mejía Programación con Python
∠ False
∠ False
∠ False
1 t e x t o 4=" HolaMundo%"
¥ 2 print ( texto4 . i s d i g i t () )
∠ False
∠ True
Una lista con el resto de métodos para cadenas de texto, lo podrán encontrar en
el siguiente enlace: https://docs.python.org/2.5/lib/string-methods.html
∠ [1 , 2 , 3 , " xD " ]
52
Programación con Python Luisantos Bonilla Mejía
Ejemplo:
1 l i s t a = [1 ,2 ,3 ,4 ,5 ,1 ,2 ,1]
¥ 2 p r i n t ( l i s t a . count (1) )
∠ 3
1 l i s t a = [1 ,2 ,3]
¥ 2 l i s t a . extend ( range (2) )
3 print ( lista )
∠ [1 , 2 , 3 , 0 , 1]
∠ 1
1 l i s t a = [1 ,2 ,3 ,4 ,5]
¥ 2 print ( l i s t a . index (2) )
∠ 1
53
Luisantos Bonilla Mejía Programación con Python
Ejemplo:
1 l i s t a = [1 ,2 ,3 ,4 ,5]
¥ 2 l i s t a . i n s e r t (3 ,0)
3 print ( lista )
∠ [1 , 2 , 3 , 0 , 4 , 5]
∠ [1 , 2 , 3 , 4 , 5]
4
∠ [1 , 2 , 3 , 5]
1 l i s t a = [1 ,2 ,3 ,4 ,5]
2 p r i n t ( l i s t a . pop ( ) )
¥ 3
4 print ( lista )
5
∠ [1 , 2 , 3 , 4]
54
Programación con Python Luisantos Bonilla Mejía
∠ []
9. sort()16 : Este método ordena los elementos de una lista de menor a mayor.
Ejemplo:
1 l i s t a = [1 ,25 ,76 ,8 ,9]
¥ 2 l i s t a . sort ()
3 print ( lista )
∠ [1 , 8 , 9 , 25 , 76]
Una lista con el resto de métodos para listas, lo podrán encontrar en el siguien-
te enlace: https://docs.python.org/3/tutorial/datastructures.html
Las tuplas al ser muy similares a las listas comparten los mismos métodos
salvo que estos no modifiquen sus valores y estructura de como fueron creados.
Por ejemplos los siguientes métodos se pueden usar en las tuplas, y se usan de
igual forma que con las listas.
1. index(elemento,inicio,final)
2. count(elemento)
Nota: Los métodos para las cadenas de texto y listas modifican directamente
al objeto al que se le aplica, y no a una copia de ellos como se ha podido observar
en los ejemplos anteriores.
4.3 Diccionarios
Hasta el momento, hemos visto estructuras en Python que nos permiten guar-
dar diferentes tipos de datos, estas son las listas y tuplas. Una característica en
común entre las listas y tuplas es que sus elementos están ordenados por un ín-
dice, sin embargo, a veces no es necesario tener ningún orden con los datos que
guardamos, en esos casos, es necesario usar un tipo de estructura de datos que en
Python es llamada diccionario.
Diccionario: Es un tipo de datos que nos permite guardar valores de diferentes
tipos (como las listas y tuplas), incluso otros diccionarios. El tipo de datos para los
diccionario es dict.
16 En el enlace para los métodos de una lista podrán encontrar que este método tiene argumentos y
cómo usarlos.
55
Luisantos Bonilla Mejía Programación con Python
La diferencia más importante entre las listas y tuplas, con respecto a los diccio-
narios, es que sus elementos son identificados por una clave, dicha clave no tiene
necesariamente un orden o relación dentro de las demás claves17 , solo sirve para
poder acceder al valor al cual está asociado dentro del diccionario.
La sintaxis para un diccionario es:
Nota: Las claves pueden ser de tipo: int, float, str y tuple. Por otro lado los
valores puede ser del tipo: int, float, str, list, tuple y dict.
Ejemplo:
1 m i _ d i c c i o n a r i o ={" Nombre " : " L a z a r o " , " Edad " : 2 3 , ( 2 , 2 ) : "xD" ↘
¥ ,33:5 ,2:[1 ,2]}
2 print ( mi_diccionario )
∠ { " Nombre " : " Lazaro " , " Edad " : 23 , (2 , 2) : " xD " , 33: 5 , 2: [1 , 2]}
Observación: En el ejemplo anterior, podemos notar que las claves no son ne-
cesariamente del mismo tipo (lo mismo sucede con los valores), más aún, el tipo
de dato usado para la clave, no es necesariamente el mismo tipo de dato usado
para el valor que está asociado.
Para acceder a los valores del diccionario, lo haremos usando la clave asociado
al valor que necesitemos, para ello seguiremos la sintaxis siguiente:
mi_diccionario[clave].
Ejemplo:
1 m i _ d i c c i o n a r i o ={" Nombre " : " L a z a r o " , " Edad " : 2 3 , ( 2 , 2 ) : "xD" ↘
,33:5 , 2:[1 ,2]}
¥ 2 p r i n t ( m i _ d i c c i o n a r i o [ " Nombre " ] )
3 print ( mi_diccionario [ 2 ] )
tipo mapa.
56
Programación con Python Luisantos Bonilla Mejía
ve), la forma de hacerlo es la misma que se hace con las listas, solo que usando la
clave, en vez de un índice.
Ejemplo:
1 m i _ d i c c i o n a r i o ={" Nombre " : " L a z a r o " , " Edad " : 2 3 , ( 2 , 2 ) : "xD" ↘
,33:5 , 2:[1 ,2]}
¥ 2 m i _ d i c c i o n a r i o [ ( 2 , 2 ) ] = " : D"
3 print ( mi_diccionario )
∠ { " Nombre " : " Lazaro " , " Edad " : 23 , (2 , 2) : " : D " , 33: 5 , 2: [1 , 2]}
{ " Nombre " : " Lazaro " , " Edad " : 23 , (2 , 2) : " : D " , 33: 5 , 2: [1 , 2] , " ↘
∠ Apellido " : " L ó pez " }
Al igual que las listas y las tuplas, los diccionarios tienen métodos, y la forma
de usarlos es la misma. A continuación presentamos los más usados.
{ " Australia " : " Canberra " , " El Salvador " : " San Salvador " , " ↘
∠ Italia " : " Roma " , " Jap ó n " : " Tokio " }
57
Luisantos Bonilla Mejía Programación con Python
4.4 Ejercicios
a) De entero decimal a:
• binario entero sin signo (64 bits de precisión)
18 Este módulo debe contener todas las funciones auxiliares que se requieran para la creación del
58
Programación con Python Luisantos Bonilla Mejía
59
Luisantos Bonilla Mejía Programación con Python
7. Usando listas y tuplas, reciba dos listas de datos enteros y luego cree el pro-
ducto cartesiano de dichas listas.
a) R en A, R = {( x, y) : x2 + y2 = 102 }
b) R en A, R = {( x, y) : ∃k, x = y × k}
c) R en A, R = {( x, y) : x ≡ y mód 5}
d) R en A, R = {( x, y) : x < y}
e) R en A, R = {( x, y) : x + y = 10}
9. Para algún par de conjuntos del problema anterior, genere las siguientes re-
laciones:
x z
a) R en A × A, R = ( x, y, z, w) : =
y w
10. Para una lista de pares de enteros menores que 50, grafíquelos en el plano
cartesiano.
5. F ICHEROS
5.1 Matrices
Una matriz en Python es simplemente una lista de listas, donde cada sublista
es la representación de cada fila de la matriz.
Ejemplo: Consideremos la matriz A de la siguiente manera:
2 1 2
A = 3 3 3
1 3 0
∠ [[2 , 1 , 2] , [3 , 3 , 3] , [1 , 3 , 0]]
60
Programación con Python Luisantos Bonilla Mejía
Observación: Notemos que por cada fila de la matriz A se tiene una sublista.
Además en este curso usaremos las letras mayúsculas para denotar variables del
tipo matriz.
Todo lo que se puede hacer con lista, se puede hacer con las matrices creadas
de la siguiente forma.
Hay dos formas de ver matrices en Numpy, una es usando el módulo array19
y la otra es usando el módulo matrix. Nos ocuparemos del segundo20 , ya que
este implementa de manera natural las operaciones de matrices en los operadores
usuales (suma, resta y multiplicación).
Nota: Para usar matrix en nuestros programas, debemos importar la libreria
Numpy.
La sintaxis para crear una matriz usando matrix es:
A = numpy.matrix(lista_de_datos).
1 3 0
[[2 1 2]
∠ [3 3 3]
[1 3 0]]
5.1.1.1. Atributos de las matrices. Por la forma que hemos creado las matrices,
estas guardan información importante para nosotros, estos datos son conocidos
19 Se deja al estudiante investigar el uso y diferencia entre usar array y matrix.
20 Investigar las ventajas y desventajas entre usar array y matrix.
61
Luisantos Bonilla Mejía Programación con Python
mi_matriz.variable_atributo.
1. A.H: Devuelve la matriz transpuesta conjugada (si sus elementos son núme-
ros complejos, tendremos la matriz transpuesta conjugada, sino es la matriz
transpuesta) de la matriz A.
[[2 1 2]
[3 3 3]
[1 3 0]]
∠
matrix ([[2 , 3 , 1] ,
[1 , 3 , 3] ,
[2 , 3 , 0]])
[[2 1 2]
[3 3 3]
[1 3 0]]
∠
matrix ([[ 3.0 , -2.0 , 1.0 ],
[ -1.0 , 0.66666667 , 0.0 ],
[ -2.0 , 1.66666667 , -1.0 ]])
21 Los atributos son variables creadas con información importante del objeto (esto se estudia en pro-
gramación II).
62
Programación con Python Luisantos Bonilla Mejía
[[2 1 2]
[3 3 3]
∠ [1 3 0]]
(3 , 3)
[[2 1 2]
[3 3 3]
∠ [1 3 0]]
63
Luisantos Bonilla Mejía Programación con Python
[[2 1 2]
[3 3 3]
[1 3 0]]
[[2 3 4]
∠ [0 1 0]
[5 6 8]]
matrix ([[4 , 4 , 6] ,
[3 , 4 , 3] ,
[6 , 9 , 8]])
1 i m p o r t numpy a s np
2
3 a = [[2 ,1 ,2] ,[3 ,3 ,3] ,[1 ,3 ,0]]
4 A = np . m a t r i x ( a )
5 p r i n t (A)
¥ 6
7 b = [[2 ,3 ,4] ,[0 ,1 ,0] ,[5 ,6 ,8]]
8 B = np . m a t r i x ( b )
9 p r i n t (B)
10
11 p r i n t (A−B)
[[2 1 2]
[3 3 3]
[1 3 0]]
[[2 3 4]
∠ [0 1 0]
[5 6 8]]
1 i m p o r t numpy a s np
2
3 a = [[2 ,1 ,2] ,[3 ,3 ,3] ,[1 ,3 ,0]]
4 A = np . m a t r i x ( a )
5 p r i n t (A)
¥ 6
7 b = [[2 ,3 ,4] ,[0 ,1 ,0] ,[5 ,6 ,8]]
8 B = np . m a t r i x ( b )
9 p r i n t (B)
10
11 p r i n t (A∗B)
[[2 1 2]
[3 3 3]
[1 3 0]]
∠
[[2 3 4]
[0 1 0]
[5 6 8]]
64
Programación con Python Luisantos Bonilla Mejía
[[2 1 2]
[3 3 3]
∠ [1 3 0]]
matrix ([[5]])
[[2 1 2]
[3 3 3]
∠ [1 3 0]]
1 .1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2
Nota: Ambos métodos tienen argumentos opcionales, estos sirven para acotar
los elementos, a los que se les desea aplicar el efecto del método.
La documentación completa de atributos y métodos, de las matrices en forma-
to matrix, la podrán encontrar en el siguiente enlace: https://numpy.org/doc/1.
18/reference/generated/numpy.matrix.html
65
Luisantos Bonilla Mejía Programación con Python
Modo Descripción
El archivo se abre en modo de solo lectura, no se puede
r
escribir (argumento por defecto).
Se crea un nuevo archivo y se abre en modo de lectura (si
w
existe un archivo con el mismo nombre, se borra).
El archivo se abre en modo de agregar, los datos escritos
a
se agregan al final del archivo.
El archivo se abre para lectura y escritura al mismo tiem-
r+
po.
El archivo se abre en modo binario, para almacenar cual-
b
quier cosa que no sea texto.
El archivo se abre con soporte a nueva linea univer-
U sal, cualquier fin de linea ingresada sera como un \n en
Python.
22 Esto permite mayor comodidad, porque si estuvieran en otra carpeta, tendríamos que especificar
66
Programación con Python Luisantos Bonilla Mejía
Ejemplo:
2. read(): Este método permite leer todo el documento y devuelve una cadena de texto
con el contenido del archivo.
Nota: Este método tiene un argumento del tipo entero, el cual nos permite indicarle
cuántos caracteres del archivo queremos leer.
Ejemplo:
Observación: Si ya se ha leído todo el contenido del archivo, aplicar una vez más
este método, hará que devuelva una cadena de texto vacía.
67
Luisantos Bonilla Mejía Programación con Python
4. close(): Este método permite cerrar la manipulación del archivo. No es posible es-
cribir ni leer en un archivo cerrado.
Ejemplo:
Hay más métodos para trabajar con archivos, el resto los podrán encontrar en
el siguiente enlace: https://python-para-impacientes.blogspot.com/2014/02/
operaciones-con-archivos.html
Los siguientes atributos tienen información útil de una variable, que guarda el
contenido de un documento de escritura.
∠ False
∠ True
∠ "a"
68
Programación con Python Luisantos Bonilla Mejía
Ejemplo:
1 a r c h i v o = open ( " d a t o s . t x t " , " a " )
¥ 2
3 p r i n t ( a r c h i v o . name )
Un archivo .csv puede ser tratado en Python de una manera bastante parecida
al de los archivos .txt, sin embargo, en este curso veremos cómo usar Pandas pa-
ra trabajar archivos .csv. Recordemos que para usar Pandas hay que importarlo,
además de abreviarlo como pd para mayor comodidad.
Ejemplos:
1 i m p o r t p a n d a s a s pd
2
¥ 3 d a t o s = pd . r e a d _ c s v ( " d a t o s . c s v " )
4
5 p r i n t ( datos )
Nombres Notas
∠ 0 Jorge 7
1 Carlos 6
69
Luisantos Bonilla Mejía Programación con Python
2 Sofia 10
∠
1 i m p o r t p a n d a s a s pd
2
3 d a t o s = pd . r e a d _ c s v ( " d a t o s . c s v " , names =[ " nombres " , " n o t a s " ↘
¥ ])
4
5 p r i n t ( datos )
nombres notas
0 Nombres Notas
∠ 1 Jorge 7
2 Carlos 6
3 Sofia 10
1 i m p o r t p a n d a s a s pd
2 d a t o s = pd . r e a d _ c s v ( " d a t o s . c s v " , h e a d e r = 2 )
¥ 3
4 p r i n t ( datos )
Carlos 6
∠ 0 Sofia 10
1 i m p o r t p a n d a s a s pd
2 d a t o s = pd . r e a d _ c s v ( " d a t o s . c s v " , h e a d e r = None )
¥ 3
4 p r i n t ( datos )
0 1
0 Nombres Notas
∠ 1 Jorge 7
2 Carlos 6
3 Sofia 10
Nombres Notas
∠ 0 Juan Carlos 7
1 Policarpo 5
70
Programación con Python Luisantos Bonilla Mejía
5.3.1.1. Métodos de los DataFrame de Pandas. Una vez leído o creado un ar-
chivo DataFrame de Pandas, podremos acceder a la información de manera si-
milar a una matriz, más aún, podremos escribir sobre un archivo .csv o crear un
nuevo archivo .csv. A continuación, mostraremos algunos atributos más usados:
Ejemplos: Para crear un archivo .csv nuevo, los valores de los argumentos
opcionales deben ser.
>>> nuevos_datos.to_csv("datos3.csv",index=False)
... En este caso no se agrega la numeración de las filas ...
Ejemplo: Para escribir en un archivo .csv (ya existente), los valores de los
argumentos opcionales deben ser.
71
Luisantos Bonilla Mejía Programación con Python
Observación: El modo "a"24 indica que agregue al final25 del archivo la in-
formación. Por otro lado, index=False y header=False, le indican a Python
que no agregue, ni numeración ni encabezados.
Ejemplo:
1 i m p o r t p a n d a s a s pd
2
3 d a t o s = pd . r e a d _ c s v ( " d a t o s . c s v " )
4 p r i n t ( datos )
¥ 5
6 p r i n t ( datos . i l o c [ 1 ] )
7
8 l i s t a = l i s t ( datos . i l o c [ 1 ] )
9 print ( lista )
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
∠ Nombres Carlos
Notas 6
Name : 1 , dtype : object
Observación: Como podemos ver, hemos extraído la fila dos (que es la nú-
merada como 1) del DataFrame, y esta es presentada como columna, in-
24 Elmodo a deja preparado el curso de escritura en la siguiente línea.
25 Normalmente cuando se usa Excel para crear un archivo .csv, automáticamente deja el curso de
escritura en la siguiente linea, si por alguna razón esto no es así, agregue manualmente el curso de
escritura en la siguiente línea.
72
Programación con Python Luisantos Bonilla Mejía
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
∠ Nombres Notas
1 Carlos 6
2 Sofia 10
10
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
∠
Nombres Notas
1 Carlos 6
0 Jorge 7
73
Luisantos Bonilla Mejía Programación con Python
2 Sofia 10
∠
Observación: Notemos que si no se especifica ascending = True, por de-
fecto toma ese valor para el parámetro opcional.
Ejemplo:
1 i m p o r t p a n d a s a s pd
2
3 d a t o s = pd . r e a d _ c s v ( " d a t o s . c s v " )
¥ 4 p r i n t ( datos )
5
6 p r i n t ( d a t o s . s o r t _ v a l u e s ( by = " N o t a s " , a s c e n d i n g = F a l s e ) )
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
∠
Nombres Notas
2 Sofia 10
0 Jorge 7
1 Carlos 6
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
∠ 0 Jorge
1 Carlos
2 Sofia
Name : Nombres , dtype : object
74
Programación con Python Luisantos Bonilla Mejía
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
∠
Nombres Notas
1 Carlos 6
2 Sofia 10
5.4 Laboratorio - 1
Indicaciones:
mo podrán ver en el enlace, cada método tiene más argumentos opciones, estos permiten manipular
otros aspectos de los datos del DataFrame.
27 Este módulo debe contener todas las funciones auxiliares que se requieran para la creación del
75
Luisantos Bonilla Mejía Programación con Python
• Las funciones auxiliares deben tener documentación, especificando qué variable está
devolviendo, y de qué tipo son, y lo mismo para los argumentos.
• El programa principal y funciones auxiliares deben tener una documentación apro-
piada, explicando procesos no tan obvios.
• Crear un archivo .csv que contenga la tabla de datos iniciales que se muestra en cada
problema (esta pueden hacerla usando Excel).
• El programa principal debe crear un archivo .txt respondiendo las siguientes interro-
gantes:
Problemas:
65 98 55 62 79 59 51 90 72 56
70 62 66 80 94 79 63 73 71 85
3. Al gerente local de Urbana pizza le interesa el número de veces que un cliente visita
su restaurante durante un periodo de dos semanas. Las respuestas de 51 clientes
fueron:
5 3 3 1 4 4 5 6 4 2 5 6 6 7 1
1 14 1 2 4 4 4 5 6 3 5 3 4 5 6
8 4 7 6 5 9 11 3 12 4 7 6 5 15 1
1 10 8 9 2 2
4. Cleveland, una agencia de viajes ofrece tarifas especiales en ciertos creceros para
personas de la tercera edad. El presidente de Cleveland quiere información adicional
sobre las edades de las personas que toman cruceros. Una muestra aleatoria de 40
clientes que tomaron un crucero el año pasado revela estas edades.
76
Programación con Python Luisantos Bonilla Mejía
77 18 63 84 38 54 50 59 54 56 36 26 50 34 44
41 58 58 53 51 62 43 52 53 63 62 62 65 61 52
60 60 45 66 83 71 63 58 51 71
5.5 Laboratorio - 2
Indicaciones:
Problemas:
27 27 27 28 27 25 25 28
26 28 26 28 31 30 26 26
65 98 55 62 79 59 51 90 72 56
70 62 66 80 94 79 63 73 71 85
28 Este módulo debe contener todas las funciones auxiliares que se requieran para la creación del
77
Luisantos Bonilla Mejía Programación con Python
3. Al gerente local de Urbana pizza le interesa el número de veces que un cliente visita
su restaurante durante un periodo de dos semanas. Las respuestas de 51 clientes
fueron:
5 3 3 1 4 4 5 6 4 2 5 6 6 7 1
1 14 1 2 4 4 4 5 6 3 5 3 4 5 6
8 4 7 6 5 9 11 3 12 4 7 6 5 15 1
1 10 8 9 2 2
4. Cleveland, una agencia de viajes ofrece tarifas especiales en ciertos cruceros para
personas de la tercera edad. El presidente de Cleveland quiere información adicional
sobre las edades de las personas que toman cruceros. Una muestra aleatoria de 40
clientes que tomaron un crucero el año pasado revela estas edades.
77 18 63 84 38 54 50 59 54 56 36 26 50 34 44
41 58 58 53 51 62 43 52 53 63 62 62 65 61 52
60 60 45 66 83 71 63 58 51 71
6. R ECURSIVIDAD
Las funciones recursivas son funciones que se llaman a sí mismas durante su propia
ejecución. Estas funciones se comportan de alguna manera como los ciclos, ya que estas
repiten una y otra vez sus instrucciones hasta finalizar el proceso.
Como mínimo una función recursiva tiene dos partes, las cuales son:
78
Programación con Python Luisantos Bonilla Mejía
7
¥ 8 print ( tabla2 (5) )
2 * 5 = 10
2 * 4 = 8
2 * 3 = 6
∠ 2 * 2 = 4
2 * 1 = 2
2 * 0 = 0
Observación: El ejemplo anterior nos muestra una función que despliega en pantalla la
tabla del 2 hasta un cierto número n. En esta función hemos sustituido un ciclo for por la
acción de llamarse a sí misma a la función, para lograr el efecto iterativo del ciclo y poder
diseñar en pantalla la tabla del 2.
Ejemplo:
1 def f a c t o r i a l (n) :
2 i f n >0:
3 r e t u r n n ∗ f a c t o r i a l ( n−1)
4 else :
5 return 1
¥ 6
7 print ( f a c t o r i a l (0) )
8
9 print ( f a c t o r i a l (1) )
10
11 print ( f a c t o r i a l (5) )
∠ 1
120
Dependiendo de la forma que las funciones recursivas pueden relacionarse entre sí,
podemos tener diversos tipos de recursión. A continuación, presentaremos estos tipos de
recursión.
79
Luisantos Bonilla Mejía Programación con Python
1. Recursividad simple: Son las funciones que sólo hacen una llamada recursiva (a sí
mismas). Se puede transformar con facilidad en algoritmos iterativos (ciclos).
Ejemplo:
1 def f a c t o r i a l (n) :
2 i f n >0:
3 r e t u r n n ∗ f a c t o r i a l ( n−1)
¥ 4 else :
5 return 1
6
7 prin t ( f a c t o r i a l (5) )
∠ 120
2. Recursividad múltiple: Se da cuando hay más de una llamada a sí misma dentro del
cuerpo de la función, resultando más difícil de hacer de forma iterativa.
Ejemplo:
∠ 8
3. Recursividad anidada: Una función recursiva es anidada cuando entre los paráme-
tros que se pasan a la función se incluye una invocación a la misma.
Ejemplo:29
1 d e f Ackermann (m, n ) :
2 i f m==0:
3 r e t u r n n+1
4 e l i f m>0 and n==0:
¥ 5 r e t u r n Ackermann (m−1 ,1)
6 else :
7 r e t u r n Ackermann (m−1 , Ackermann (m, n−1) )
8
9 p r i n t ( Ackermann ( 3 , 2 ) )
∠ 29
4. Recursividad cruzada o indirecta: Son algoritmos donde una función provoca una
llamada a sí misma de forma indirecta, a través de otras funciones.
80
Programación con Python Luisantos Bonilla Mejía
Ejemplo:
False
∠
True
Una tarea muy habitual en programación, es la de ordenar ciertos datos bajo cierto cri-
terio30 , por esta razón, han surgido ciertas técnicas, que permiten ordenar datos de manera
eficiente. A estas técnicas se les conoce como «algoritmos de ordenamiento».
A continuación, presentamos los principales algoritmos de ordenamiento:
• Ordenamiento de Batcher.
• Ordenamiento de burbuja.
• Ordenamiento de burbuja bidireccional.
• Ordenamiento por inserción.
• Ordenamiento por montículos.
• Ordenamiento de peine.
• Ordenamiento rápido.
• Ordenamiento por selección.
• Ordenamiento de Shell.
6.4 Ejercicios
Indicaciones: En cada uno de los siguiente problema debe crearse un programa o programa
modular31 (que funcione como módulo y programa).
30 Las relaciones de orden más usadas son el orden numérico y el orden lexicográfico. Estas relacio-
81
Luisantos Bonilla Mejía Programación con Python
1. Para cada literal, hacer un programa que dada un número entero positivo calcule el
n-ésimo termino de la sucesión aritmética, definida por los primeros términos de la
progresión.
2. Hacer una función que reciba el primer termino de la sucesión aritmética, la diferen-
cia d y un entero positivo n, y devuelva la suma de los primeros n términos de la
sucesión.
3. Hacer un programa que dada un número entero positivo calcule el n-ésimo termino
de la sucesión geométrica, definida por los primeros términos de la progresión. Los
cuales son: 3, 1, 1/3, 1/9, . . .
4. Hacer una función que reciba el primer termino de la sucesión geométrica, la razón r
y un entero positivo n, y devuelva la suma de los primeros n términos de la sucesión.
5. Hacer una función que reciba un entero n ≥ 0, y devuelva el n-ésimo termino de la
sucesión definida como:
an = 5an−1 + 6an−2 , n ≥ 2, a0 = 1, a1 = 3
(
an+1 = 2an − bn + 2
n ≥ 0, a0 = 0, b0 = 1
bn+1 = − an + 2bn − 1
7. P ROGRAMACIÓN FUNCIONAL
De manera informal una función lambda es una pequeña función, en el sentido que
las instrucciones dentro de la función lambda son sencillas y cortas (a veces llamadas su-
brutinas). Las funciones lambda a menudo son usadas como argumentos que pasan a ser
funciones de orden superior 32 , o se usan para construir el resultado de una función de
orden superior que necesita devolver.
32 En
matemáticas y ciencias de la computación, funciones de orden superior son funciones que
cumplen al menos una de las siguientes condiciones:
1. Tomar una o más funciones como entrada.
82
Programación con Python Luisantos Bonilla Mejía
La comodidad de usar este tipo de funciones es que son funciones que se declaran en
una línea. Los estudiantes encontrarán la primera utilidad de este tipo de funciones en los
cursos de análisis numérico.
Sintaxis de las funciones lambda es:
Ejemplos:
∠ 6
1 f = lambda x , y : x+y
¥ 2 print ( f (2 ,3) )
∠ 5
Nota: Las funciones lambda por defecto devuelven un resultado, por ende no es nece-
sario escribir return cuando se usa Python, sin embargo, hay lenguajes de programación
donde sí es necesario especificar qué se devolverá.
En esta última sección, estudiaremos tres tipos de funciones, que toman como paráme-
tro otras funciones. Estas permiten expandir la utilidad de las funciones existentes, o las
que se puedan crear.
7.2.1 filter.
Esta función toma como argumentos una función booleana33 y una lista, y devuelve
otra lista, con los valores de la lista ingresada que cumplen la función booleana. La lista
que devuelve la función Filter es del tipo filter, así que debe usarse list(), para que
tengamos una lista propiamente.
La sintaxis es: filter(mi_funcion, mi_lista)
Nota: Debe ingresarse solamente el nombre de la función booleana34 , sin paréntesis y
sin argumentos.
83
Luisantos Bonilla Mejía Programación con Python
Ejemplo:
∠ [2 , 4 , 6 , 8 , 10]
7.2.2 map.
Esta función toma como argumentos una función, y una o varias listas, y devuelve otra
lista con los valores que la función devuelve por cada elemento de la lista ingresada. La
lista que devuelve la función Map es del tipo map, así que debe usarse list() para que
tengamos una lista propiamente.
La sintaxis es: map(mi_funcion, lista_1, lista_2, ..., lista_n)
Nota: Debe ingresarse solamente el nombre de la función, sin paréntesis y sin argumen-
tos. Además, debe ponerse tantas listas como argumentos tenga la función.
Ejemplos:
∠ [2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20]
1 x = [1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10]
¥ 2
3 p r i n t ( l i s t ( map ( lambda n : n ∗ 2 , x ) ) )
∠ [2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20]
Observación: En ambos ejemplos, map() recorre la lista x, y devuelve una lista, con los
valores de x evaluados en la función multiplicar_2 y lambda.
84
Programación con Python Luisantos Bonilla Mejía
7.2.3 reduce.
Esta función toma como argumentos una función y una lista, y devuelve un valor, el
cual es el resultado de aplicar iteradamente los valores de la lista a la función. Al comienzo
toma los primeros dos elementos de la lista ingresada, y evalúa en la función, usa este
resultado como valor para el primer argumento de la función, y toma el siguiente valor de
la lista para el valor del segundo argumento. Este último paso se aplica iteradamente hasta
agotar la lista.
La sintaxis es: reduce(mi_funcion, lista)
Nota: Debe ingresarse solamente el nombre de la función, sin paréntesis y sin argu-
mentos. Además, el efecto de Reduce sobre los elementos de la lista es de agrupamiento,
por ejemplo, si queremos sumar los números 1, 2, 3, 4 y 5, Reduce aplicaría la función suma
de la siguiente manera: ((((1 + 2) + 3) + 4) + 5) = (((3 + 3) + 4) + 5) = ((6 + 4) + 5) =
(10 + 5) = 15.
Ejemplos:
1 from f u n c t o o l s i m p o r t reduce
2
3 d e f sumar ( n ,m) :
4 r e t u r n n+m
¥ 5
6 x = [1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10]
7
8 p r i n t ( r e d u c e ( sumar , x ) )
∠ 55
1 x = [1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10]
¥ 2
3 p r i n t ( r e d u c e ( lambda n ,m: n+m, x ) )
∠ 55
7.3 Ejercicios
Indicaciones: En cada uno de los siguiente problema debe crearse un programa o programa
modular35 (que funcione como módulo y programa).
1. Para cada literal, hacer un programa que dado un entero positivo, calcule la suma
35 Este módulo debe contener todas las funciones auxiliares que se requieran para la creación del
85
Luisantos Bonilla Mejía Programación con Python
2. Para cada literal, hacer un programa que dado un entero positivo, calcule el producto
hasta el termino n-ésimo.
n
k
a) ∏ k−1
k =2
n
b) ∏ ( k + 1)2
k =0
n
(−1)k
c) ∏ 2k + 1
k =0
86