Programacion Inicial Python (1)
Programacion Inicial Python (1)
Programacion Inicial Python (1)
Mirábile Marcelo
Asignatura: Programación
PYTHON
Ventajas
1
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Desventajas
Análisis de datos.
Aplicaciones de escritorio.
Bases de datos relacionales / NoSQL
Buenas prácticas de programación / Patrones de diseño.
Concurrencia.
Criptomonedas / Blockchain.
Desarrollo de aplicaciones multimedia.
Desarrollo de juegos.
Desarrollo en dispositivos embebidos.
Desarrollo móvil.
Desarrollo web.
DevOps / Administración de sistemas / Scripts de automatización.
Gráficos por ordenador.
Inteligencia artificial.
Internet de las cosas.
Machine Learning.
Programación de parsers / scrapers / crawlers.
Programación de redes.
Propósitos educativos.
Prototipado de software.
Seguridad.
Tests automatizados.
Comenzando a programar
Cuando vamos a trabajar con Python debemos tener instalado, como mínimo, un
intérprete del lenguaje (para otros lenguajes sería un compilador). El intérprete nos
permitirá ejecutar nuestro código para obtener los resultados deseados. La idea del
intérprete es lanzar instrucciones “sueltas” para probar determinados aspectos.
Pero normalmente queremos ir un poco más allá y poder escribir programas algo
más largos, por lo que también necesitaremos un editor. Un editor es un programa que nos
2
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
permite crear archivos de código (en nuestro caso con extensión *.py), que luego son
ejecutados por el intérprete.
Todo archivo que contenga código Python debe tener como extensión .py para que
el intérprete pueda ejecutarlo correctamente.
3
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
print("Esto es un mensaje")
edad = 30
print ("Mi edad es:", edad)
nombre = "Pedro"
apellido = "Perez"
print ("Mi nombre es:",nombre," y mi apellido es:", apellido)
Note que con la edad se está utilizando además una función que se llama int, aquí lo
que se hace es “convertir” lo que se ingresa por teclado en un numero entero. Si lo que se
ingresa no es eso, se muestra un error. Más adelante profundizaremos en este tema.
Encoding
El encoding no es más que una directiva que se coloca al inicio de un archivo
Python, a fin de indicar al sistema, la codificación de caracteres utilizada en el archivo.
Cuando se utiliza algunas herramientas en particular se puede omitir esta línea ya que la
misma herramienta setea por defecto la codificación a utilizar para este tipo de código.
4
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Datos
Los programas están formados por código y datos. Pero a nivel interno de la
memoria del ordenador no son más que una secuencia de bits. La interpretación de estos
bits depende del lenguaje de programación, que almacena en la memoria no sólo el dato
puro sino distintos metadatos. En resumen los datos es toda aquella información con la que
contamos para poder resolver el problema que se nos plantea, por ejemplo, si el problema
es hacer un programa de facturación seguramente tendremos datos como producto, precio,
cantidad, cliente, condición frente al IVA, etc, etc.
Cada dato dentro de nuestro programa tiene, al menos, los siguientes campos:
• Un tipo del dato almacenado.
• Un identificador único para distinguirlo de otros objetos.
• Un valor consistente con su tipo.
Variables
Los datos los representamos en nuestro programa a través de las variables, las
cuales juegan un papel súper importante en nuestro programa porque nos permite definir
nombres para los valores que tenemos en memoria y que vamos a usar en nuestro
programa.
5
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Asignación
En Python se usa el símbolo = para asignar un valor a una variable:
nota = 9;
sueldo = 75000.84
nombre = “Juan Perez”
materia = “programacion”
otra_materia = materia #aqui le estoy asignando el valor de la variable materia a
#otra variable que se llama otra_materia
Aquí hay 3 variables (uno, dos y tres) a las cuales se les asigna en una sola sentencia
el valor 3.
6
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Tipos de Datos
En Python los tipos básicos se dividen en:
Vamos a crear un par de variables a modo de ejemplo. Una de tipo cadena y una de
tipo entero:
# y esto es un entero
e = 23
7
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Nota: toda línea que comience con el símbolo # es una línea comentario, es decir
que el intérprete no la considera a la hora de “traducir”.
Números
Como decíamos, en Python se pueden representar números enteros, reales y
complejos.
Enteros
Los números enteros son aquellos números positivos o negativos que no tienen
decimales (además del cero). En Python se pueden representar mediante el tipo int (de
integer, entero) o el tipo long (largo). La única diferencia es que el tipo long permite
almacenar números más grandes. Es aconsejable no utilizar el tipo long a menos que sea
necesario, para no malgastar memoria.
En Python los números int están comprendidos por lo rangos: -2.147.483.648 a
2.147.483.647, para plataformas de 32 bits mientras que en plataformas de 64 bits, el rango
es de -9.223.372.036.854.775.808 hasta 9.223.372.036.854.775.807.
El tipo long de Python permite almacenar números de cualquier precisión, estando
limitados solo por la memoria disponible en la máquina.
Reales
Los números reales son los que tienen decimales. En Python se expresan mediante
el tipo float.
Los valores que podemos representar con este tipo de dato van desde
±2,2250738585072020 x 10-308 hasta ±1,7976931348623157×10308.
real = 0.2703
Complejos
Los números complejos son aquellos que tienen parte imaginaria. Si no conocías su
existencia, es más que probable que nunca lo vayas a necesitar, por lo que no deberías
preocuparte demasiado por ello. De hecho la mayor parte de lenguajes de programación
carecen de este tipo, aunque sea muy utilizado por ingenieros y científicos en general.
En el caso de que se necesite utilizar números complejos, o simplemente se tenga la
curiosidad, este tipo de dato, llamado complex en Python, también se almacena usando
coma flotante, debido a que estos números son una extensión de los números reales.
Operadores
Veamos ahora qué podemos hacer con nuestros números usando los operadores por
defecto. Para operaciones más complejas podemos recurrir al módulo math.
8
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Operadores aritméticos
9
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Cadenas
Las cadenas no son más que texto encerrado entre comillas simples (‘cadena’) o
dobles (“cadena”). Dentro de las comillas se pueden añadir caracteres especiales
escapándolos con \, como \n, el carácter de nueva línea, o \t, el de tabulación.
Una cadena puede estar precedida por el carácter u o el carácter r, los cuales
indican, respectivamente, que se trata de una cadena que utiliza codificación Unicode y una
cadena raw (del inglés, cruda). Las cadenas raw se distinguen de las normales en que los
caracteres escapados mediante la barra invertida (\) no se sustituyen por sus contrapartidas.
Esto es especialmente útil, por ejemplo, para las expresiones regulares.
unicode = u”äóè”
raw = r”\n”
También es posible encerrar una cadena entre triples comillas (simples o dobles).
De esta forma podremos escribir el texto en varias líneas, y al imprimir la cadena, se
respetarán los saltos de línea que introdujimos sin tener que recurrir al carácter \n, así como
las comillas sin tener que escaparlas.
Las cadenas también admiten operadores como +, que funciona realizando una
concatenación de las cadenas utilizadas como operandos y *, en la que se repite la cadena
tantas veces como lo indique el número utilizado como segundo operando.
a = “uno”
b = “dos”
c = a + b # c es “unodos”
c = a * 3 # c es “unounouno”
Booleanos
Como decía anteriormente, una variable de tipo booleano sólo puede tener dos
valores: True (cierto) y False (falso). Estos valores son especialmente importantes para las
expresiones condicionales y los bucles, como veremos más adelante.
En realidad el tipo bool (el tipo de los booleanos) es una subclase del tipo int. Puede
que esto no tenga mucho sentido para tí si no conoces los términos de la orientación a
objetos, que veremos más adelante, aunque tampoco es nada importante.
Estos son los distintos tipos de operadores con los que podemos trabajar con valores
booleanos, los llamados operadores lógicos o condicionales:
10
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Conversión implícita
Cuando mezclamos enteros, booleanos y flotantes, Python realiza automáticamente
una conversión implícita (o promoción) de los valores al tipo de «mayor rango». Veamos
algunos ejemplos de esto:
print(True + 25)
26
print(7 * False)
0
print(True + False)
1
print(21.8 + True)
22.8
print(10 + 11.3)
21.3
11
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Conversión explícita
Aunque más adelante veremos el concepto de función, desde ahora podemos decir
que existen una serie de funciones para realizar conversiones explícitas de un tipo a otro:
print (bool(1))
True
print(bool(0))
False
print(int(True))
1
print(int(False))
0
print(float(1))
1.0
print(float(0))
0.0
print(float(True))
1.0
print(float(False))
0.0
En el caso de que usemos la función int() sobre un valor flotante, nos retorna su
parte baja:
𝑖𝑛𝑡(𝑥) = ⌊︀𝑥⌋︀
Por ejemplo:
print(int(3.1))
3
print(int(3.5))
3
print(int(3.9))
3
Sentencias
Una sentencia es una instrucción que puede ejecutar el intérprete de Python. Hemos
visto dos tipos de sentencias: print y la asignación. Cuando usted escribe una sentencia en
la línea de comandos, Python la ejecuta y muestra el resultado, si lo hay. El resultado de
una sentencia print es un valor.
12
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Expresiones
Una expresión es una porción de código Python que produce o calcula un valor
(resultado). Desde otro punto de vista, una expresión es una combinación de valores,
variables y operadores.
Un valor es una expresión (de hecho es la expresión más sencilla). Por ejemplo el
resultado de la expresión 111 es precisamente el número 111.
Una variable es una expresión, y el valor que produce es el que tiene asociado en el
estado (si x → 5 en el estado, entonces el resultado de la expresión x es el
número 5).
o Sin embargo, hay que tener cuidado con lo que sucede con los cocientes.
Si x / y se calcula como la división entera entre x y y, entonces si x se refiere
al valor 12 e y se refiere al valor 9, entonces x / y se refiere al valor 1.
13
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Más ejemplos:
A = 10
B = 20
C=A+B
print (C)
Definición de bloques
A diferencia de otros lenguajes que utilizan llaves para definir los bloques de
código, cuando se creó el lenguaje Python se quiso evitar estos caracteres por considerarlos
innecesarios. Es por ello que en Python los bloques de código se definen a través de
espacios en blanco, preferiblemente 4. En términos técnicos se habla del tamaño de
indentación.
Consejo: Esto puede resultar extraño e incómodo a personas que vienen de otros lenguajes
de programación pero desaparece rápido y se siente natural a medida que se escribe
código.
14
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Comentarios
Los comentarios son anotaciones que podemos incluir en nuestro programa y que
nos permiten aclarar ciertos aspectos del código. Estas indicaciones son ignoradas por el
intérprete de Python.
Los comentarios se incluyen usando el símbolo almohadilla # y comprenden hasta
el final de la línea.
Si queremos comentar mas de una línea podemos hacerlo línea por línea o un
conjunto se líneas. Por ejemplo:
Control de Flujo
Todo programa informático está formado por instrucciones que se ejecutan en forma
secuencial de «arriba» a «abajo», de igual manera que leeríamos un libro. Este orden
constituye el llamado flujo del programa. Es posible modificar este flujo secuencial para
que tome bifurcaciones o repita ciertas instrucciones. Las sentencias que nos permiten
hacer estas modificaciones se engloban en el control de flujo.
15
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
temperatura = 40
if temperatura > 35:
print(“Aviso por alta temperatura”)
En el caso anterior se puede ver claramente que la condición se cumple y por tanto se
ejecuta la instrucción que tenemos dentro del cuerpo de la condición. Pero podría no ser así.
Para controlar ese caso existe la sentencia else. Veamos el mismo ejemplo anterior pero
añadiendo esta variante:
temperatura= 20
if temperatura> 35:
print(“Aviso por alta temperatura”)
else:
print(“Parámetros normales”)
temperatura= 28
if temperatura< 20:
if temperatura< 10:
print(“Nivel azul”)
else:
print(“Nivel verde”)
else:
if temperatura< 30:
print(“Nivel naranja”)
else:
print(“Nivel rojo”)
Python nos ofrece una mejora en la escritura de condiciones anidadas cuando aparecen
consecutivamente un else y un if. Podemos sustituirlos por la sentencia elif:
16
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
temperatura= 28
if temperatura< 20:
if temperatura< 10:
print(“Nivel azul”)
else:
print(“Nivel verde”)
elif temperatura< 30:
print(“Nivel naranja”)
else:
print(“Nivel rojo”)
temperatura = 40
humedad = 80
if (temperatura > 30 and humedad > 60):
print(“Dia con calor y humedad”)
if (temperatura < 42 or humedad < 85):
print(“Dia soportable, puede ser peor”)
is_cold = True
if is_cold == True:
print(“Usa campera”)
else:
print(“No usa remera”)
17
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Ejercicio
Escriba un programa que permita adivinar un personaje de Marvel en base a las tres
preguntas siguientes:
1. ¿Puede volar?
2. ¿Es humano?
3. ¿Tiene máscara?
Utilice el siguiente grafico como ayuda para resolverlo:
Sentencia “match-case”
Comparando valores
En su versión más simple, el «pattern matching» permite comparar un valor de entrada
con una serie de literales. Algo así como un conjunto de sentencias «if» encadenadas.
Veamos esta aproximación mediante un ejemplo:
18
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
numero = 10
match numero:
case 10:
print("El numero es 10")
case 11:
print("El numero es 11")
case 12:
print("El numero es 12")
¿Qué ocurre si el valor que comparamos no existe entre las opciones disponibles? Pues
en principio, nada, ya que este caso no está cubierto. Si lo queremos controlar, hay que
añadir una nueva regla utilizando el subguión _ como patrón:
numero = 15
match numero:
case 10:
print("El numero es 10")
case 11:
print("El numero es 11")
case 12:
print("El numero es 12")
case _ :
print("El numero es OTRO")
edad = 14
match edad:
case 0 | None: #aquí hay un or, lo que significa que puede ser una opción u otra
print('No es una edad valida')
case n if n < 17:
print('No puede Beber')
case n if n < 22:
print('Puede beber con precaucion')
case _:
print('Si puede beber')
Bucles
Cuando queremos hacer algo más de una vez, necesitamos recurrir a un bucle. En esta
sección veremos las distintas sentencias en Python que nos permiten repetir un bloque de
código.
19
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
La sentencia while
El primer mecanismo que existe en Python para repetir instrucciones es usar la sentencia
while. La semántica tras esta sentencia es: «Mientras se cumpla la condición haz algo».
Veamos un sencillo bucle que muestra por pantalla los números del 1 al 4:
value = 1
while value <= 4:
print(value)
value += 1
El programa imprime: 1 2 3 4
num = 20
while num >= 1:
if num % 3 == 0:
print(num)
break
num -= 1
El programa imprime: 18
Como hemos visto en este ejemplo, break nos permite finalizar el bucle una vez que hemos
encontrado nuestro objetivo: el primer múltiplo de 3. Pero si no lo hubiéramos encontrado,
el bucle habría seguido decrementando la variable num hasta valer 0, y la condición del
bucle while hubiera resultado falsa.
Continuar un bucle
Hay situaciones en las que, en vez de romper un bucle, nos interesa saltar adelante hacia la
siguiente repetición. Para ello Python nos ofrece la sentencia continue que hace
precisamente eso, descartar el resto del código del bucle y saltar a la siguiente iteración.
num = 21
while num >= 1:
num -= 1
if num % 3 == 0:
continue
print(num, end=", ") # Evitar salto de línea
El programa imprime: 20, 19, 17, 16, 14, 13, 11, 10, 8, 7, 5, 4, 2, 1,
Como se puede apreciar, se imprimen todos los números comprendidos entre el 1 y el 21,
exceptos los que son múltiplos de 3.
20
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
La sentencia for
Python permite recorrer aquellos tipos de datos que sean iterables, es decir, que admitan
iterar sobre ellos. Algunos ejemplos de tipos y estructuras de datos que permiten ser
iteradas (recorridas) son: cadenas de texto, listas, diccionarios, ficheros, etc.
La sentencia for nos permite realizar esta acción.
A continuación se plantea un ejemplo en el que vamos a recorrer (iterar) una cadena de
texto:
word = 'Python'
for letter in word:
print(letter)
El programa imprime: P y t h o n
La clave aquí está en darse cuenta que el bucle va tomando, en cada iteración, cada uno de
los elementos de la variable que especifiquemos. En este caso concreto letter va tomando
cada una de las letras que existen en word, porque una cadena de texto está formada por
elementos que son caracteres.
Nota: La variable que utilizamos en el bucle for para ir tomando los valores puede tener
cualquier nombre. Al fin y al cabo es una variable que definimos según nuestras
necesidades. Tener en cuenta que se suele usar un nombre en singular.
En el ejemplo se van a imprimir los años comprendidos entre el 2001 y el 2013. Note la
particularidad de la función “range”.
La función range tiene como objetivo generar numero comprendidos entre un rango,
siguiendo la siguiente estructura range(start, stop, step):
21
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Ejemplos:
for i in range(1, 6, 2):
print(i)
1
3
5
2
1
0
word = 'Python'
for letter in word:
if letter == 't':
break
print(letter)
Ejercicio
Dada una cadena de texto, indique el número de vocales que tiene.
for _ in range(10):
print('Se imprime 10 veces!')
Bucles anidados
22
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Lo que está ocurriendo en este código es que, para cada valor que toma la variable i, la otra
variable j toma todos sus valores. Como resultado tenemos una combinación completa de
los valores en el rango especificado.
Nota:
Podemos añadir todos los niveles de anidamiento que queramos. Eso sí, hay que
tener en cuenta que cada nuevo nivel de anidamiento supone un importante aumento
de la complejidad ciclomática de nuestro código, lo que se traduce en mayores
tiempos de ejecución.
Los bucles anidados también se pueden aplicar en la sentencia while.
Ejercicio
Escribir un programa que pida al usuario un número entero positivo y muestre por pantalla
todos los números comprendidos entre el cero y el número ingresado separados por comas.
Le agregamos un detalle más: mostrar la suma de todos los números.
Listas
Las listas permiten almacenar objetos mediante un orden definido y con posibilidad de
duplicados. Las listas son estructuras de datos mutables, lo que significa que podemos
añadir, eliminar o modificar sus elementos.
Creando listas
Una lista está compuesta por cero o más elementos. En Python debemos escribir estos
elementos separados por comas y dentro de corchetes. Veamos algunos ejemplos de listas:
Lista_vacia = []
languages = [‘Python’, ‘Ruby’, ‘Javascript’]
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
23
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Nota: Una lista puede contener tipos de datos heterogéneos, lo que la hace una estructura
de datos muy versátil.
Conversión
Para convertir otros tipos de datos en una lista podemos usar la función list():
El índice que usemos para acceder a los elementos de una lista tiene que estar comprendido
entre los límites de la misma. Si usamos un índice antes del comienzo o después del final
obtendremos un error.
Nota: Como se puede ver en las sentencias anteriores el índice de cada elemento puede ser
positivo o negativo, si es positivo el primer elemento (de izquierda a derecha) tiene el
índice 0 y crece hacia la derecha. Si se quiere acceder con índice negativo, la vinculación
es en orden contrario, es decir, el último elemento tiene el valor -1, el penúltimo el -2 y así
sucesivamente. Se recomienda que el acceso a los elementos se realice con índices
positivos.
24
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
shopping[0:3]
[‘Agua’, ‘Huevos’, ‘Aceite’]
shopping[:3]
[‘Agua’, ‘Huevos’, ‘Aceite’]
shopping[2:4]
[‘Aceite’, ‘Sal’]
# Equivale a invertir la lista
shopping[::-1]
[‘Limón’, ‘Sal’, ‘Aceite’, ‘Huevos’, ‘Agua’]
shopping
['Agua', 'Huevos', 'Aceite', 'Sal', 'Limón']
shopping[::-1]
['Limón', 'Sal', 'Aceite', 'Huevos', 'Agua']
shopping
['Agua', 'Huevos', 'Aceite', 'Sal', 'Limón']
list(reversed(shopping))
['Limón', 'Sal', 'Aceite', 'Huevos', 'Agua']
shopping
['Agua', 'Huevos', 'Aceite', 'Sal', 'Limón']
shopping.reverse()
shopping
['Limón', 'Sal', 'Aceite', 'Huevos', 'Agua']
25
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
shopping.append('Atún')
shopping
['Agua', 'Huevos', 'Aceite', 'Atún']
even_numbers = []
for i in range(20):
if i % 2 == 0:
even_numbers.append(i)
print(even_numbers)
El programa se encarga de crear una lista vacía y luego insertarle valores según la
condición indicada. Se imprime lo siguiente:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Combinar listas
Python nos ofrece dos aproximaciones para combinar listas:
26
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Se podría pensar en el uso de append() para combinar listas. La realidad es que no funciona
exactamente como esperamos; la segunda lista se añadiría como una sublista de la
principal:
shopping = ['Agua', 'Huevos', 'Aceite']
shopping[0] = ‘Leche’
shopping[1] = ‘Cafe’
print (shopping)
27
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
numeros = []
for i in range(20):
if i % 2 == 0:
numeros.append(i)
print (numeros)
Por su índice (con extracción): Las dos funciones anteriores del() y remove()
efectivamente borran el elemento indicado de la lista, pero no «devuelven» nada.
Sin embargo, Python nos ofrece la función pop() que además de borrar, nos
«recupera» el elemento; algo así como una extracción. Lo podemos ver como una
combinación de acceso + borrado:
shopping = ['Agua', 'Huevos', 'Aceite']
print (shopping.pop())
print (shopping)
28
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
shopping[1:3] = []
print (shopping)
Encontrar un elemento
Si queremos descubrir el índice que corresponde a un determinado valor dentro la
lista podemos usar la función index() para ello (si el elemento esta mas de una vez,
nos devolver el índice de la primera aparición):
Imprime: 2
Imprime: 5
29
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Este ejemplo imprime cada uno de los elementos de la lista, al igual que el ejemplo
anterior.
Hay veces que no sólo nos interesa «visitar» cada uno de los elementos de una lista, sino
que también queremos saber su índice dentro de la misma. Para ello Python nos ofrece la
función enumerate():
shopping = ['Agua', 'Huevos', 'Aceite', 'chocolate', 'galletas']
for i, producto in enumerate(shopping):
print(i, producto)
Imprime:
0 Agua
1 Huevos
2 Aceite
3 chocolate
4 galletas
Python ofrece la posibilidad de iterar sobre múltiples listas en paralelo utilizando la función
zip():
Nota: En el caso de que las listas no tengan la misma longitud, la función zip() realiza la
combinación hasta que se agota la lista más corta.
30
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Imprime: 28
Imprime: 1
Imprime: 9
Tuplas
El concepto de tupla es muy similar al de lista. Aunque hay algunas diferencias menores, lo
fundamental es que, mientras una lista es mutable y se puede modificar, una tupla no
admite cambios y por lo tanto, es inmutable.
Podemos pensar en crear tuplas tal y como lo hacíamos con listas, pero usando paréntesis
en lugar de corchetes:
tupla_vacia = ()
tupla_enteros =(5,10,20,30)
tupla_nombres = ('Juan','Pedro','Mario')
print(tupla_vacia)
print(tupla_enteros)
print(tupla_nombres)
Imprime:
()
(5, 10, 20, 30)
('Juan', 'Pedro', 'Mario')
Hay que prestar especial atención cuando vamos a crear una tupla de un único elemento.
La intención primera sería hacerlo de la siguiente manera:
tupla_vacia = ('fiesta')
print(tupla_vacia)
print("Tipo de Datos: ",type(tupla_vacia))
Imprime:
fiesta
Tipo de Datos: <class 'str'>
31
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Realmente, hemos creado una variable de tipo str (cadena de texto). Para crear una tupla de
un elemento debemos añadir una coma al final:
tupla_vacia = ('fiesta',)
print(tupla_vacia)
print("Tipo de Datos: ",type(tupla_vacia))
Imprime:
('fiesta',)
Tipo de Datos: <class 'tuple'>
Conversión
Para convertir otros tipos de datos en una tupla podemos usar la función tuple():
nombres = ['Juan','Pedro','Mario']
print(tuple(nombres))
Esta conversión es válida para aquellos tipos de datos que sean iterables: cadenas de
caracteres, listas, diccionarios, conjuntos, etc. Un ejemplo que no funciona es intentar
convertir un número en una tupla:
tuple(5)
Se producirá un error.
point = (2, 5)
match point:
case (x, y):
print(f'({x},{y}) esta en el plano')
case (x, y, z):
print(f'({x},{y},{z}) esta en el espacio')
32
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Otra alternativa a lo anterior, es asegurarse de que los valores de la tupla sean enteros,
para ello se deben convertir:
point = ('2', 5)
match point:
case (int(), int()):
print(f'({x},{y}) esta en el plano')
case (int(), int(), int()):
print(f'({x},{y},{z}) esta en el espacio')
case _ :
print('ERROR EN LOS DATOS')
Se imprime por pantalla el mensaje: “ERROR EN LOS DATOS”, ya que uno de los
datos NO es entero.
• reverse()
• append()
• extend()
• remove()
• clear()
• sort()
Tuplas vs Listas
Aunque puedan parecer estructuras de datos muy similares, sabemos que las tuplas carecen
de ciertas operaciones, especialmente las que tienen que ver con la modificación de sus
valores, ya que no son inmutables. Si las listas son más flexibles y potentes, ¿por qué
íbamos a necesitar tuplas? Veamos 4 potenciales ventajas del uso de tuplas frente a las
listas:
33
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
Diccionarios
Podemos trasladar el concepto de diccionario de la vida real al de diccionario en Python.
Al fin y al cabo un diccionario es un objeto que contiene palabras, y cada palabra tiene
asociado un significado. Haciendo el paralelismo, diríamos que en Python un diccionario es
también un objeto indexado por claves (las palabras) que tienen asociados unos valores
(los significados).
Nota: En otros lenguajes de programación, a los diccionarios se los conoce como arrays
Para crear un diccionario usamos llaves {} rodeando asignaciones clave: valor que están
separadas por comas. Veamos algunos ejemplos de diccionarios:
diccionario_vacio = {}
diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}
print(diccionario_sueldo_años[2020])
Existe una función muy útil para «superar» los posibles errores de acceso por claves
inexistentes. Se trata de get() y su comportamiento es el siguiente:
34
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}
print(diccionario_sueldo_años.get(2020)) #imprime el valor 110000
print(diccionario_sueldo_años.get(2026)) #imprime None
diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}
diccionario_sueldo_años[2018] = 95000
print(diccionario_sueldo_años.get(2020))
print(diccionario_sueldo_años.get(2018))
diccionario_sueldo_años = {}
sueldo_inicial = 95000
for i in range(2018, 2022):
sueldo_inicial += 5000
diccionario_sueldo_años[i] = sueldo_inicial
print(diccionario_sueldo_años)
35
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
sueldo_inicial = 95000
for i in range(2018, 2022):
sueldo_inicial += 5000
diccionario_sueldo_años[i] = sueldo_inicial
for clave in diccionario_sueldo_años: #para imprimir las claves tb podriamos usar .keys()
print(clave)
diccionario_sueldo_años = {}
sueldo_inicial = 95000
for i in range(2018, 2022):
sueldo_inicial += 5000
diccionario_sueldo_años[i] = sueldo_inicial
Borrar elementos
Python nos ofrece, al menos, tres formas para borrar elementos en un diccionario:
del(diccionario_sueldo_años[2020])
diccionario_sueldo_años.pop(2020)
36
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}
diccionario_sueldo_años={}
diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}
print(diccionario_sueldo_años.keys())
diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}
print(diccionario_sueldo_años. values())
37
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación
diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}
print(len(diccionario_sueldo_años))
Python también cuenta con “conjunto” y las funciones necesarias para manejar “archivos”,
es super recomendable que cada uno de ustedes pueda profundizar sobre estos conceptos.
38