Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Programacion Inicial Python (1)

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 38

Carrera: Redes y Telecomunicaciones Profesor: Ing.

Mirábile Marcelo
Asignatura: Programación

PYTHON

Básicamente, Python es un lenguaje de programación de alto nivel, interpretado y


multipropósito. En los últimos años su utilización ha ido constantemente creciendo y en la
actualidad es uno de los lenguajes de programación más empleados para el desarrollo de
software. Python puede ser utilizado en diversas plataformas y sistemas operativos.
¿Tiene Python un ámbito específico? Algunos lenguajes de programación sí que lo
tienen. Por ejemplo, PHP fue ideado para desarrollar aplicaciones web. Sin embargo, este
no es el caso de Python. Con este lenguaje podemos desarrollar software para aplicaciones
científicas, para comunicaciones de red, para aplicaciones de escritorio con interfaz gráfica
de usuario (GUI), para crear juegos, para smartphones y por supuesto, para aplicaciones
web.
Por las características que tiene Python lo convierten en un lenguaje muy
productivo. Entre esas características está el hecho de ser un lenguaje potente, flexible y
con una sintaxis clara y concisa. Además, no requiere dedicar tiempo a su compilación
debido a que es interpretado.
Python es open-source, cualquiera puede contribuir a su desarrollo y divulgación.
Además, no es necesario pagar ninguna licencia para distribuir software desarrollado con
este lenguaje.

 Características del lenguaje

 Python es un lenguaje de programación interpretado y multiplataforma cuya


filosofía hace hincapié en una sintaxis que favorezca un código legible.
 Se trata de un lenguaje de programación multiparadigma, ya que soporta
orientación a objetos, programación imperativa y, en menor medida,
programación funcional.
 Se trata de un lenguaje de propósito general.

 Ventajas

 Libre y gratuito (OpenSource).


 Fácil de leer, parecido a pseudocódigo.
 Aprendizaje relativamente fácil y rápido: claro, intuitivo
 Alto nivel.
 Alta Productividad: simple y rápido.
 Tiende a producir un buen código: orden, limpieza, elegancia, flexibilidad
 Multiplataforma. Portable.
 Multiparadigma: programación imperativa, orientada a objetos, funcional.
 Interactivo, modular, dinámico.
 Librerías extensivas.
 Gran cantidad de librerías de terceros.
 Gran comunidad, amplio soporte.
 Tipado dinámico

1
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

 Desventajas

 Interpretado (velocidad de ejecución, etc.).


 Consumo de memoria.
 Errores durante la ejecución.
 Dos versiones mayores no del todo compatibles (v2 vs v3).
 Documentación a veces dispersa e incompleta.
 Varios módulos para la misma funcionalidad.
 Librerías de terceros no siempre del todo maduras.

 Qué hacer con Python?


Al ser un lenguaje de propósito general, podemos encontrar aplicaciones
prácticamente en todos los campos científico-tecnológicos:

 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.

Código fuente y bytecode


Hasta ahora solo hemos hablado de los archivos de código Python, que utilizan la
extensión .py. También sabemos que este lenguaje es interpretado y no compilado.
Sin embargo, en realidad, internamente el intérprete Python se encarga de generar
unos archivos binarios que son los que serán ejecutados. Este proceso se realiza de forma
transparente, a partir de los archivos fuente (los archivos que contienen nuestro código de
programación). Al código generado automáticamente se le llama bytecode y utiliza la
extensión .pyc.
Así pues, al invocar al intérprete de Python, este se encarga de leer el archivo
fuente, generar el bytecode correspondiente y ejecutarlo. ¿Por qué se realiza este proceso?
Básicamente, por cuestiones de eficiencia. Una vez que el archivo .pyc esté generado,
Python no vuelve a leer el archivo fuente, sino que lo ejecuta directamente, con el ahorro de
tiempo que esto supone. La generación del bytecode es automática y el programador no
debe preocuparse por este proceso. El intérprete es lo suficientemente inteligente para
volver a generar el bytecode cuando es necesario, habitualmente, cuando el archivo de
código correspondiente cambia.
Por otro lado, también es posible generar archivos binarios listos para su ejecución,
sin necesidad de contar con el intérprete. Recordemos que los archivos Python requieren
del intérprete para ser ejecutados. Sin embargo, en ocasiones necesitamos ejecutar nuestro
código en máquinas que no disponen de este intérprete. Este caso suele darse en sistemas
Windows, ya que, por defecto, tanto Mac OS X, como la mayoría de las distribuciones de
GNU/Linux, incorporan dicho intérprete.

Primer Programa, el clásico “Hola Mundo!!”


El primer programa que vamos a escribir en Python es el clásico Hola Mundo, y en
este lenguaje es tan simple como:

print (“Hola Mundo”)

Si abrimos el editor que hayamos elegido, creamos un archivo que se llame


“mundo.py”, pegamos el código anterior y utilizando el menú de ejecución por defecto del
IDE en cuestión (en el caso de VSCode, menú “Ejecutar”-“Iniciar Depuracion”). También
podemos ejecutar el archivo abriendo la línea de comando por defecto, nos paramos en la
ruta física donde tengamos el archivo y con el comando: python mundo.py tendremos el
mismo resultado.

3
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

Imprimir datos por pantalla


Es muy probable que nuestro programa deba imprimir información pro pantalla,
para ello se utiliza la función print la cual es la encargada de mostrar el contenido que le
pasemos entre paréntesis. Veamos:

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)

Captura de datos desde teclado


Los programas se hacen para tener interacción con el usuario. Una de las formas de
interacción es solicitar la entrada de datos por teclado. Como muchos otros lenguajes de
programación, Python también nos ofrece la posibilidad de leer la información introducida
por teclado. Para ello se utiliza la función input():

nombre = input(“Ingrese su nombre: “)


apellido = input(“Ingrese su apellido: “)
edad = int(input(“Ingrese su edad: “))
print ("Mi edad es:", edad)
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.

# -*- coding: utf-8 -*-

utf-8 podría ser cualquier codificación de caracteres. Si no se indica una


codificación de caracteres, Python podría producir un error si encontrara caracteres
“extraños”:

print ("En el Ñagara encontre un Ñandu")

Producirá un error de sintaxis: SyntaxError: Non-ASCII character[...]

4
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

En cambio, indicando el encoding correspondiente, el archivo se ejecutará con


éxito:
# -*- coding: utf-8 -*-
print ("En el Ñagara encontre un Ñandu")

Produciendo la siguiente salida:

En el Ñagara encontre un Ñandu

Nota: algunos IDE de codificación manejan la codificación de la salida estándar


(stdout) de manera automática, con lo cual no es necesario incorporar la línea de
codificació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.

 Reglas para nombrar variables


En Python existen una serie de reglas para los nombres de variables:

 Sólo pueden contener los siguientes caracteres:


• Letras minúsculas.
• Letras mayúsculas.
• Dígitos.
• Guiones bajos (_).
 Deben empezar con una letra o un guión bajo, nunca con un dígito.
 No pueden ser una palabra reservada del lenguaje (“keywords”).

5
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

Podemos obtener un listado de las palabras reservadas del lenguaje de la siguiente


forma, usando la sentencia:
help(‘keywords’)

 Asignación
En Python se usa el símbolo = para asignar un valor a una variable:

Algunos ejemplos de asignaciones a variables:

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

Python nos ofrece la posibilidad de hacer una asignación múltiple de la siguiente


manera:

uno = dos = tres = 3

Aquí hay 3 variables (uno, dos y tres) a las cuales se les asigna en una sola sentencia
el valor 3.

a, b, c = 'string', 15, True


En una sola instrucción, estamos declarando tres variables: a, b y c y asignándoles
un valor concreto a cada una:
>>> print (a)
string

6
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

>>> print (b)


15
>>> print (c)
True

La asignación múltiple de variables, también puede darse utilizando como valores,


el contenido de una tupla:

>>> mi_tupla = ('hola mundo', 2011)


>>> texto, anio = mi_tupla
>>> print (texto)
hola mundo
>>> print (anio)
2011

Tipos de Datos
En Python los tipos básicos se dividen en:

 Números, como pueden ser: 3 (entero), 15.57 (de coma flotante) o 7 + 5j


(complejos)
 Cadenas de texto, como: “Hola Mundo”
 Valores booleanos: True (cierto) y False (falso).

Vamos a crear un par de variables a modo de ejemplo. Una de tipo cadena y una de
tipo entero:

# esto es una cadena


c = “Hola Mundo”

# y esto es un entero
e = 23

# podemos comprobarlo con la función type


type(c)
type(e)

Como puede observar en Python, a diferencia de muchos otros lenguajes, no se


declara el tipo de la variable al crearla. En Java, por ejemplo, escribiríamos:

String c = “Hola Mundo”;


int 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.

Para representar un número real en Python se escribe primero la parte entera,


seguido de un punto y por último la parte decimal.

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.

Los números complejos en Python se representan de la siguiente forma:

complejo = 2.1 + 7.8j

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

 Operadores a nivel de bit


Estos son operadores que actúan sobre las representaciones en binario de los
operandos.
Por ejemplo, si ves una operación como 3 & 2, lo que estás viendo es un and bit a
bit entre los números binarios 11 y 10 (las representaciones en binario de 3 y 2).
El operador and (&), del inglés “y”, devuelve 1 si el primer bit operando es 1 y el
segundo bit operando es 1. Se devuelve 0 en caso contrario.
El resultado de aplicar and bit a bit a 11 y 10 sería entonces el número binario 10, o
lo que es lo mismo, 2 en decimal (el primer dígito es 1 para ambas cifras, mientras que el
segundo es 1 sólo para una de ellas).
El operador or (|), del inglés “o”, devuelve 1 si el primer operando es 1 o el segundo
operando es 1. Para el resto de casos se devuelve 0.
El operador xor u or exclusivo (^) devuelve 1 si uno de los operandos es 1 y el otro
no lo es.
El operador not (~), del inglés “no”, sirve para negar uno a uno cada bit; es decir, si
el operando es 0, cambia a 1 y si es 1, cambia a 0.
Por último los operadores de desplazamiento (<< y >>) sirven para desplazar los
bits n posiciones hacia la izquierda o la derecha.

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.

triple = “““primera linea


esto se vera en otra linea”””

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

Los valores booleanos son además el resultado de expresiones que utilizan


operadores relacionales (comparaciones entre valores):

Conversión de tipos de datos


El hecho de que existan distintos tipos de datos en Python (y en el resto de lenguajes
de programación) es una ventaja a la hora de representar la información del mundo real de
la mejor manera posible. Pero también se hace necesario buscar mecanismos para convertir
unos tipos de datos en otros.

 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

Podemos resumir la conversión implícita en la siguiente tabla:

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:

bool() Convierte el tipo a booleano.


int() Convierte el tipo a entero.
float() Convierte el tipo a flotante.

Veamos algunos ejemplos de estas funciones:

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

Las sentencias de asignación no entregan ningún resultado. Normalmente un guion


contiene una secuencia de sentencias. Si hay más de una sentencia, los resultados aparecen
de uno en uno tal como se van ejecutando las sentencias.

Por ejemplo, el guion


print (1)
x=2
print (x)
presenta la salida
1
2
De nuevo, la sentencia de asignación no produce ninguna salida.

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).

 Usamos operaciones para combinar expresiones y construir expresiones más


complejas:

o Si x es como antes, x + 1 es una expresión cuyo resultado es 6.

o Si en el estado millas → 1, pies → 0 y pulgadas → 0, entonces 1609.344 *


millas + 0.3048 * pies + 0.0254 * pulgadas es una expresión cuyo resultado
es 1609.344.

o La exponenciación se representa con el símbolo **. Por


ejemplo, x**3 significa x^3.

o Se pueden usar paréntesis para indicar un orden de evaluación: ((b * b) - (4 *


a * c))

o Igual que en la matemática, si no hay paréntesis en la expresión primero se


agrupan las exponenciaciones, luego los productos y cocientes, y luego las
sumas y restas.

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

o Si x e y son números enteros, entonces x % y se calcula como el resto de la


división entera entre x e y. Si x se refiere al valor 12 e y se refiere al valor 9,
entonces x % y se refiere al valor 3.

Más ejemplos:

A = 10
B = 20
C=A+B
print (C)

Como se puede apreciar, es un tanto confuso la identificación entre sentencias y


expresiones, a mi entender una expresión es una combinación de operadores y operando
donde se refleja una intención de calcular algo (por ej.: resultado = a+(b*c)/z), mientras que
una sentencia es algo “atómico” algo más simple, donde no necesariamente deben existir
operando ni operadores (por ej.: print (resultado)).

Generalidades para tener en cuenta


A continuación veremos algunas cuestiones para tener en cuenta a la hora de
comenzar a generar código:

 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.

Linea 1 - if pwd == 'manzana':


Linea 2 - print('Iniciando sesión ')
Linea 3 - else:
Linea 4 - print('Contraseña incorrecta.')

Linea 5 - print('¡Todo terminado!')

En el pequeño programa que se muestra, se encuentran 3 bloques, uno formado por


la linea 1 y 2, otro con la linea 3 y 4 y finalmente el bloque “general” formado por la linea
5. Aquí se ve que la linea 2 pertenece al bloque que inicio la linea 1, la linea 4 pertenece al
bloque que inicio la linea 3 y la linea 5 es independiente ya que no forma parte de ninguno
de los bloques anteriores.

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.

#esta es una linea de comentario


print (10)

Si queremos comentar mas de una línea podemos hacerlo línea por línea o un
conjunto se líneas. Por ejemplo:

#linea 1 comentada individualmente


#linea 2 comentada individualmente
#linea 3 comentada individualmente
"""linea 4 comentada en bloque
linea 5 comentada en bloque
linea 6 comentada en bloque
linea 7 comentada en bloque"""
print ("Esta línea no esta comentada”)

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.

 Estructura condicional “if”


La sentencia condicional en Python (al igual que en muchos otros lenguajes de
programación) es if. En su escritura debemos añadir una expresión de comparación
terminando con dos puntos al final de la línea. Veamos un ejemplo:

15
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

temperatura = 40
if temperatura > 35:
print(“Aviso por alta temperatura”)

Nota: Nótese que en Python no es necesario incluir paréntesis ( y ) al escribir condiciones.


Hay veces que es recomendable por claridad o por establecer prioridades.

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”)

Podríamos tener incluso condiciones dentro de condiciones, lo que se viene a llamar


técnicamente condiciones anidadas. Veamos un ejemplo ampliando el caso anterior:

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

Apliquemos esta mejora al código del ejemplo anterior:

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”)

Cuando escribimos condiciones debemos incluir alguna expresión de comparación.


Estas expresiones se detallan en el apartado de tipos de datos booleanos. En ese mismo
apartado vimos los operadores condicionales and, or y not, los cuales también se utilizan en
las condiciones de la estructura de control if.

Vamos algunos ejemplos:

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”)

Cuando queremos preguntar por la veracidad de una determinada variable «booleana»


en una condición, la primera aproximación que parece razonable es la siguiente:

is_cold = True
if is_cold == True:
print(“Usa campera”)
else:
print(“No usa remera”)

Aquí la salida seria: Usa campera

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”

Ésta se podría asemejar a la sentencia «switch» que ya existe en otros lenguajes de


programación.

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")

Otra forma de utilizar la estructura de control es analizando un poco el siguiente


ejemplo: veremos un código que nos indica si, dada la edad de una persona, puede tomar
alcohol:

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

Interrumpir un bucle while


Python ofrece la posibilidad de romper o finalizar un bucle antes de que se cumpla la
condición de parada. Supongamos un ejemplo en el que estamos buscando el primer
número múltiplo de 3 yendo desde 20 hasta 1:

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.

Otro ejemplo, esta vez con tuplas:

mi_lista = ['Juan', 'Antonio', 'Pedro', 'Herminio']


for nombre in mi_lista:
print (nombre)

Aquí el programa va a imprimir cada uno de los nombres de manera individual.

Otro ejemplo más:

for anio in range(2001, 2013):


print (anio)

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):

 start: Es opcional y tiene valor por defecto 0.


 stop: es obligatorio (siempre se llega a 1 menos que este valor).

21
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

 step: es opcional y tiene valor por defecto 1.

Ejemplos:
for i in range(1, 6, 2):
print(i)

1
3
5

for i in range(2, -1, -1):


print(i)

2
1
0

Romper un bucle for


Una sentencia break dentro de un for rompe el bucle, igual que veíamos para los bucles
while. Veamos uno de los ejemplos anteriores, donde vamos a recorrer una cadena de texto
y pararemos el bucle cuando encontremos una letra t minúscula:

word = 'Python'
for letter in word:
if letter == 't':
break
print(letter)

Aquí se imprimirán solo las letras: P y

Ejercicio
Dada una cadena de texto, indique el número de vocales que tiene.

Usando el guión bajo


Hay situaciones en las que no necesitamos usar la variable que toma valores en el rango,
sino que únicamente queremos repetir una acción un número determinado de veces.
Para estos casos se suele recomendar usar el guión bajo _ como nombre de variable, que da
a entender que no estamos usando esta variable de forma explícita:

for _ in range(10):
print('Se imprime 10 veces!')

En este caso el programa va a imprimir 10 veces el mismo mensaje.

Bucles anidados

22
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

También podemos hacer uso de la anidación de bucles, lo que me permite hacer en un


código reducido un procesamiento complejo y repetitivo, por ejemplo:

for i in range(1, 10):


for j in range(1, 10):
resultado= i * j
print(f'{i} * {j} = { resultado}')

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.

Estructuras de datos en Python


Anteriormente pudimos ver algo sobre los Tipos de datos que tiene Python (enteros,
flotantes, cadenas, etc), pero ahora vamos hablar de tipos de datos más complejos que se
constituyen en estructuras de datos. Si pensamos en los primeros tipos de datos como
átomos, las estructuras de datos que vamos a ver serían moléculas. Es decir, combinamos
los tipos básicos en tipos más complejos.
Veremos distintas estructuras de datos como listas, tuplas y diccionarios.

 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

data = [‘Tenerife’, {‘cielo’: ‘limpio’, ‘temp’: 24}, 3718,


(28.2933947, -16.5226597)]

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():

# conversión desde una cadena de texto


list(‘Python’)
[‘P’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’]
Si nos fijamos en lo que ha pasado, al convertir la cadena de texto Python se ha creado una
lista con 6 elementos, donde cada uno de ellos representa un caracter de la cadena.
Podemos extender este comportamiento a cualquier otro tipo de datos que permita ser
iterado.

Operaciones con listas


Podemos obtener un elemento de una lista a través del índice (lugar) que ocupa. Ejemplo:

shopping = ['Agua', 'Huevos', 'Aceite']


print (shopping[0])
print (shopping[1])
print (shopping[2])
print (shopping[-1]) # acceso con índice negativo ACEITE
print (shopping[-2]) # acceso con índice negativo HUEVOS
print (shopping[-3]) # acceso con índice negativo AGUA
print (shopping[-4]) # ERROR DE ACCESO
print (shopping[4]) # ERROR DE ACCESO

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.

Desglosar una lista


El desglose de una lista es con el objetivo de acceder a una parte de la lista principal, algo
así como a una sublista de la misma:

shopping = [‘Agua’, ‘Huevos’, ‘Aceite’, ‘Sal’, ‘Limón’]

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’]

Importante: Ninguna de las operaciones anteriores modifican la lista original, simplemente


devuelven una lista nueva.

Invertir una lista


Python nos ofrece, al menos, tres mecanismos para invertir los elementos de una lista:

 Conservando la lista original: Mediante troceado de listas con step


negativo:

shopping
['Agua', 'Huevos', 'Aceite', 'Sal', 'Limón']
shopping[::-1]
['Limón', 'Sal', 'Aceite', 'Huevos', 'Agua']

 Conservando la lista original: Mediante la función reversed():

shopping
['Agua', 'Huevos', 'Aceite', 'Sal', 'Limón']
list(reversed(shopping))
['Limón', 'Sal', 'Aceite', 'Huevos', 'Agua']

 Modificando la lista original: Utilizando la función reverse() (nótese


que es sin «d» al final):

shopping
['Agua', 'Huevos', 'Aceite', 'Sal', 'Limón']
shopping.reverse()
shopping
['Limón', 'Sal', 'Aceite', 'Huevos', 'Agua']

Añadir al final de la lista


Una de las operaciones más utilizadas en listas es añadir elementos al final de las mismas.
Para ello Python nos ofrece la función append(). Se trata de un método destructivo que
modifica la lista original:

shopping = ['Agua', 'Huevos', 'Aceite']

25
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

shopping.append('Atún')
shopping
['Agua', 'Huevos', 'Aceite', 'Atún']

Creando desde vacío


Una forma muy habitual de trabajar con listas es empezar con una vacía e ir añadiendo
elementos poco a poco. Se podría hablar de un patrón creación.
Supongamos un ejemplo en el que queremos construir una lista con los números pares del 1
al 20:

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]

Agregar en cualquier posición de una lista


Ya hemos visto cómo añadir elementos al final de una lista. Sin embargo, Python ofrece
una función insert() que vendría a ser una generalización de la anterior, para incorporar
elementos en cualquier posición. Simplemente debemos especificar el índice de inserción y
el elemento en cuestión.

shopping = ['Agua', 'Huevos', 'Aceite']


shopping.insert(1, 'Jamón')
shopping
['Agua', 'Jamón', 'Huevos', 'Aceite']
shopping.insert(3, 'Queso')
shopping
['Agua', 'Jamón', 'Huevos', 'Queso', 'Aceite']

Nota: El índice que especificamos en la función insert() lo podemos interpretar como la


posición delante (a la izquierda) de la cual vamos a colocar el nuevo valor en la lista.

Combinar listas
Python nos ofrece dos aproximaciones para combinar listas:

Conservando la lista original: Mediante el operador + o += (en este caso ninguna


de las listas se modifica):

shopping = ['Agua', 'Huevos', 'Aceite']

26
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

fruitshop = ['Naranja', 'Manzana', 'Piña']


print (shopping + fruitshop)

Se imprime: ['Agua', 'Huevos', 'Aceite', 'Naranja', 'Manzana', 'Piña']

Modificando la lista original: Mediante la función extend(). Aquí la lista shopping


se ve modificada:

shopping = ['Agua', 'Huevos', 'Aceite']


fruitshop = ['Naranja', 'Manzana', 'Piña']
shopping.extend(fruitshop)
print (shopping)

Se imprime: ['Agua', 'Huevos', 'Aceite', 'Naranja', 'Manzana', 'Piña']

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']


fruitshop = ['Naranja', 'Manzana', 'Piña']
shopping.append(fruitshop)
print (shopping)

Se imprime: ['Agua', 'Huevos', 'Aceite', ['Naranja', 'Manzana', 'Piña']]

Otras formas de modificar listas


shopping = ['Agua', 'Huevos', 'Aceite']
shopping[0] = ‘Leche’
shopping[1] = ‘Cafe’
print (shopping)

 (con troceo, se reemplazan los elementos que ocupan la posición inicial y la


posición final menos 1)
shopping[1:3] = ['Atún', 'Pasta']
print (shopping)

 Con la función reverse() se modifica la lista invirtiendo de posición sus valores:


shopping = ['Agua', 'Huevos', 'Aceite']
shopping.reverse()
print (shopping)

27
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

Imprime: ['Aceite ', 'Huevos', 'Agua']

 Creando una lista más personalizada y desde cero:

numeros = []
for i in range(20):
if i % 2 == 0:
numeros.append(i)

print (numeros)

Imprime: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

 Añadir en cualquier posición de una lista


shopping = ['Agua', 'Huevos', 'Aceite']
shopping.insert(1, 'Jamón')
print (shopping)

Imprime: ['Agua', 'Jamón', 'Huevos', 'Aceite']

Borrar elementos de una lista


Python nos ofrece, al menos, cuatro formas para borrar elementos en una lista:
Por su índice: Mediante la función del():
shopping = ['Agua', 'Huevos', 'Aceite']
del(shopping[1])
print (shopping)

Por su valor: Mediante la función remove()(borra la primera aparición):


shopping = ['Agua', 'Huevos', 'Aceite']
shopping.remove('Huevos')
print (shopping)

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)

Imprime: ['Agua', 'Huevos']

Por su rango: Mediante troceado de listas:


shopping = ['Agua', 'Huevos', 'Aceite', 'chocolate', 'galletas']

28
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

shopping[1:3] = []
print (shopping)

Imprime: ['Agua', 'chocolate', 'galletas']

Borrado completo de la lista


Python nos ofrece, al menos, dos formas para borrar una lista por completo:

 Utilizando la función clear():


shopping = ['Agua', 'Huevos', 'Aceite', 'chocolate', 'galletas']
shopping.clear()
print (shopping)

 «Reinicializando» la lista a vacío con []:


shopping = ['Agua', 'Huevos', 'Aceite', 'chocolate', 'galletas']
shopping = []
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):

shopping = ['Agua', 'Huevos', 'Aceite', 'chocolate', 'galletas']


print (shopping.index('Aceite'))

Imprime: 2

Longitud de una lista


Podemos conocer el número de elementos que tiene una lista con la función len():

shopping = ['Agua', 'Huevos', 'Aceite', 'chocolate', 'galletas']


print (len(shopping))

Imprime: 5

Recorriendo una lista


Se puede recorrer una lista utilizando la estructura de control “for” y de esa manera
acceder al contenido de la misma. Por ej.:

shopping = ['Agua', 'Huevos', 'Aceite', 'chocolate', 'galletas']


for producto in shopping:
print(producto)

Imprime: cada uno de los elementos de la lista, de manera individual.

29
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

Otro ejemplo, pero esta vez haciéndolo con su índice:

detalles = ['mineral natural', 'de oliva virgen', 'basmati']


for i in range(len(detalles)):
print( detalles[i])

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():

shopping = ['Agua', 'Aceite', 'Arroz']


detalles = ['mineral natural', 'de oliva virgen', 'basmati']
for producto, detalle in zip(shopping, detalles):
print(producto, “ // ” , detalle)
Imprime:
Agua // mineral natural
Aceite // de oliva virgen
Arroz // basmati

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.

Algunas Funciones matemáticas con listas en Python


Python nos ofrece, entre otras (si se quiere profundizar se puede utilizar la librería Numpy),
las siguientes tres funciones matemáticas básicas que se pueden aplicar sobre listas.

 Suma de todos los valores: Mediante la función sum():


datos = [5, 3, 2, 8, 9, 1]
print(sum(datos))

30
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

Imprime: 28

 Mínimo de todos los valores: Mediante la función min():


datos = [5, 3, 2, 8, 9, 1]
print(min(datos))

Imprime: 1

 Máximo de todos los valores: Mediante la función max():


datos = [5, 3, 2, 8, 9, 1]
print(max(datos))

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'>

Modificar una tupla


Como ya se dijo anteriormente, si se intenta modificar una tupla el interprete o herramienta
de codificación nos indicara un error.

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.

Nivel avanzado (usando la estructura match-case con tupla)


La sentencia match-case va mucho más allá de una simple comparación de valores. Con
ella podremos deconstruir estructuras de datos, capturar elementos o mapear
valores. Para ejemplificar varias de sus funcionalidades, vamos a partir de una tupla
que representará un punto en el plano (2 coordenadas) o en el espacio (3
coordenadas). Lo primero que vamos a hacer es detectar en qué dimensión se
encuentra el punto:

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')

Se imprime por pantalla el mensaje . “(2,5) esta en el plano”

32
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

point = (2, 5, 10)


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')

Se imprime por pantalla el mensaje . “(2,5) esta en el espacio”

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.

Operaciones con tuplas


Con las tuplas podemos realizar todas las operaciones que vimos con listas salvo las que
conlleven una modificación «in-situ» de la misma:

• 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:

 Las tuplas ocupan menos espacio en memoria.

33
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

 En las tuplas existe protección frente a cambios indeseados.


 Las tuplas se pueden usar como claves de diccionarios (son «hashables»).
 Las namedtuples son una alternativa sencilla a los objetos.

 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).

Los diccionarios en Python tienen las siguientes características:


 Mantienen el orden en el que se insertan las claves.
 Son mutables, con lo que admiten añadir, borrar y modificar sus elementos.
 Las claves deben ser únicas. A menudo se utilizan las cadenas de texto como
claves, pero en realidad podría ser cualquier tipo de datos inmutable: enteros,
flotantes, tuplas (entre otros).
 Tienen un acceso muy rápido a sus elementos, debido a la forma en la que están
implementados internamente.

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
}

Operaciones con diccionarios


Para obtener un elemento de un diccionario basta con escribir la clave entre corchetes.
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

 Si la clave que buscamos existe, nos devuelve su valor.


 Si la clave que buscamos no existe, nos devuelve None. No daría nunca error.

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

Añadir o modificar un elemento


Para añadir un elemento a un diccionario sólo es necesario hacer referencia a la clave y
asignarle un valor:
 Si la clave ya existía en el diccionario, se reemplaza el valor existente por el nuevo.
 Si la clave es nueva, se añade al diccionario con su valor. No vamos a obtener un
error a diferencia de las listas.

Partimos del siguiente diccionario para ejemplificar estas acciones:

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))

Creando desde cero


Una forma muy habitual de trabajar con diccionarios es utilizar el patrón creación partiendo
de uno vacío e ir añadiendo elementos poco a poco.

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)

Otro ejemplo con más cosas:


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)

for sueldo in diccionario_sueldo_años.values():


print(sueldo)

Iterar sobre “clave-valor”:

diccionario_sueldo_años = {}
sueldo_inicial = 95000
for i in range(2018, 2022):
sueldo_inicial += 5000
diccionario_sueldo_años[i] = sueldo_inicial

for clave, sueldo in diccionario_sueldo_años.items():


print("Para la clave: ",clave, " corresponde el valor: ", sueldo)

Borrar elementos
Python nos ofrece, al menos, tres formas para borrar elementos en un diccionario:

 Por su clave: Mediante la sentencia del:


diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}

del(diccionario_sueldo_años[2020])

 Por su clave (con extracción): Mediante la función pop() podemos extraer un


elemento del diccionario por su clave. Vendría a ser una combinación de get() +
del:
diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}

diccionario_sueldo_años.pop(2020)

36
Carrera: Redes y Telecomunicaciones Profesor: Ing. Mirábile Marcelo
Asignatura: Programación

 Borrado completo del diccionario:


 Utilizando la función clear():
diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}
diccionario_sueldo_años.clear()

 «Reinicializando» el diccionario a vacío con {}:

diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}
diccionario_sueldo_años={}

Obtener las claves de un diccionario


 Método: keys()

diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}
print(diccionario_sueldo_años.keys())

Obtener los valores de un diccionario


 Método: values()

diccionario_sueldo_años = {
2019: 100000,
2020: 110000,
2021: 125000,
2022: 140000
}
print(diccionario_sueldo_años. values())

Obtener la cantidad de elementos de un diccionario


 Método: len()

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

También podría gustarte