Apuntes de Programación I Con Python
Apuntes de Programación I Con Python
20 de octubre de 2021
BML | 2
Introducción
El presente documento está formado por mis apuntes de clase de la materia de Programación
I, las cuales fueron impartidas en la Escuela de Matemática, de la Universidad de El Salvador.
El resto de unidades están formadas por el contenido impartido en el ciclo I-2020, para las
carreras de Licenciatura en Matemática y Licenciatura en Estadı́stica.
Agradecimientos
Doy las gracias primeramente a Dios y a la licda. Patricia Rodrı́guez, por el tiempo que se
tomó para brindarme sugerencias en la edición y formato de este material.
Además, quiero agradecer a los alumnos que estuvieron a lo largo del curso, por haberme
permitido ser parte de su formación profesional.
3
BML | Índice general 4
2.5.2 Parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.5.3 Argumentos por nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.5.4 None, return y pass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.6 Alcance y variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.7 Errores y excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.8 Documentación de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.9 Ejercicios - 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.10 Ejercicios - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Unidad 3: Módulos
3.1 Módulos en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.1.1 Usando Módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2 Creación de módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.2.1 Usando As . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.3 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Unidad 5: Ficheros
5.1 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.1.1 Matriz en Numpy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.2 Archivos .txt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.2.1 Atributos de los archivos. . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.3 Archivos .csv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Unidad 6: Recursividad
6.1 Funciones recursivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.2 Tipos de recursión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3 Algoritmos de ordenamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Introducción a la programación
6
BML | Conceptos básicos 7
Lenguajes de programación de alto nivel: Son aquellos cuya caracterı́stica principal, con-
siste en una estructura sintáctica y semántica legible, acorde a las capacidades cognitivas
humanas.
A diferencia de los lenguajes de bajo nivel, son independientes de la arquitectura del
hardware, lo que significa que tienen mayor portabilidad.
En la actualidad, por su facilidad de lectura para el ser humano, existen muchos progra-
mas de alto nivel, por ello, es necesario clasificarlos. La clasificación que mostraremos a
continuación se ha hecho pensando en la utilidad para el cual fue creado el lenguaje de
programación.
Notemos que los lenguajes de programación de bajo nivel son difı́ciles de aprender; ya que al
depender del hardware, requiere que el programa sea reescrito desde el inicio cuando se quiera
utilizar en una máquina distinta a la que se utilizó para crear el programa, ya que depende de la
codificación de los procesadores de cada máquina. Por otro lado los lenguajes de programación
de alto nivel son más fáciles de aprender porque se usan palabras o comandos del lenguaje
natural, generalmente del inglés.
Existe otra forma de clasificar los lenguajes de programación de acuerdo al desarrollo de las
computadoras, dicha clasificación es la siguiente.
Durante el desarrollo de este curso nos ocuparemos de un lenguaje de alto nivel, para
ser especifico nos concentraremos en aprender el lenguaje de programación llamado Python
(Python 2.7 y Python 3). Por otra parte, de manera introductoria tengamos en cuenta el
siguiente glosario.
Glosario
Términos Definición
Lenguaje informático Es un idioma artificial, utilizado por ordenadores, cu-
yo fin es transmitir información de algo a alguien. Los
lenguajes informáticos, pueden clasificarse en: a) lengua-
jes de programación (Python, PHP, Pearl, C, etc.); b)
lenguajes de especificación (UML); c) lenguajes de con-
sulta (SQL); d) lenguajes de marcas (HTML, XML); e)
lenguajes de transformación (XSLT); f) protocolos de
comunicaciones (HTTP, FTP); entre otros.
Lenguaje de programa- Es un lenguaje informático, diseñado para expresar
ción órdenes e instrucciones precisas, que deben ser llevadas
a cabo por una computadora. El mismo 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 interpretados A diferencia de los lenguajes compilados, no requieren de
un compilador para ser ejecutados sino de un intérpre-
te. Un intérprete, actúa de manera casi idéntica a un
compilador, con la salvedad de que ejecuta el programa
directamente, sin necesidad de generar previamente un
ejecutable. Ejemplo de lenguajes de programación inter-
pretado 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 Siste-
mas Operativos como GNU/Linux, Windows, Mac OS,
Solaris, entre otros.
Multiparadigma Acepta diferentes paradigmas (técnicas) de programa-
ción, tales como la orientación a objetos, aspectos, la
programación imperativa y funcional.
Código fuente Es un conjunto de instrucciones y órdenes lógicas, com-
puestos de algoritmos que se encuentran escritos en un
determinado lenguaje de programación, las cuales deben
ser interpretadas o compiladas, para permitir la ejecu-
ción del programa informático.
La computadora solo entiende dos estados, encendido o apagado, que fácilmente podemos
relacionar con las respuesta de sı́ o no de nuestro lenguaje cotidiano. Más aún, estos dos estados o
dos respuestas las podemos representar por 0 y 1, a esto se le conoce como bit o dı́gito binario
(por el ingles Binary Digit ).
Básicamente, las computadoras representan la información mediante bits, de esta forma el
lenguaje de la computadora es enteramente binario. El bit es la unidad más pequeña en que la
computadora puede almacenar información.
Está claro que con un bit no es suficiente para poder guardar información compleja, por
esta razón formamos secuencias de bits, que nos permitirán representar la información. A las
secuencias de longitud 8 (cadenas de 8 bits) son llamados Byte. A continuación mostramos
una tabla de unidades de información.
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
Observación: Con los Bytes tenemos 256 combinaciones de 0 y 1, las suficientes para
representar nuestro alfabeto y caracteres especiales.
Teniendo claro cómo la computadora entiende la información, podemos asociar a cada se-
cuencia de bits un valor, y de esta forma tener un esquema de codificación de información, esto
permitirá poder interactuar con la computadora de una manera más natural. Algunos esquemas
de codificación son:
1. ASCII: El código ASCII (por sus siglas en ingles American Standard Code for Informa-
tion 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 Coded Decimal
Interchange Code) es un código binario que representa caracteres alfanuméricos, controles
y signos de puntuación. Cada carácter está compuesto por 8 bits.
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 cociente 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 multiplica-
ció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:
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.
Por lo tanto la codificación de 27 es 1B, donde 11 se representa por la letra B. Para verificar
hacemos una decodificación.
Decodificación:
(1 ∗ 161 ) + (B ∗ 160 ) = 16 + 11 = 27
dı́gitos, estos se llenan con ceros hasta completar los 4. Para entender esto veamos el siguiente
ejemplo:
1. Sumar. Para sumar números binarios lo hacemos de manera usual, pero teniendo 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 teniendo 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).
Ejemplo:
101- ⇔ 5-
11 ⇔ 3
010 ⇔ 2
3. Multiplicar. Para multiplicar números binarios lo hacemos de manera usual, pero usando
las reglas de la suma binaria.
Ejemplo:
101 × 11 ⇔ 5 × 3
101 15
101
1111 ⇔ 15
4. Dividir. Para dividir números binarios lo hacemos de manera usual, pero usando las
operaciones anteriores, y teniendo en cuenta que solo podemos colocar en el cociente
ceros y unos.
Ejemplo:
Ejercicios:
2. Investigar las reglas para realizas operaciones sobre los números reales codificados en el
sistema binario.
1.4. Pseudocódigo
de palabras claves de los lenguajes de programación, estos son: imprimir, si, sino, para y
mientras.
Nota: La idea del pseudocódigo es poder presentar los pasos que un programa debe realizar,
pero de tal manera que un ser humano lo entienda, sin necesidad que conozca o no un lenguaje
de programación.
En términos generales, un pseudocódigo tiene la siguiente estructura:
Proceso Nombre_del_Programa
acción 1
acción 2
...
acción n
FinProceso
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
Ejercicios:
Las variables son contenedores de información. La información puede ser del tipo numérico,
cadena de texto o de cualquier otro tipo que Python pueda manejar. Al ser contenedores,
requiere un edificador (nombre) para poder acceder a la información que guardan. La sintaxis2
es: mi_variable = valor. El nombres de las variables válidos en Python debe cumplir las
siguientes tres reglas:
Observación: En los ejemplos anteriores, se han presentado los cuatro tipos básicos de
información que puede contener una variable (entero, real, cadena de texto y lista).
Además en Python podemos cambiar la información de la variable una vez creada, esto se
hace reasignando el valor, veamos un ejemplos de esto.
2
La sintaxis que se presenta, crea la variable al mismo tiempo que le asigna el valor, en dicha asignación
queda determinado su tipo.
Ejemplo:
Observación: Notemos que basta con usar la sintaxis: mi_variable = valor, para cambiar
el valor de una variable o para crearla.
Veamos algunas caracterı́sticas básicas de las listas en Python.
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:
Heterogéneas: pueden estar conformadas por elementos de distintos tipo, incluidos otras
listas.
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 lista 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 pertene-
ciente al primer elemento.
Ejemplos:
>>> mi_lista[0]
"cadena de texto"
>>> mi_lista[3]
"otro dato"
>>> mi_lista[4]
25
En los ejemplos anteriores, podemos observar que 4 es el ı́ndice del último elemento en la
lista; es ası́, ya que la lista tiene 5 elementos, y la numeración en este caso seria desde 0 hasta
4 (desde cero hasta una unidad menos a la cantidad de elementos que posea la lista).
También, podemos extraer una parte de la lista usando los ı́ndices. Para extraer una parte
de la lista, es necesario especificar el ı́ndice desde el cuál deseamos iniciar la extracción, hasta
una unidad más del ı́ndice que queremos finalizar la extracción. Veamos a continuación dos
ejemplos, el primero extraemos desde el segundo elemento hasta el cuarto elemento, y en el
segundo desde el tercer elemento hasta el último (recuerde el último elemento tiene ı́ndice 4).
Ejemplos:
>>> mi_lista[1:4]
[15, 2.8, "otro dato"]
>>> mi_lista[2:5]
[2.8, "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:
>>> mi_lista[0]
"cadena de texto"
>>> mi_lista[0] = 2 #Cambiamos "cadena de texto" por 2.
>>> mi_lista[0]
2
>>> mi_lista[2]
2.8
>>> mi_lista[2] = "¡Hola mundo!" #Cambiamos 2.8 por "¡Hola mundo!".
>>> mi_lista[2]
"¡Hola mundo!"
Como vemos en los ejemplos anteriores, podemos incluso cambiar elementos por otros to-
talmente diferentes, incluso si son de diferentes tipos (en este caso, cambiamos una cadena de
texto por un entero y un real por una cadena de texto).
Por último, podemos agregar nuevos elementos a una lista, lo que significa, hacer más grande
la lista (que tenga más elementos), esto lo podemos hacer con la función append(), la sintaxis
es: lista.append(elemento).
Ejemplo:
>>> mi_lista
[2, 15, "¡Hola mundo!", "otro dato", 25]
>>> mi_lista.append("Nuevo Dato")
>>> mi_lista
[2, 15, "¡Hola mundo!", "otro dato", 25, "Nuevo Dato"]
Las cadenas de texto son secuencias de caracteres inmutables3 encerrado entre comillas.
Al ser secuencias, la misma sintaxis de las listas se utiliza para acceder a la información de las
cadenas de texto.
Ejemplos:
Observación: En las cadenas de texto, el espacio es considerado una letra. Además, len()
es una función que nos permite saber cuántos elementos tiene una lista o una cadena de carac-
teres.
También podemos agregar más caracteres a una lista, usando el operador +.
Ejemplo:
En Python hay valores que son únicos y que se pueden pensar como constantes, los cuales
son:
1. None: Este valor significa literalmente nada. Es muy útil para crear variables que no
queramos utilizar aún.
2. True: Este valor significa literalmente verdadero. Es de gran utilidad para denotar que
cierta condición es verdadera.
3. False: Este valor significa literalmente Falso. Es de gran utilidad para denotar que cierta
condición es falsa.
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 equivalente.
Ejemplos:
>>> print(2==2)
True
>>> print(2==5)
False
Ejercicios: Escriba en un archivo Python las siguientes instrucciones y concluya sobre los
valores que se obtienen en pantalla.
1. print(2<3)
2. print(2<=3)
3. print(2>3)
4. print(2>=3)
Para agregar una condición, usamos la palabra if seguido de una proposición lógica y
cerrando con dos puntos (:). La sintaxis es: if condicion_logica:
Luego de escribir la condición, en una nueva lı́nea se debe colocar las instrucciones que se
ejecutarán, si se cumple la condición. Estas instrucciones deben ir indentadas (una Sangrı́a)
para indicar a Python que pertenecen al condicional.
Ejemplo:
if n%2==0:
print("Es par")
Observación: La instrucción n%2 devuelve el residuo que deja n al ser dividido por 2. La
condición del ejemplo imprimirá en pantalla Es par, si el residuo es cero al dividir por 2.
Si queremos que se ejecute cierta instrucción cuando la condición lógica no se cumpla,
debemos usar else: en una nueva lı́nea.
Ejemplos:
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")
Observación: También podemos colocar else para agregar instrucciones por si las demás
condiciones no se cumplen.
>>> n = input()
Ingrese un entero: _
Como toda la información que recolecta input() es tomada como cadena de texto4 , nosotros
podemos hacer que Python mantenga el tipo de dato ingresado, al usar la instrucción eval().
Ejemplo:
Ingrese un entero: _
Observación: eval() permite que cuando se ingrese el número entero, se mantenga como
información del tipo entero en Python.
4
En Python 2 la instrucción input() mantiene el tipo de información ingresada, y existe la instrucción
raw_input() que guarda todo como cadena de texto.
25
BML | Ciclos For y While 26
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:
count = 0
while count < 5:
print(count, " es menor que 5")
count = count + 1
print(count, " no es 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
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 incluidos 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:
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
Una caracterı́stica de los ciclos for es que la cantidad de iteraciones puede ir desde 0 hasta
un número determinado. Éste número puede conocerse durante la ejecución del programa y
antes de ingresar al ciclo. Es por esta razón que es posible resolver el problema utilizando una
secuencia de datos.
Una secuencia en python es un tipo de dato que permite almacenar múltiples valores en
una misma variable. Esta caracterı́stica de las secuencias es que la hace posible iterar sobre las
mismas, recorriendo uno a uno sus elementos. Una secuencia puede estar vacı́a o tener un sólo
elemento.
Una secuencia con un solo elemento sigue siendo iterable, pero admite una sola iteración.
No ha de confundirse con una variable atómica que sólo toma un valor.
range([inicio], fin, [salto]): Esta función permite crear secuencias que contienen
progresiones aritméticas. Los argumentos deben ser enteros. La lista inicia exactamente en
“inicio” y termina antes de llegar a “fin”. La función range genera una secuencia de tipo lista
en Python 2 y en Python 3 es una clase del tipo range. En todo el curso lo consideraremos en
Python 3.
Se consideran las siguientes situaciones:
4. Si se colocan dos de los tres argumentos, se asume que son inicio y fin.
Por ejemplo:
pass: Esta sentencia hace nada. Se utiliza cuando una sentencia se requiere sintácticamente,
pero no funcionalmente.
Por ejemplo:
if x>=0:
pass
else:
x=-x
continue: Esta sentencia finaliza la iteración del ciclo en la que se encuentra y continúa
con la siguiente (si la hubiere).
Por ejemplo:
break: Esta sentencia finaliza abruptamente el ciclo en el que se encuentre. El flujo evita
toda instrucción asociada al ciclo roto.
Por ejemplo:
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.
break
else: # el ciclo finalizó sin recurrir a break
print(n, ’es primo’)
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. También dentro de pueden
almacenar listas (list).
Ejemplo:
Heterogéneas: pueden estar conformadas por elementos de distintos tipo, incluidos otras
listas.
Mutables: sus elementos pueden modificarse.
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 lista 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 pertene-
ciente al primer elemento.
Ejemplos:
En los ejemplos anteriores, podemos observar que 4 es el ı́ndice del último elemento en la
lista; es ası́, ya que la lista tiene 5 elementos, y la numeración en este caso seria desde 0 hasta
4 (desde cero hasta una unidad menos a la cantidad de elementos que posea la lista).
También, podemos extraer una parte de la lista usando los ı́ndices. Para extraer una parte
de la lista, es necesario especificar el ı́ndice desde el cuál deseamos iniciar la extracción, hasta
una unidad más del ı́ndice que queremos finalizar la extracción. Veamos a continuación dos
ejemplos, el primero extraemos desde el segundo elemento hasta el cuarto elemento, y en el
segundo desde el tercer elemento hasta el último (recuerde el último elemento tiene ı́ndice 4).
Ejemplos:
>>> mi_lista[1:4]
[15, 2.8, "otro dato"]
>>> mi_lista[2:5]
[2.8, "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:
>>> mi_lista[0]
"cadena de texto"
>>> mi_lista[0] = 2 #Cambiamos "cadena de texto" por 2.
>>> mi_lista[0]
2
>>> mi_lista[2]
2.8
>>> mi_lista[2] = "¡Hola mundo!" #Cambiamos 2.8 por "¡Hola mundo!".
>>> mi_lista[2]
"¡Hola mundo!"
Como vemos en los ejemplos anteriores, podemos incluso cambiar elementos por otros to-
talmente diferentes, incluso si son de diferentes tipos (en este caso, cambiamos una cadena de
texto por un entero y un real por una cadena de texto).
Por último, podemos agregar nuevos elementos a una lista, lo que significa, hacer más grande
la lista (que tenga más elementos), esto lo podemos hacer con la función append(), la sintaxis
es: lista.append(elemento).
Ejemplo:
>>> mi_lista
[2, 15, "¡Hola mundo!", "otro dato", 25]
>>> mi_lista.append("Nuevo Dato")
>>> mi_lista
[2, 15, "¡Hola mundo!", "otro dato", 25, "Nuevo Dato"]
len(): esta función devuelve la longitud de la lista (su cantidad de elementos). La sintaxis
para usar esta función es: len(lista).
Ejemplos:
Concatenar listas: es la acción de unir o enlazar listas. Las listas se pueden concatenar
con el sı́mbolo de la suma (+). La sintaxis es: lista_1 + lista_2.
Ejemplo:
Observación:al concatenar dos listas, el resultado es una nueva lista que contiene 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 cualquier 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.
Ejemplo:
Observación:el nuevo elemento a agregar debe estar siempre entre corchetes, esto es ası́,
ya que + necesita dos elementos del tipo lista. También, notemos que el resultado es el mismo
si usáramos append() en la lista1.
Una función es una agrupación de expresiones y sentencias (algoritmos) que realizan deter-
minadas acciones, pero que éstas, solo se ejecutan cuando son llamadas. Es decir, si se coloca
un algoritmo dentro de una función y luego éste se corre, el algoritmo no será ejecutado, dado
que no se ha hecho una referencia a la función que lo contiene.
El uso de funciones es un componente muy importante del paradigma de la programación
llamada estructurada 1 , y tiene varias ventajas:
def mi_funcion():
instrucciones
Donde:
1
La programación estructurada es un paradigma de programación basado en utilizar funciones o subpro-
gramas, y únicamente tres estructuras de control: secuencia (sentencias), selección o condicional (if) e
iteración (ciclo o bucle)
Ejemplo:
def texto():
print("¡Hola mundo!")
>>> texto()
¡Hola mundo!
2.5.2. Parámetros
Un parámetro es un valor que la función espera recibir cuando sea llamada, a fin de
ejecutar acciones en base al mismo. Una función puede esperar uno o más parámetros (que irán
separados por una coma, entre los paréntesis que van seguidos después del nombre de la
función) o ninguno2 .
La sintaxis para crear una función con parámetros en Python es:
def mi_funcion(lista_de_parametros):
instrucciones
Donde:
def mi_funcion(a,b):
print(a-b) #Esta función resta al primer parámetro, el segundo parámetro.
>>> mi_funcion(5,3)
2
2
Como vimos en la sección anterior, para crear una función no es necesario que tenga parámetros.
Observación: La función del ejemplo anterior tiene dos argumentos, y estos deben ser del
tipo entero o real, entonces, si esta misma función es llamada con parámetros de otro tipo para
los cuales el operador − no esté definido, generará un error en su ejecución (lo mismo sucederá,
si se mezclan diferentes tipos de variable, por ejemplo int con str).
Además, si el operador soportara otros tipos de variable, el resultado ya no serı́a lo que
esperamos (la resta de dos números), por esto será necesario validar cada una de las variables,
antes de la ejecución de las instrucciones que definirán la finalidad de la función.
Si una función fue creada con parámetros y es llamada (o invocada) sin argumentos, generará
un error de ejecución. Para solucionar este problema, podemos crear los parámetros con ciertos
valores para que la función se ejecute con los valores establecidos en caso que sea llamada sin
argumentos.
La sintaxis para los parámetros serı́a:
Ejemplo:
>>> mi_funcion(5,3)
2
>>> mi_funcion()
-2
>>> mi_funcion(6)
3
Veamos otro ejemplo donde la función es definida con parámetros de diferentes tipos.
3
a − b = 1 − 3 = −2
Ejemplo:
def funcion_2(numero,texto):
print(2**numero)
print("El texto ingresado es: ", texto)
>>> funcion_2(3,"Hola")
8
El texto ingresado es: Hola
En el ejemplo anterior, notese que el primer argumento debe ser un número, y el segundo
una cadena de texto. Ası́, si ingresáramos argumentos de otro tipo, por ejemplo, escribiéramos
la instrucción funcion_2("Hola",3), esto causarı́a un error de ejecución ya que 2 no se puede
elevar a una cadena de texto, por lo tanto, el orden con que creamos los parámetros y el tipo
que variable que le “asociemos” en las instrucciones de la función, deben ser respetados por los
argumentos a la hora de llamar a la función.
Nota: Tenga en cuenta que al momento de llamar una función que fue definida con paráme-
tros, los siguientes casos pueden generar un error de ejecución:
Una forma de evadir el segundo problema de ejecución, presentado al final del apartado
anterior, es llamar a la función utilizando el nombre de cada parámetro y especificando su
valor.
Ejemplo:
def funcion_2(numero,texto):
print(2**numero)
print("El texto ingresado es: ", texto)
None: Es el único valor del tipo NoneType. None se usa con frecuencia para representar 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 defecto a los paráme-
tros de una función, podemos usar None, y mostrar un mensaje en pantalla, indicando que no
se colocaron argumentos.
Ejemplo:
>>> mi_funcion()
Error, se necesitan dos números como argumentos para ejecutar la función
>>> mi_funcion(6)
Error, se necesitan dos números como argumentos para ejecutar la función
>>> mi_funcion(5,3)
2
>>> mi_funcion(5,3)
>>> print(mi_funcion(5,3))
2
>>> x = mi_funcion(5,3)
>>> print(x)
2
>>> print(mi_funcion(5,3))
(2, 5, 3, [5, 3])
pass: es una operación nula, cuando se ejecuta, no sucede nada. Es útil como marcador de
posición cuando se requiere una declaración, pero no es necesario ejecutar ningún código. A
veces en la elaboración de programas, tenemos claro desde un inicio cuántas funciones llevará,
pero no ası́ el código de ellas, ası́ podemos usar pass para declarar las funciones y posteriormente
crear sus algoritmos.
Ejemplo:
def funcion_3():
pass #Esta función no hace nada.
>>> funcion_3()
Las variables por defecto son locales en Python, esto quiere decir que las variables definidas
dentro de una función no podrán ser utilizadas fuera de ellas. Para entender mejor lo descrito
antes, veamos un ejemplo.
Ejemplo:
def suma(x,y):
a=1
return x+y
>>> print(a)
NameError: name ’a’ is not defined
b=2
def suma(x,y):
print(b)
return x+y
>>> print(suma(2,3))
2
5
En este caso, sı́, es posible reutilizar la variable b dentro de la función (ya se muestra el valor
de b en pantalla). El carácter local o global de la variable dependerá desde qué estructura veamos
la variable, ya que si tenemos un programa principal, y definimos variables (pero no dentro de
una función u otra estructura que contenga el programa principal), entonces tendremos una
variable global. La razón de porqué llamarla global, es porque se podrán usar en todas las
estructuras que el programa principal contenga. Por otro lado una variable local, solo es
posible usarla en la estructura donde fue definida y no fuera de ella.
Observación: La variable b recibe el nombre de variable global, porque podemos usarla
dentro de la función, por otro lado a la variable a se le llamará variable local, porque no es
posible usarla fuera de la función.
A pesar del carácter local de las variables definidas en una función, podemos cambiar el
carácter local de la variable con global. La sintaxis para global seria: global variable,
ahora veamos un ejemplo de esto.
Ejemplo:
def suma(x,y):
global a
a=1
return x+y
>>> print(a)
1
Observación: Como vemos la variable a ha dejado de ser local, ya que ahora ya se puede
usar fuera de la función. En este caso la instrucción que transforma la variable a a global es
global a.
En la medida que interactuamos con Python, nos podemos encontrar con algunos 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 pantalla cuando escribimos algo que no
está dentro del lenguaje de Python.
Ejemplo:
>>> if x
SyntaxError: invalid syntax
>>> 1/0
ZeroDivisionError: division by zero
>>> "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 operació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 pro-
grama 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 erro-
res encontrados, especificando en pantalla que ha sucedido un error, pero permitiendo que el
programa continué su ejecución con normalidad.
Ejemplo:
try:
1/0
except:
print("No se puede dividir por cero")
>>> No se puede dividir por cero
En los primeros ejemplos vimos como Python ya clasifica estos tipos4 de errores, 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:
try:
1/0
except ZeroDivisionError:
print("No se puede dividir por cero")
>>> No se puede dividir por cero
Observación: En el ejemplo podemos ver que estamos buscando el error de dividir por
cero, sin embargo es probable que nuestros códigos presenten otros tipos de error, por ello se
sugiere agregar otro except, pero sin especificar el tipo de error.
Ejemplo:
try:
"2"+[2]
except ZeroDivisionError:
print("No se puede dividir por cero")
except:
print("Hay otro error")
>>> Hay otro error
4
Una lista completa de los diferentes tipos de excepciones que podemos usar en Python 3, lo podemos en-
contrar en el enlace siguiente: https://docs.python.org/3/library/exceptions.html#bltin-exceptions
Observación: Como vemos podemos tener más de un except. Sin embargo no puede existir
más de un try sin un except.
Normalmente try y except son utilizados para validar el funcionamiento de una función.
Veamos un ejemplo de esto:
Ejemplo:
def suma(x,y):
try:
r = x+y
return r
except:
print("Operación incorrecta.")
>>> print(suma(2,3))
5
La documentación de una función es muy importante, ya que con esto dejamos claro qué
valores espera recibir la función, ası́ como el tipo que deben ser y qué hace la función con ellos.
Además de especificar qué valor o valores devolverá, si es que devuelve algo la función. También,
se colocan ejemplos de implementación de la función creada, y datos del creador si es necesario.
Todo esto con el objetivo que el usuario sepa cómo trabajar con la función creada.
Ejemplo:
def 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)
Ejemplo:
>>> suma(2,3)
5
>>> print(suma(3,4))
7
Nota: La documentación de una función debe colocarse siempre entre las triples comillas,
o sea la sintaxis es """texto""".
La documentación nunca se despliega en pantalla mientras se ejecuta la función, ya que es
un recurso de carácter informativo, ası́ para que podamos ver dicha documentación es necesario
usar help.
Ejemplo:
def 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)
Ejemplo:
>>> suma(2,3)
5
>>> help(suma)
Help on function suma in module __main__:
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)
Ejemplo:
>>> suma(2,3)
5
Observación: Notese que para usar help, solo es necesario colocar entre paréntesis el
nombre de la función (ejemplo: help(suma)).
2.9. Ejercicios - 1
1. Escriba un programa que genere y guarde los primeros n números de Fibonacci en una
lista.
2. Dadas dos listas, hacer un programa que imprima los elementos de la primera 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 resultado sea una
lista con elementos alternados de las dos listas dadas, por ejemplo:
7. Escribe un programa que dado un número entero n positivo, genere en pantalla el triángulo
de Pascal. Por ejemplo, si n = 5, el resultado que se espera es:
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 funcionamiento de la función.
1. Cree una función que devuelva el área de un triángulo dadas las coordenadas 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 repre-
sentación como esta: 1569 = 1*10^3+5*10^2+6*10^1+9*10^0
6. Escribir una función que resuelva un sistema de ecuaciones lineales de dos incógnitas.
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.
9. Diseña una función que devuelva el valor absoluto de la máxima diferencia entre cualquier
par de elementos de una lista. Por ejemplo, el valor devuelto para la lista [1, 10, 2, 6, 8, 2]
es 9, pues es la diferencia entre el valor 10 y el valor 1.
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.
Módulos
46
BML | From e Import 47
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:
import numpy
a=4 a=4
print(a) print(a)
import numpy
print(numpy.cos(1)) print(numpy.cos(1))
>>> >>>
4 4
0.5403023058681398 0.5403023058681398
Observación: Notemos que para usar las funciones que las librerı́as3 contienen, se usa la
misma sintaxis que para los módulos, por está razón los trataremos como módulos especiales.
1
Las clases son estructuras más complejas que las funciones en Python. las clases serán estudiadas en el
curso de Programación II.
2
Al inicio del curso se abusó del término módulo especial, sin embargo, debe quedar claro que Numpy es una
librerı́a. Las librerı́as serán tratadas como módulo, ya que la sintaxis para usar sus funciones es similar.
3
Las librerı́as son un conjunto de módulos que se interrelacionan entre sı́.
From e Import
Otra forma de usar import es usándolo junto a from, esto permite usar las funciones y
constantes de manera usual, solo usando sus nombres, sin hacer referencia al módulo al que
pertenece. La sintaxis es: from nombre_del_modulo import *
El asterisco que aparece en la instrucción import, hace que todas las funciones y constantes
del módulo estén disponibles para el programa.
Ejemplos:
A veces solo estamos interesados en usar ciertas funciones de un módulo, para esto solo
debemos cambiar el asterisco por el nombre de la función que necesitamos. La sintaxis es:
Nota: La instrucción anterior solo hará que el programa reconozca la función que hayamos
especificado, ası́ será imposible usar otra función distinta a las que hayamos importado del
módulo.
Ejemplos:
Observación: En este ejemplo será imposible usar otra función del módulo especial numpy,
porque se especificó que la función cos sea la única que se importe, si quisiéramos otra función
deberı́amos agregarla después de cos, separándolos por comas, por ejemplo import cos, sin,
ası́ tendremos a disposición la función cos y sin.
A lo largo del curso hemos estado creando módulos inconscientemente (de alguna 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 constates (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 funciones 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))
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 instruc-
ció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:
print(npy.cos(1))
>>>
4
0.5403023058681398
Paquetes y módulos
Un paquete es una carpeta que contiene módulos, y posiblemente otros paquetes y un archivo
__init__.py4 . En la siguiente imagen mostramos la relación entre paquete y módulo:
Para poder usar un paquete en nuestros programas, debemos usar las sentencias from y
import de la siguiente manera:
print(aritmética.sumar(1,2))
>>>
4
3
Observación: Notemos que el módulo es llamado por la instrucción import, en ese caso
será necesario escribir el nombre del módulo, seguido de un punto y finalizando con el nombre
de la función que deseamos usar.
3.3. Ejercicios
Indicaciones: En cada uno de los siguiente problema debe crearse un programa modular5
(que funcione como módulo y programa), que facilite la creación de un segundo programa (este
no debe ser un módulo) importando el programa modular creado previamente.
3. Escribir un programa que devuelva la suma de los múltiplos de 3 y 5 que están entre 0 y
n (parámetro).
4. Escribir un programa que imprima en pantalla los números primos entre 1 y n (parámetro).
5. Escribir un programa que verifique la velocidad de los conductores. Dada una velocidad
(en kilómetros por hora) se verifique y aplique lo siguiente:
5
Este módulo debe contener todas las funciones auxiliares que se requieran para la creación del programa o
programas que se solicitan en cada literal.
Secuencias en Python
53
BML | Métodos 54
Ya hemos estudiado al inicio del curso las listas, en este apartado no solo retomamos 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).
Ejemplo:
Observación: Al igual que las listas, las tuplas pueden contener una combinació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:
>>> mi_tupla[1]
2
>>> mi_tupla[0]
1
>>> mi_tupla[3]
[1, (2, 3)]
>>> len(mi_tupla)
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.1.2. Métodos
De manera informal los métodos1 son funciones que son exclusivamente para tipos de datos
que pueden contener otros elementos2 dentro de Python. En este curso solo hablaremos de
1
La definición correcta será presentada en el curso de programación II.
2
Estos elementos pueden ser de los tipos que conocemos, por ejemplo int, float o list.
1. capitalize (): Devuelve una copia de la cadena con el primer carácter en mayúscula.
Ejemplo:
6. isdigit(): Devuelve verdadero si todos los caracteres de la cadena son dı́gitos. En caso
contrario, devuelve falso.
Ejemplos:
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
Ejemplo:
3. extend(argumento_lista): Este método extiende una lista agregando uno a uno los
elementos de argumento_lista al final.
Ejemplos:
1 1
Ejemplo:
[1, 2, 3, 0, 4, 5]
9. sort()3 : Este método ordena los elementos de una lista de menor a mayor.
3
En el enlace para los métodos de una lista podrán encontrar que este método tiene argumentos y cómo
usarlos.
Ejemplo:
Una lista con el resto de métodos para listas, lo podrán encontrar en el siguiente 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.2. Diccionarios
Hasta el momento, hemos visto estructuras en Python que nos permiten guardar 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 ı́ndice, 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.
La diferencia más importante entre las listas y tuplas, con respecto a los diccionarios, es que
sus elementos son identificados por una clave, dicha clave no tiene necesariamente un orden o
relación dentro de las demás claves4 , 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:
Observación: En el ejemplo anterior, podemos notar que las claves no son necesariamente
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:
Observación: Para acceder al valor "Lazaro", usamos la clave "Nombre" (de igual forma
para [1, 2], que en este caso su clave es 2).
Una caracterı́stica que comparten los diccionarios con las listas, es que podemos cambiar
sus valores (más precisamente podemos cambiar el valor a una clave), la forma de hacerlo es la
misma que se hace con las listas, solo que usando la clave, en vez de un ı́ndice.
Ejemplo:
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.
Ejemplo:
Una lista con el resto de métodos para diccionarios, lo podrán encontrar en el siguiente
enlace: https://www.tutorialspoint.com/python3/python_dictionary.htm
4.3. Ejercicios
Indicaciones: En cada uno de los siguiente problema debe crearse un programa o programa
modular5 (que funcione como módulo y programa).
6. Utilizando cadenas, descomponer un número real con no más de tres espacios decimales
en suma de potencias de 10.
7. Usando listas y tuplas, reciba dos listas de datos enteros y luego cree el producto cartesiano
de dichas listas.
8. Dado un conjunto de enteros ingresados por el usuario, cree una lista de pares ordenados
que corresponda a las siguientes relaciones:
a. R en A, R = {(x, y) : x2 + y 2 = 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 relaciones:
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.
Ficheros
65
BML | Matriz en Numpy. 66
5.1. Matrices
Una matriz en Python es simplemente una lista de listas, donde cada sublista es la repre-
sentació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
>>> A = [[2,1,2],[3,3,3],[1,3,0]]
[[2, 1, 2], [3, 3, 3], [1, 3, 0]]
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 array1 y la otra es
usando el módulo matrix. Nos ocuparemos del segundo2 , 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).
Ejemplo: Consideremos la matriz A de la siguiente manera:
2 1 2
A = 3 3 3
1 3 0
Por la forma que hemos creado las matrices, estas guardan información importante para
nosotros, estos datos son conocidos atributos3 . La sintaxis para acceder a los atributos de
una matriz es: mi_matriz.variable_atributo. Los atributos más importantes que podemos
encontrar son:
a) A.H: Devuelve la matriz transpuesta conjugada (si sus elementos son números complejos,
tendremos la matriz transpuesta conjugada, sino es la matriz transpuesta) de la matriz A.
b) A.T: Devuelve la matriz transpuesta de la matriz A.
Ejemplo:
3
Los atributos son variables creadas con información importante del objeto (esto se estudia en programación
II).
Las operaciones se pueden realizar de manera natural con los operadores de suma, resta y
multiplicación en las matrices.
Ejemplos:
>>> A+B
matrix([[4, 4, 6],
[3, 4, 3],
[6, 9, 8]])
>>> A-B
matrix([[ 0, -2, -2],
[ 3, 2, 3],
[-4, -3, -8]])
>>> A*B
matrix([[14, 19, 24],
[21, 30, 36],
[ 2, 6, 4]])
Las matrices tienen métodos integrados. A continuación se presentan dos métodos muy
usados:
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 formato ma-
trix, la podrán encontrar en el siguiente enlace: https://numpy.org/doc/1.18/reference/
generated/numpy.matrix.html
Python nos permite manipular archivos de escritura poco complejas, uno de ellos son los
archivos .txt, estos archivos básicos de escritura podemos usarlos en la elaboración de nuestros
programas, extrayendo su información y escribiendo en ellos resultados relacionados con la
finalidad del programa principal.
A continuación, trataremos algunas funciones que nos permiten crear, abrir y modificar
archivos .txt.
Nota: Los archivos creados o usados .txt, deben estar siempre en la misma carpeta de
trabajo4 .
nombre_archivo: Debe ser una cadena de texto que indique el nombre del archivo
(incluso su extensión).
modo_abrir: Este argumento nos permite indicarle a Python cómo vamos a abrir el
archivo, si es crearlo, leerlo o modificarlo. A continuación, presentamos una tabla donde
están los distintos modos.
Modo Descripción
El archivo se abre en modo de solo lectura, no se puede escribir
r
(argumento por defecto).
Se crea un nuevo archivo y se abre en modo de lectura (si existe un
w
archivo con el mismo nombre, se borra).
El archivo se abre en modo de agregar, los datos escritos se agregan
a
al final del archivo.
r+ El archivo se abre para lectura y escritura al mismo tiempo.
El archivo se abre en modo binario, para almacenar cualquier cosa
b
que no sea texto.
El archivo se abre con soporte a nueva linea universal, cualquier fin
U
de linea ingresada sera como un \n en Python.
4
Esto permite mayor comodidad, porque si estuvieran en otra carpeta, tendrı́amos que especificar la ruta de
acceso a dichos archivos.
5
Este tipo de dato en Python 3 es una clase, se deja al estudiante investigar sobre las diferencias entre
Python 2 y Python 3.
Ejemplo:
b) 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.
c) write(texto): Este método permite escribir el contenido de una cadena de texto al archivo.
El argumento texto debe ser una cadena de texto con la información que deseamos agregar
al archivo.
Ejemplo:
d) close(): Este método permite cerrar la manipulación del archivo. No es posible escribir 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 en-
lace: 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.
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 para trabajar archivos
.csv. Recordemos que para usar Pandas hay que importarlo, además de abreviarlo como pd
para mayor comodidad.
Para manipular la información guardada en un archivo .csv, debemos usar ciertos métodos
de la librerı́a de Pandas, a continuación mostramos los más usados:
nombre_archivo: Debe ser una cadena de texto que tenga el nombre del archivo .csv
a abrir (debe escribirse con la extensión).
names: Este argumento es opcional y debe ser una lista que contenga los encabezados
que queramos colocar a cada columna.
header: Este argumento es opcional, debe ser un entero, que significa desde cuál fila
será leı́do el documento (la primera fila leida la toma como los encabezados de la tabla).
Si deseamos que todo el contenido sean valores a usar, debemos colocar header=None.
Ejemplos:
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
nombres notas
0 Nombres Notas
1 Jorge 7
2 Carlos 6
3 Sofia 10
Carlos 6
0 Sofia 10
0 1
0 Nombres Notas
1 Jorge 7
2 Carlos 6
3 Sofia 10
Nombres Notas
0 Juan Carlos 7
1 Policarpo 5
Una vez leı́do o creado un archivo DataFrame de Pandas, podremos acceder a la información
de manera similar 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:
nombre_archivo: Este argumento debe ser una cadena de texto, y debe contener el
nombre completo del archivo.csv, si no existe tal archivo se crea de manera automática.
mode: Este argumento es igual que el de la función open() (es opcional).
index: Este argumento es booleano, y si es True, agrega la numeración de cada fila, y
si es False, no agrega la numeración de las filas (es opcional).
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.
Observación: El modo "a"6 indica que agregue al final7 del archivo la información. Por otro
lado, index=False y header=False, le indican a Python que no agregue, ni numeración ni
encabezados.
b) iloc[]: Este método permite acceder a uno o varios elementos guardados en el DataFrame
de Pandas (como si fuera una matriz). Dependiendo del argumento que coloquemos ası́
podremos obtener cierta información. A continuación veamos algunos de ellos:
Ejemplo:
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
>>> datos.iloc[1]
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, indicando a qué encabezado le corres-
ponde cada valor. Además vemos que podemos convertir la fila seleccionada en una lista.
Ejemplos:
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
>>> datos.iloc[1:3]
Nombres Notas
1 Carlos 6
2 Sofia 10
>>> datos.iloc[2,1]
10
a la columna a ordenar (si el encabezado es texto, debe colocarse como cadena de texto,
para el valor del argumento).
El argumento ascending es opcional. Si ascending = True, entonces se ordenan de forma
ascendente, sino ascending = False se ordenan de forma descendente.
Ejemplo:
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
Nombres Notas
1 Carlos 6
0 Jorge 7
2 Sofia 10
Observación: Notemos que si no se especifica ascending = True, por defecto toma ese
valor para el parámetro opcional.
Ejemplo:
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
Nombres Notas
2 Sofia 10
0 Jorge 7
1 Carlos 6
Además de los métodos descritos anteriormente, existen otras formas de acceder a la infor-
mación de nuestros DataFrame, por ejemplo, si queremos acceder a una columna de nuestra
base de datos, lo podemos hacer de la siguiente manera mis_datos[Encabezado].
Ejemplo:
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
>>> datos["Nombres"]
0 Jorge
1 Carlos
2 Sofia
Name: Nombres, dtype: object
Nombres Notas
0 Jorge 7
1 Carlos 6
2 Sofia 10
>>> datos[1:3]
Nombres Notas
1 Carlos 6
2 Sofia 10
8
Los métodos presentados, solo abarcan los argumentos opciones más utilizados, sin embargo, como podrán
ver en el enlace, cada método tiene más argumentos opciones, estos permiten manipular otros aspectos de los
datos del DataFrame.
5.4. Laboratorio - 1
Indicaciones:
Debe crearse un programa o programa modular9 (que funcione como módulo y programa).
Las funciones auxiliares deben tener documentación, especificando qué variable está de-
volviendo, y de qué tipo son, y lo mismo para los argumentos.
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 interrogantes:
El programa principal debe organizar los datos en una distribución de frecuencia y distri-
bución de frecuencia relativa. Ambas tablas deben ser presentadas en pantalla y generar
un nuevo archivo .csv que las contenga (no debe usarse Excel en esta parte).
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
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:
9
Este módulo debe contener todas las funciones auxiliares que se requieran para la creación del programa o
programas que se necesiten en cada numeral.
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.
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:
Debe crearse un programa o programa modular10 (que funcione como módulo y programa).
Las funciones auxiliares deben tener documentación, especificando qué variable está de-
volviendo, y de qué tipo son, y lo mismo para los argumentos.
El programa principal y funciones auxiliares deben tener una documentación apropiada,
explicando procesos no tan obvios.
El programa principal debe crear un archivo .txt que contenga la siguiente información.
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
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
10
Este módulo debe contener todas las funciones auxiliares que se requieran para la creación del programa o
programas que se necesiten en cada numeral.
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
Recursividad
84
BML | Funciones recursivas 85
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:
1. Caso base o de fin de recursión: Es un caso donde el problema puede resolverse sin
tener que hacer uso de una nueva llamada a sı́ mismo. Evita la continuación indefinida
de las partes recursivas.
2. Parte recursiva: Relaciona el resultado del algoritmo con resultados de casos más sim-
ples. Se hacen nuevas llamadas a la función, hasta llegar al caso base.
Observación: Debemos conocer bien el momento en que la función deberá dejar de llamarse
a sı́ mismas o tendremos una función recursiva infinita.
Veamos a continuación dos ejemplos de funciones recursivas, una donde no retorne nada y
otra donde sı́ retorne un valor.
Ejemplo:
def tabla2(n):
if n>0:
print("2 *",n," = ",2*n)
tabla2(n-1)
else:
print("2 *",n," = ",2*n)
>>> 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:
def factorial(n):
if n>0:
return n*factorial(n-1)
else:
return 1
>>> factorial(0)
1
>>> factorial(1)
1
>>> factorial(5)
120
Observación: En el caso anterior tenemos una función que retorna el factorial de un número
entero positivo n o cero, nótese que una vez más no hemos implementado un ciclo para encontrar
el factorial (como podrı́a pensarse en un principio), sino que sea ha hecho que la función se
llame a sı́ misma, para crear el efecto de multiplicar n con todos los número enteros positivos
anteriores a él.
En ambos ejemplos, podemos notar que hemos dejado claro que cuando n = 0 la función
debe parar de llamarse, provocando que la acción iterativa de llamarse tenga un fin. Debe
estar claro bajo qué instancia la función dejará de llamarse, porque si hay ambigüedad, podrı́a
resultar en una función iterativa infinita (nunca pararı́a).
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.
a) Recursividad simple: Son las funciones que sólo hacen una llamada recursiva (a sı́ mis-
mas). Se puede transformar con facilidad en algoritmos iterativos (ciclos).
Ejemplo:
def factorial(n):
if n>0:
return n*factorial(n-1)
else:
return 1
>>> factorial(5)
120
b) 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:
def fibonacci(n):
if n<=1:
return 1
else:
return fibonacci(n-1)+fibonacci(n-2)
>>> fibonacci(5)
8
c) Recursividad anidada: Una función recursiva es anidada cuando entre los parámetros que
se pasan a la función se incluye una invocación a la misma.
Ejemplo: 1
def Ackermann(m,n):
if m==0:
return n+1
elif m>0 and n==0:
return Ackermann(m-1,1)
else:
return Ackermann(m-1,Ackermann(m,n-1))
>>> Ackermann(3,2)
29
d) Recursividad cruzada o indirecta: Son algoritmos donde una función provoca una lla-
mada a sı́ misma de forma indirecta, a través de otras funciones.
Ejemplo:
def par(n):
if n==0:
return True
else:
return impar(n-1)
def impar(n):
if n==0:
return False
else:
1
Esta es la implementación en Python de la función de Ackermann, en el siguiente enlace, podrán encontrar
un poco de información sobre esta función: https://es.wikipedia.org/wiki/Funci%C3%B3n_de_Ackermann
return par(n-1)
>>> par(5)
False
>>> impar(5)
True
Una tarea muy habitual en programación, es la de ordenar ciertos datos bajo cierto criterio2 ,
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 peine.
Ordenamiento rápido.
Ordenamiento de Shell.
2
Las relaciones de orden más usadas son el orden numérico y el orden lexicográfico. Estas relaciones
de orden son muy útiles en materias como topologı́a.
6.4. Ejercicios
Indicaciones: En cada uno de los siguiente problema debe crearse un programa o programa
modular3 (que funcione como módulo y programa).
1. Para cada literal, hacer un programa que dada un número entero positivo calcule el n-ési-
mo 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 diferencia 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.
an = 5an−1 + 6an−2 , n ≥ 2, a0 = 1, a1 = 3
6. Hacer un programa que dado un entero n ≥ 0, de vuelva el n-ésimo termino del siguiente
sistema de relación de recurrencia.
an+1 = 2an − bn + 2
n ≥ 0, a0 = 0, b0 = 1
bn+1 = −an + 2bn − 1
3
Este módulo debe contener todas las funciones auxiliares que se requieran para la creación del programa o
programas que se solicitan en cada literal.
Programación funcional
90
BML | Filter. 91
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 subrutinas).
Las funciones lambda a menudo son usadas como argumentos que pasan a ser funciones de
orden superior 1 , o se usan para construir el resultado de una función de orden superior que
necesita devolver.
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:
Nota: Las funciones lambda por defecto devuelven un resultado, por ende no es necesario
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ámetro
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 booleana2 y una lista, y devuelve otra lista,
con los valores de la lista ingresada que cumplen la función booleana. La lista que devuelve
1
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.
2. Devolver una función como salida.
En matemática estas funciones se llaman operadores o funcionales. Ejemplos: la derivada y la antiderivada.
2
El término función booleana se refiere que devuelve True o False.
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 booleana3 , sin paréntesis y sin
argumentos.
Ejemplo:
def multiplo_2(n):
if n%2==0:
return True
else:
return False
>>> x = [1,2,3,4,5,6,7,8,9,10]
>>> list(filter(multiplo_2,x))
[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 argumentos.
Además, debe ponerse tantas listas como argumentos tenga la función.
Ejemplos:
def multiplicar_2(n):
return n*2
>>> x = [1,2,3,4,5,6,7,8,9,10]
>>> list(map(multiplicar_2,x))
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
>>> x = [1,2,3,4,5,6,7,8,9,10]
>>> list(map(lambda n: n*2,x))
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
3
Si la función no es booleana, ¿cuál serı́a el resulta?
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.
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 argumentos.
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:
def sumar(n,m):
return n+m
>>> x = [1,2,3,4,5,6,7,8,9,10]
>>> reduce(sumar,x)
55
>>> x = [1,2,3,4,5,6,7,8,9,10]
>>> reduce(lambda n,m:n+m,x)
55
7.3. Ejercicios
Indicaciones: En cada uno de los siguiente problema debe crearse un programa o programa
modular4 (que funcione como módulo y programa).
1. Para cada literal, Hacer un programa que dado un entero positivo, calcule la suma parcial
hasta el termino n-ésimo.
n
X
a) (4k − 3)
k=1
n
X 1
b)
k=1
2k
n
X 3k − 6
c)
k=1
2
2. Para cada literal, Hacer un programa que dado un entero positivo, calcule el producto
hasta el termino n-ésimo.
n
Y k
a)
k=2
k−1
n
Y
b) (k + 1)2
k=0
n
Y (−1)k
c)
k=0
2k + 1