0% encontró este documento útil (0 votos)
116 vistas

Python

El documento describe los diferentes tipos de lenguajes de programación, desde los de bajo nivel como el código máquina y ensamblador hasta los de alto nivel como Python. Explica que los lenguajes de alto nivel son más fáciles de entender para los humanos y que un compilador o intérprete traduce el código a instrucciones que la máquina puede ejecutar. También presenta algunas características y herramientas de Python como lenguaje de programación.

Cargado por

antoniogvsteam1
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
116 vistas

Python

El documento describe los diferentes tipos de lenguajes de programación, desde los de bajo nivel como el código máquina y ensamblador hasta los de alto nivel como Python. Explica que los lenguajes de alto nivel son más fáciles de entender para los humanos y que un compilador o intérprete traduce el código a instrucciones que la máquina puede ejecutar. También presenta algunas características y herramientas de Python como lenguaje de programación.

Cargado por

antoniogvsteam1
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 222

Python

«Programming is not about


typing, it’s about thinking.» –
Rich Hickey
Los ordenadores son dispositivos complejos pero están diseñados para
hacer una cosa bien: ejecutar aquello que se les indica.

La cuestión es cómo indicar a un ordenador lo que queremos que


ejecute.

Esas indicaciones se llaman técnicamente instrucciones y se expresan


en un lenguaje.

Podríamos decir que programar consiste en escribir instrucciones para


que sean ejecutadas por un ordenador. El lenguaje que utilizamos para
ello se denomina lenguaje de programación, en nuestro caso, va a ser
Python.
Ada Lovelace: primera programadora de la historia

1815- matemática y escritora británica, célebre sobre


todo por su trabajo acerca de la computadora mecánica
de uso general de Charles Babbage, la denominada
máquina analítica.
Fue la primera en reconocer que la máquina tenía
aplicaciones más allá del cálculo puro y en haber
publicado lo que se reconoce hoy como el primer
algoritmo destinado a ser procesado por una máquina,
por lo que se la considera como la primera
programadora de ordenadores.

https://commons.wikimedia.org/wiki/File:Ada_Lovelace_en_Grandes_Mujeres_de_Chicas_en_Tecnolog%C3%ADa_01.jpg
Código máquina
Ensamblador

El primer lenguaje de programación que encontramos


en esta «escalada» es ensamblador.

Veamos un ejemplo de código en ensamblador

del típico programa que se escribe por primera vez,

el «Hello, World»:
C

El mismo ejemplo anterior del


programa «Hello, World» se
escribiría así en lenguaje C:
Python
Si seguimos «subiendo» en esta lista de lenguajes de programación, podemos llegar hasta
Python.

Se dice que es un lenguaje de más alto nivel en el sentido de que sus instrucciones son más
entendibles por un humano.

Veamos cómo se escribiría el programa «Hello, World» en el lenguaje de programación


Python:
Lenguajes de alto nivel
Cronología de los lenguajes de programación más destacados
Uno de los lenguajes con mayor proyección actualmente
Grandes empresas y organismos que usan Python
Ranking de lenguajes de programación
Compilador

La pregunta que surge es: ¿cómo entiende una máquina lo que tiene que hacer si le
pasamos un programa hecho en Python (o cualquier otro lenguaje de alto nivel)?

La respuesta es un compilador. son programas que convierten un lenguaje


«cualquiera» en código máquina.

Se pueden ver como traductores, permitiendo a la máquina interpretar lo que


queremos hacer.
Intérprete

Para ser más exactos, en Python hablamos de un intérprete en vez de un compilador, pero a
los efectos es prácticamente lo mismo.

La diferencia está en que el intérprete realiza la «compilación» (interpretación) y la


«ejecución» de una vez, mientras que el compilador genera un formato «ejecutable» (código
objeto) que se ejecuta en otra fase posterior.
Python

Python es un lenguaje de programación de alto nivel creado a finales de los


80/principios de los 90 por Guido van Rossum, holandés que trabajaba por
aquella época en el Centro para las Matemáticas y la Informática de los Países
Bajos. Sus instrucciones están muy cercanas al lenguaje natural en inglés y se
hace hincapié en la legibilidad del código.

Toma su nombre de los Monty Python, grupo humorista de los 60 que gustaban
mucho a Guido.

Python fue creado como sucesor del lenguaje ABC


Características del lenguaje

A partir de su definición de la Wikipedia:

• Python es un lenguaje de programación interpretado 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.

Usa tipado dinámico y es multiplataforma.

• Añadiría, como característica destacada, que se trata de un lenguaje de propósito


general.
VENTAJAS DESVENTAJAS
● Libre y gratuito (OpenSource). ● Interpretado (velocidad de
● Fácil de leer, parecido a ejecución, multithread vs GIL, etc.).
pseudocódigo. ● Consumo de memoria. • Errores
● Aprendizaje relativamente fácil y durante la ejecución.
rápido: claro, intuitivo…. ● Dos versiones mayores no del todo
● Alto nivel. compatibles (v2 vs v3).
● Alta Productividad: simple y rápido. ● Desarrollo móvil.
● Tiende a producir un buen código: ● Documentación a veces dispersa e
orden, limpieza, elegancia, incompleta.
flexibilidad, … ● Varios módulos para la misma
● Multiplataforma. Portable. funcionalidad.
● Multiparadigma: programación ● Librerías de terceros no siempre del
imperativa, orientada a objetos, todo maduras.
funcional, …
● Interactivo, modular, dinámico. •
Librerías extensivas («pilas
incluídas»).
VENTAJAS DESVENTAJAS

● Gran cantidad de librerías de


terceros.
● Extensible (C++, C, …) y «embebible».
● Gran comunidad, amplio soporte.
● Interpretado.
● Fuertemente tipado, tipado
dinámico.
● Hay diferentes implementaciones:
CPython, PyPy, Jython, IronPython,
MicroPython, …
Evolución de Python
Entornos de desarrollo

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 permite crear
ficheros de código (en nuestro caso con extensión *.py), que luego son ejecutados por el intérprete.
Hay otra herramienta interesante dentro del entorno de desarrollo que sería el depurador. Lo
podemos encontrar habitualmente en la bibliografía por su nombre inglés debugger. Es el
módulo que nos permite ejecutar paso a paso nuestro código y visualizar qué está ocurriendo en
cada momento. Se suele usar normalmente para encontrar fallos (bugs) en nuestros programas
y poder solucionarlos (debug/fix).
Thonny

Thonny es un programa muy


interesante para empezar a
aprender Python ya que
engloba estas tres
herramientas: intérprete,
editor y depurador.

https://thonny.org/
Instalación de Thonny
Para instalar Thonny debemos acceder a su web y descargar la aplicación para nuestro sistema
operativo.
La ventaja es que está disponible tanto para Windows, Mac y Linux. Una vez descargado el fichero lo
ejecutamos y seguimos su instalación paso por paso.
Una vez terminada la instalación ya podemos lanzar la aplicación que se verá parecida a la siguiente
imagen:
Thonny

Podemos observar que la pantalla está dividida en 3 paneles:


● Panel principal que contiene el editor e incluye la etiqueta <untitled>
donde escribiremos nuestro código fuente Python.
● Panel inferior con la etiqueta Shell que contiene el intérprete de
Python. Thonny incluye la versión de Python 3.7.7.
● Panel derecho que contiene el depurador. Más concretamente se trata
de la ventana de variables donde podemos inspeccionar el valor de las
mismas.

Manual de Thonny
Tipos de 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 puro dato sino distintos metadatos.
Cada «trozo» de memoria contiene realmente un objeto, de ahí que se diga que en Python

todo son objetos.

Y cada objeto 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.
TIPOS DE DATOS EN PYTHON
Variables

Las variables son fundamentales ya que permiten 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:


1. Sólo pueden contener los siguientes caracteres:
• Letras minúsculas.
• Letras mayúsculas.
• Dígitos.
• Guiones bajos (_).
2. Deben empezar con una letra o un guión bajo, nunca con un dígito.
3. No pueden ser una palabra reservada del lenguaje («keywords»).
Reglas para nombrar variables

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


siguiente forma:
IMPORTANTE

Los nombres de variables son «case-sensitive» .

Por ejemplo, stuff y Stuff son nombres diferentes.


Ejemplos de nombres de variables
Convenciones para nombres

Mientras se sigan las reglas que hemos visto para nombrar variables no hay problema en la
forma en la que se escriban, pero sí existe una convención para la nomenclatura de las
variables.

Se utiliza el llamado snake_case en el que utilizamos caracteres en minúsculas


(incluyendo dígitos si procede) junto con guiones bajos – cuando sean necesarios para su
legibilidad –.
Por ejemplo, para nombrar una variable que almacene el número de canciones en nuestro
ordenador, podríamos usar num_songs.
Convenciones para nombres
Constantes

Podríamos decir que es un tipo de variable pero que su valor no cambia a lo largo de
nuestro programa.

Por ejemplo la velocidad de la luz. Sabemos que su valor es constante de 300.000


km/s.

En el caso de las constantes utilizamos mayúsculas (incluyendo guiones bajos si es


necesario) para nombrarlas.

Para la velocidad de la luz nuestra constante se podría llamar: LIGHT_SPEED.


Elegir buenos nombres
Se suele decir que una persona programadora (con cierta experiencia), a lo que dedica más tiempo,
es a buscar un buen nombre para sus variables.

Quizás es algo excesivo pero da una idea de lo importante que es esta tarea.

Es fundamental que los nombres de variables sean autoexplicativos, pero siempre llegando a un
compromiso entre ser concisos y claros.
Regla general
ASIGNACIÓN

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


EJERCICIO DE ASIGNACIÓN

Como recientemente ha sido el día de PI, vamos a asignar ese valor y mostrarlo después por
pantalla.
EJERCICIO DE ASIGNACIÓN

Como recientemente ha sido el día de PI, vamos a asignar ese valor y mostrarlo después por
pantalla.
ASIGNACIÓN

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

En este caso las tres variables utilizadas en el «lado izquierdo» tomarán el valor 3.
ASIGNACIÓN
¡CUIDADO con no seguir las reglas para los nombres!
Asignando una variable a otra variable

Las asignaciones que hemos hecho hasta ahora han sido de un valor literal a una
variable.

Pero nada impide que podamos hacer asignaciones de una variable a otra variable:
Conocer el valor de una variable

Hemos visto previamente cómo asignar un valor a una variable, pero aún no sabemos cómo
«comprobar» el valor que tiene dicha variable. Para ello podemos utilizar dos estrategias:

1. Si estamos en una «shell» de Python, basta con que usemos el nombre de la variable:

2. Si estamos escribiendo un programa desde el editor, podemos hacer uso de print:


Conocer el tipo de una variable

Para poder descubrir el tipo de un literal o una variable, Python nos ofrece la función
type(). ¡CUIDADO!, para que nos muestre el resultado debemos usarla con print())
Ejemplos:
Tarea 2: tipos (comprueba_tipos.py)

1. Asigna un valor entero 2001 a la variable space_odyssey y muestra su


valor.

2. Averigua el tipo del literal ‘Good night & Good luck’

3. Identifica el tipo del literal True.

4. Asigna la expresión 10 * 3.0 a la variable result y muestra su tipo.


MUTABILIDAD
Las variables son nombres, no lugares. Detrás de esta frase se esconde la reflexión de que cuando
asignamos un valor a una variable, lo que realmente está ocurriendo es que se hace apuntar el nombre de
la variable a una zona de memoria en el que se representa el objeto (con su valor).

Si realizamos la asignación de una


variable a un valor lo que está
ocurriendo es que el nombre de la
variable es una referencia al valor, no el
valor en sí mismo:
MUTABILIDAD
Si ahora «copiamos» el valor de
a en otra variable b se podría
esperar que hubiera otro
espacio en memoria para dicho
valor, pero como ya hemos
dicho, son referencias a
memoria:
MUTABILIDAD
Para comprobarlo podemos usar la función id() que nos permite conocer la dirección de memoria6 de un
objeto en Python. A través de ella podemos comprobar que los dos objetos que hemos creado «apuntan» a la
misma zona de memoria:
MUTABILIDAD
Se dice que un entero es inmutable ya que a
la hora de modificar su valor obtenemos una
nueva zona de memoria, o lo que es lo mismo,
un nuevo objeto:
MUTABILIDAD
Sin embargo, si tratamos con listas, podemos ver que la modificación de alguno de sus valores no implica un
cambio en la posición de memoria de la variable, por lo que se habla de objetos mutables.

Ejecución paso a paso a través de Python Tutor:

https://cutt.ly/lvCyXeL

La característica de que los nombres de variables sean referencias a objetos en memoria es la que hace
posible diferenciar entre objetos mutables e inmutables:

Importante: El hecho de que un tipo de datos sea


inmutable significa que no podemos modificar su
valor «in-situ», pero siempre podremos asignarle un
nuevo valor (hacerlo apuntar a otra zona de
memoria).
FUNCIONES DEL SISTEMA
Hemos ido usando una serie de funciones sin ser especialmente conscientes de ello. Esto se
debe a que son funciones «built-in» o incorporadas por defecto en el propio lenguaje Python.
AMPLIACIÓN
PARA AMPLIAR CONOCIMIENTOS PUEDES CONSULTAR:

● Basic Data Types in Python


● Tipos de datos
● Variables in Python
● Immutability in Python
● Referencia del Lenguaje Python
Booleanos

George Boole es considerado como uno de los fundadores del campo de las ciencias de la
computación y fue el creador del Álgebra de Boole que da lugar, entre otras estructuras
algebraicas, a la Lógica binaria.

En esta lógica las variables sólo pueden tomar dos valores discretos: verdadero o falso.

El tipo de datos bool proviene de lo explicado anteriormente y admite dos posibles valores:

• True que se corresponde con verdadero (y también con 1 en su representación numérica).


• False que se corresponde con falso (y también con 0 en su representación numérica).
Booleanos
Atención: Tal y como se explicó en este apartado, los
nombres de variables son «case-sensitive». De igual modo
el tipo booleano toma valores True y False con la
primera letra en mayúsculas. De no ser así obtendríamos
un error sintáctico.
Números enteros
Los números enteros no tienen decimales pero sí pueden
contener signo y estar expresados en alguna base distinta
de la usual (base 10).

Dos detalles a tener en cuenta:

• No podemos comenzar un número entero por 0.

• Python permite dividir los números enteros con guiones


bajos _ para clarificar su lectura/escritura. A efectos
prácticos es como si esos guiones bajos no existieran.
Operaciones con enteros
Ejemplos
Módulo
Módulo
Asignación aumentada

Python nos ofrece la posibilidad de escribir una asignación aumentada mezclando la


asignación y un operador.
Asignación aumentada

Supongamos que disponemos de 100 vehículos en stock y que durante el pasado mes se
han vendido 20 de ellos.

Asignación tradicional

Asignación aumentada
Asignación aumentada

De este mismo modo, podemos


aplicar un formato compacto al
resto de operaciones:
Límite de un entero

¿Cómo de grande puede ser un int en Python? La respuesta es de cualquier tamaño. Por poner un
ejemplo, supongamos que queremos representar un centillón. Este valor viene a ser un «1»
seguido por ¡600 ceros! ¿Será capaz Python de almacenarlo?

En muchos lenguajes tratar con enteros tan largos causaría un «integer overflow». No
es el caso de Python que puede manejar estos valores sin problema.
Número flotante

Los números en punto flotante tienen parte decimal.

Veamos algunos ejemplos de flotantes en Python


(diferentes formas de escribir 4.0)
Conversión de tipos

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:


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.
Conversión EXPLÍCITA. Ejemplos

En el caso de que usemos la función int() sobre un valor


flotante, nos retorna su parte ENTERA:

int(x)=⌊x⌋
Tarea 3: Ejercicios

1. Escribir un programa en Python que averigue el área de círculo de radio 5.


2. Escribir un programa en Python que obtenga el volumen de una esfera de radio 5.
3. Escribir un programa en Python que calcule el área de un triángulo de base 4 y
altura 5.
Cadenas de texto

Las cadenas de texto son secuencias de caracteres. También se les conoce


como «strings» y nos permiten almacenar información textual de forma
muy cómoda.

Es importante destacar que Python 3 almacena los caracteres codificados


en el estándar Unicode, lo que es una gran ventaja con respecto a versiones
antiguas del lenguaje.
Además permite representar una cantidad ingente de símbolos incluyendo
los famosos emojis 😎.
Creando STRINGS

Para escribir una cadena de texto en Python basta con rodear


los caracteres con comillas simples.
Dentro de un string puedo entrecomillar, si uso comillas dobles.
Creando STRINGS

Puede surgir la duda de cómo incluimos comillas simples dentro de la propia


cadena de texto.
Veamos soluciones para ello, escapando las comillas simples para que no sean
tratadas como caracteres especiales.

o cambiando el orden
Comillas triples

Hay una forma alternativa de crear cadenas de texto utilizando comillas triples.
Su uso está pensado principalmente para cadenas multilínea:
Conversión

Podemos crear «strings» a partir de otros tipos de datos usando la función


str():
Secuencias de escape

Python permite escapar el significado de algunos caracteres para conseguir otros


resultados. Si escribimos una barra invertida \ antes del carácter en cuestión, le
otorgamos un significado especial.

Quizás la secuencia de escape más conocida es \n que representa un salto de


línea, pero existen muchas otras:
Secuencias de escape
Secuencias de escape
Expresiones literales

Hay situaciones en las que nos interesa que los


caracteres especiales pierdan ese significado y poder
usarlos de otra manera. Existe un modificar de
cadena que proporciona Python para tratar el texto
en bruto.
Es el llamado «raw data» y se aplica anteponiendo
una r a la cadena de texto.

Veamos algunos ejemplos:


Más de print()

Hemos estado utilizando la función print() de forma sencilla, pero admite algunos
parámetros interesantes:
Línea 4:
Podemos imprimir todas las variables que
queramos separándolas por comas.

Línea 7:
El separador por defecto entre las variables es un
espacio, podemos cambiar el carácter que se
utiliza como separador entre cadenas.

Línea 10:
El carácter de final de texto es un salto de línea,
podemos cambiar el carácter que se utiliza como
final de texto.
Leer datos de 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():
Leer datos de teclado
Tarea 4: Calculadora

Escriba un programa en Python que lea por teclado dos números enteros y muestre
por pantalla el resultado de realizar las operaciones básicas entre ellos.

Aproveche todo el
potencial que ofrece
print() para
conseguir la salida
esperada.
Operaciones con «strings»: Combinar cadenas

Podemos combinar dos o más cadenas de texto utilizando el operador +:


Operaciones con «strings»: Repetir cadenas

Podemos repetir dos o más cadenas de texto utilizando el operador *:


Operaciones con «strings»: Obtener un carácter

Los «strings» están indexados y cada carácter tiene su propia posición.


Para obtener un único carácter dentro de una cadena de texto es necesario
especificar su índice dentro de corchetes [...].
Operaciones con «strings»: Trocear una cadena

Es posible extraer «trozos» («rebanadas») de una cadena de texto 2. Tenemos varias aproximaciones para
ello:
[:]
Extrae la secuencia entera desde el comienzo hasta el final. Es una especie de copia de toda la cadena de
texto.
[start:]
Extrae desde start hasta el final de la cadena.
[:end]
Extrae desde el comienzo de la cadena hasta end menos 1.
[start:end]
Extrae desde start hasta end menos 1.
[start:end:step]
Extrae desde start hasta end menos 1 haciendo saltos de tamaño step.
Operaciones con «strings»: Trocear una cadena

El troceado siempre llega a una unidad


menos del índice final que hayamos
especificado.

Sin embargo el comienzo sí coincide con el


que hemos puesto.
Operaciones con «strings»: Longitud de una cadena

Para obtener la longitud de una cadena podemos hacer uso de len(), una función
común a prácticamente todos los tipos y estructuras de datos en Python:
Operaciones con «strings»: Otras funciones

Pertenencia de un elemento: comprueba si una subcadena de texto está en la


cadena. Operador in y devuelve un booleano.
Operaciones con «strings»: Otras funciones

Dividir una cadena: función split(), que debemos usar anteponiendo el «string»
que queramos dividir:
Operaciones con «strings»: Otras funciones

Dividir una cadena: Existe una forma algo más avanzada de dividir una cadena a
través del particionado. Para ello podemos valernos de la función partition()
que proporciona Python.
Esta función toma un argumento como separador, y divide la cadena de texto en 3
partes:
lo que queda a la izquierda del separador,
el separador en sí mismo
y lo que queda a la derecha del separador:
Operaciones con «strings»: Limpiar cadenas

Cuando leemos datos del usuario o de cualquier fuente externa de información, es bastante
probable que se incluyan en esas cadenas de texto, caracteres de relleno 3 al comienzo y al final.
Python nos ofrece la posibilidad de eliminar estos caracteres u otros que no nos interesen.
La función strip() se utiliza para eliminar caracteres del principio y del final de un «string».
También existen variantes de esta función para aplicarla únicamente al comienzo o únicamente
al final de la cadena de texto [lstrip() y rstrip()].
Supongamos que debemos procesar un fichero con números de serie de un determinado
artículo. Cada línea contiene el valor que nos interesa pero se han «colado» ciertos caracteres de
relleno que debemos limpiar:
Operaciones con «strings»: Reemplazar elementos

Podemos usar la función replace() indicando la subcadena a reemplazar, la


subcadena de reemplazo y cuántas instancias se deben reemplazar.
Si no se especifica este último argumento, la sustitución se hará en todas las
instancias encontradas:
Operaciones con «strings»: Mayúsculas y minúsculas
Operaciones con «strings»: Caracteres UNICODE

Python trabaja por defecto con caracteres Unicode. Eso significa que tenemos
acceso a la amplia carta de caracteres que nos ofrece este estándar de codificación.
Supongamos un ejemplo sobre el típico «emoji» de un cohete definido en este cuadro:

La función chr() permite


representar un carácter a partir de
su código:
Operaciones con «strings»: Caracteres UNICODE
COMENTARIOS

Se trata de anotaciones que podemos incluir en el código, sin


que sean interpretadas, pero que nos permiten aclarar
determinados aspectos del código.

# para poner comentarios de una línea


LEGIBILIDAD DEL CÓDIGO

Los programas suelen ser más legibles cuando las líneas no son
excesivamente largas. La longitud máxima de línea recomendada por la
guía de estilo de Python es de 80 caracteres.
En caso de que queramos romper una línea de código demasiado larga,
tenemos dos opciones:
1. Usar la barra invertida \

2. Usar los paréntesis (...)


CONTROL DE FLUJO

Todo programa informático está formado por instrucciones


que se ejecutan de 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.
DIAGRAMA DE FLUJO
El diagrama de flujo facilita mucho expresar por primera vez un programa
CONTROL DE FLUJO:
De selección / decisión/ CONDICIONALES

En una estructura de selección o decisión el


programa al ser ejecutado determina si se
debe ejecutar un bloque de código u otro si
se cumplen o no ciertas condiciones.

De ahí que se les suele llamar


“condicionales”.
CONTROL DE FLUJO: 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.
CONTROL DE FLUJO: IF-ELSE

En el caso anterior la condición se cumplía pero podría no ser así.


Para controlar ese caso existe la sentencia else.
CONTROL DE FLUJO: IF-ELSE

Podríamos tener incluso condiciones anidadas (usando indentación).


CONTROL DE FLUJO: ELIF
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:
CONTROL DE FLUJO: ELIF

Ejecución paso a paso a través de Python Tutor:


https://cutt.ly/wd58B4t
Operadores de comparación

Cuando escribimos condiciones debemos incluir alguna expresión de


comparación. Para usar estas expresiones es fundamental conocer los
operadores que nos ofrece Python:
Operadores de comparación

Podemos escribir condiciones más complejas usando los operadores lógicos:


and • or • not
Operadores de comparación

A diferencia de otros lenguajes de programación, Python ofrece la posibilidad


de ver si un valor está entre dos límites de manera directa.
Tarea

Pedir un año al usuario, meterlo en una variable year (con un valor


entero) y comprobar si dicho año es bisiesto o no lo es.
Un año es bisiesto en el calendario Gregoriano, si es divisible
entre 4 y no divisible entre 100.
Compruébalo en esta lista de años bisiestos.
Uso de booleanos en las condiciones

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:
Uso de booleanos en las condiciones

Aunque podemos simplificar la condición:


Uso de booleanos en las condiciones

O si el valor es FALSO:
Valor nulo

None es un valor especial de Python que almacena el valor nulo .


Veamos cómo se comporta al incorporarlo en condiciones de veracidad:
Valor nulo

Para distinguir None de los valores propiamente booleanos, se


recomienda el uso del operador is.
Valor nulo

Esto nos puede servir para verificar la introducción de valores, por


ejemplo:

Para indicar que un string en Python contendrá variables a ser sustituidas debemos anteceder el caracter "f"
ESTRUCTURAS DE CONTROL CONDICIONAL

Existen tres tipos de estructuras de selección:


Estructura de selección doble: Al igual
Estructura de selección simple: que la estructura de selección simple Estructura de selección
estructura que evalúa una evalúa una condición pero con la múltiple: Al igual que la
determinada condición; y si diferencia de que permite tomar dos anterior nos permite realizar
esta se cumple (suponiendo que opciones o bifurcaciones diferentes bifurcaciones en ramales pero
sea verdadera) toma la decisión según se cumpla o no dicha condición. con la diferencia de que no solo
de ejecutar determinado Son fácilmente reconocidas o nos permite dos; sino muchas
bloque de código especificado; mencionadas como estructuras más; eligiendo una así entre
modificando el flujo normal del “si/sino” o “if/else”. Y fácilmente varias posibles (además de
programa a través de una diferenciables de las simples por permitir agregar una por
bifurcación. En caso de ser permitir ingresar otro bloque de defecto “else” al final). Y con la
determinada como falsa, código adicional en caso de no diferencia también que lo hace
continua el flujo normalmente cumplirse una condición (else) en base a un valor de una
haciendo caso omiso de ella. obteniendo así otro ramal de flujo variable
alternativo.
ESTRUCTURAS DE CONTROL
CONDICIONAL
Estructuras de selección SIMPLE:
ESTRUCTURAS DE CONTROL
CONDICIONAL
Estructuras de selección DOBLE:
ESTRUCTURAS DE CONTROL
CONDICIONAL
Estructuras de selección MÚLTIPLE:
ESTRUCTURAS DE CONTROL CONDICIONAL

Estructura de selección MATCH-CASE:


A partir de Python 3.10 se introduce el Structural Pattern Matching
que introdujo en el lenguaje una nueva sentencia
condicional.
Semejante al «switch» que ya existe en otros lenguajes
de programación.

Comprueba valores de entrada con una serie de literales, como si


realizáramos un secuencia encadenada de if.
ESTRUCTURAS DE CONTROL CONDICIONAL

Estructura de selección MATCH-CASE:


Tarea

Escriba un programa en Python que acepte un «string» con los 8


dígitos de un NIF, y calcule su dígito de control
Tarea AMPLIACIÓN

Escriba un programa en Python que acepte un DNI (incluida la letra) y


compruebe si es un DNI válido.
1. Recoger el DNI
2. Extraer solo los números
3. Calcular su dígito de control
4. Comprobar que concuerda con la letra que nos han dado
5. Mostrar un mensaje diciendo que es un DNI válido
CONTROL DE FLUJO

Todo programa informático está formado por instrucciones


que se ejecutan de 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.
CONTROL DE FLUJO: BUCLES

Cuando queremos hacer algo más de una vez, necesitamos


recurrir a un bucle.

Vamos a ver las distintas sentencias en Python que nos


permiten repetir un bloque de código.
CONTROL DE FLUJO: Sentencia WHILE

La semántica tras esta sentencia es:

«Mientras se cumpla la condición haz algo»


CONTROL DE FLUJO: Sentencia WHILE

La semántica tras esta sentencia es:

«Mientras se cumpla la condición haz algo»


CONTROL DE FLUJO: Sentencia WHILE

La semántica tras esta sentencia es:

«Mientras se cumpla la condición haz algo»


CONTROL DE FLUJO: Romper una sentencia WHILE

Tenemos 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:
CONTROL DE FLUJO: Romper una sentencia WHILE

Python nos ofrece la posibilidad de detectar si el bucle ha


acabado de forma ordinaria o no.
Es decir, si ha finalizado por no cumplirse la condición
establecida.

Para ello podemos hacer uso de la sentencia else como parte


del propio bucle. Si el bucle while finaliza normalmente (sin
llamada a break) el flujo de control pasa a la sentencia
opcional else.
CONTROL DE FLUJO: Romper una sentencia WHILE

Veamos un ejemplo en el que tratamos de encontrar un


múltiplo de 9 en el rango [1,8] :
CONTROL DE FLUJO: Continuar una sentencia WHILE

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.
CONTROL DE FLUJO: Continuar una sentencia WHILE

Vamos a mostrar todos los números en el rango [1,20]


ignorando aquellos que sean múltiplos de 3:
CONTROL DE FLUJO: Bucle infinito

Si no establecemos correctamente la condición de parada o


bien el valor de alguna variable está fuera de control, es
posible que lleguemos a una situación de bucle infinito, del
que nunca podamos salir.

Veamos un ejemplo de esto:


CONTROL DE FLUJO: Bucle infinito

Para salir de él Ctrl+C


CONTROL DE FLUJO: Sentencia FOR

Se usa cuando sé el número de vueltas que he de dar o lo


hacemos sobre un tipo de datos que permite ser ITERABLE
(por ejemplo, cadenas de texto, listas, diccionarios, ficheros,...)
CONTROL DE FLUJO: Romper una sentencia FOR

Se usa cuando sé el número de vueltas que he de dar o lo


hacemos sobre un tipo de datos que permite ser ITERABLE
(por ejemplo, cadenas de texto, listas, diccionarios, ficheros,...)
CONTROL DE FLUJO: Sentencia FOR
CONTROL DE FLUJO: Sentencia FOR con secuencias de
números

Es muy habitual hacer uso de secuencias de números en


bucles.

Python no tiene una instrucción específica para ello.


Pero podemos hacer uso de la función range() que
devuelve un flujo de números en el rango especificado.
CONTROL DE FLUJO: Sentencia FOR con secuencias de
números

función 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).
● step: es opcional y tiene valor por defecto 1.

range() devuelve un objeto iterable, así que iremos obteniendo


los valores paso a paso con una sentencia for ... in
CONTROL DE FLUJO: Sentencia FOR con secuencias de
números
CONTROL DE FLUJO: Sentencia FOR con secuencias de
números
CONTROL DE FLUJO: Sentencia FOR con secuencias de
números
CONTROL DE FLUJO: Sentencia FOR un número de veces

Hay veces que no necesitamos usar la variable que toma


valores en el rango, sino que solo 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.
CONTROL DE FLUJO: Sentencia FOR un número de veces
CONTROL DE FLUJO: Bucles anidados

Igual que con el if, podemos necesitar meter unas


sentencias de control (bucles) dentro de otras.
CONTROL DE FLUJO: Bucles anidados

Los bucles anidados también se pueden aplicar en la sentencia


while.
TAREA

Escribir un programa en Python que acepte una cadena de


texto e indique si todos sus caracteres son alfabéticos.

Para comprobar si un carácter es alfabético disponemos de las


función char.isalpha()que nos devuelve VERDADERO si
el carácter es alfabético.

Debe salirse cuando encuentre el primero no alfabético y


mostrar cuál es.
TIPOS DE DATOS COMPLEJOS

Son estructuras de datos que resultan de combinar los tipos


de datos básicos.

Molécula-Estructura compuesta de varios átomos

Átomo-Estructura básica Consultar tutorial oficial


TIPOS DE DATOS COMPLEJOS: LISTAS

Nos van a permitir almacenar objetos:


○ mediante un orden definido
○ con posibilidad de duplicados
Son estructuras de datos mutables, es decir, podemos:
○ añadir,
○ eliminar
○ o modificar sus elementos
CREACIÓN DE LISTAS

Una lista está compuesta por cero o más elementos.

En Python debemos escribir estos elementos separados


por comas y dentro de corchetes.

Ejemplos:
TAREA

Crea una lista con los días de la semana y otra con los
meses del año.
CONVERSIÓN

Para convertir otros tipos de datos en una lista podemos


usar la función list():
CONVERSIÓN

Para convertir otros tipos de datos en una lista podemos


usar la función list():
LISTA VACÍA

Si a list()no le paso ningún argumento lo que tengo es


la lista VACÍA.
También podemos crearlo usando [] (más eficiente)
OPERACIONES CON LISTAS

Tiene un funcionamiento similar a lo que vimos con las


cadenas de texto
EXTRAER UN ELEMENTO
OPERACIONES CON LISTAS
RECORRER UNA LISTA
OPERACIONES CON LISTAS
RECORRER UNA LISTA
OPERACIONES CON LISTAS
TROCEAR UNA LISTA
OPERACIONES CON LISTAS
TROCEAR UNA LISTA
OPERACIONES CON LISTAS
INVERTIR UNA LISTA

Conservando la lista original:

Troceado de listas con step negativo: lista_compra[::-1]

Conservando la lista original:

Función reversed(): list(reversed(lista_compra)

Modificando la lista original:

Función reverse(): lista_compra.reverse()


OPERACIONES CON LISTAS
INVERTIR UNA LISTA
OPERACIONES CON LISTAS
AÑADIR AL FINAL DE UNA 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:
OPERACIONES CON LISTAS
CONSTRUIR UNA LISTA

En muchas ocasiones trabajaremos con una lista vacía que iremos rellenando.
Por ejemplo, quiero crear una lista con los números pares del 1 al 20.
OPERACIONES CON LISTAS
AÑADIR EN CUALQUIER POSICIÓN DE UNA LISTA

Usaremos la función insert() con el índice de inserción y el elemento que


queremos insertar. También es una función DESTRUCTIVA.
OPERACIONES CON LISTAS
REPETIR ELEMENTOS DE UNA LISTA

Con * igual que con las cadenas de caracteres.


OPERACIONES CON LISTAS
COMBINAR LISTA

Mediante los operadores + o +=


OPERACIONES CON LISTAS
COMBINAR LISTA

Mediante la función extend():


OPERACIONES CON LISTAS
COMBINAR LISTA

Mediante la función extend():


OPERACIONES CON LISTAS
COMBINAR LISTA

Mediante la función append():


OPERACIONES CON LISTAS
MODIFICAR UNA LISTA

De manera similar al acceso:


OPERACIONES CON LISTAS
MODIFICAR UNA LISTA

De manera similar al acceso:


OPERACIONES CON LISTAS
MODIFICAR UNA LISTA CON TROCEADO

De manera similar al acceso:


OPERACIONES CON LISTAS
BORRAR ELEMENTOS DE UNA LISTA

● Por su índice, mediante la función del().


● Por su valor, mediante la función remove().

Si existen valores duplicados, la función remove() sólo borrará la primera ocurrencia.


OPERACIONES CON LISTAS
BORRAR ELEMENTOS DE UNA LISTA

● Por su índice (con EXTRACCIÓN) mediante la función pop().


OPERACIONES CON LISTAS
BORRAR ELEMENTOS DE UNA LISTA COMPLETA

● Con la función CLEAR: lista_compra.clear()


● Reinicialización a vacío: lista_compra=[]
OPERACIONES CON LISTAS
ENCONTRAR UN ELEMENTO DE UNA LISTA

● Con la función index: lista_compra.index(‘Pan’)

Si buscamos un valor que existe más de una vez en una lista, la función index() sólo nos
devolverá el índice de la primera ocurrencia.
OPERACIONES CON LISTAS
OTRAS FUNCIONES DE UNA LISTA

● Pertenencia de un elemento (Booleano): ‘Aceite’ in lista_compra


● Número de veces que aparece un valor: lista_compra.count(‘Pan’)
● Ordenar una lista, conservando original: sorted(lista_compra)
● Ordenar una lista, modificando la original: lista_compra.sort()
● Ambos métodos admiten un parámetro «booleano» reverse para indicar si
queremos que la ordenación se haga en sentido inverso:
○ sorted(lista_compra, reverse=True)
● Longitud de una lista: len(lista_compra)
OPERACIONES CON LISTAS
OTRAS FUNCIONES DE UNA LISTA
● Iterar sobre una lista:
for product in lista_compra:
print(product)
● Iterar con enumeración:
for i, product in enumerate(lista_compra):
print(i, product)
● Iterar sobre múltiples listas en paralelo (ZIP):
TUPLAS

El concepto de tupla es muy similar al de lista.


Aunque hay algunas otras diferencias, lo fundamental es que, mientras
una lista es mutable y se puede modificar, una tupla no admite cambios
y por lo tanto, es inmutable.

coord_Marbella=(36.51543, -4.88583)
Reyes_Magos=('Melchor', 'Gaspar', 'Baltasar')
DESEMPAQUETADO DE TUPLAS

El desempaquetado es una característica de las tuplas que nos permite


asignar una tupla a variables independientes:

Reyes_Magos=('Melchor', 'Gaspar', 'Baltasar')


rey1, rey2, rey3=Reyes_Magos
DICCIONARIO

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

Para crear un diccionario usamos llaves {} rodeando asignaciones clave: valor


que están separadas por comas.

rae = {
'bifronte': 'De dos frentes o dos caras',
'anarcoide': 'Que tiende al desorden',
'montuvio': 'Campesino de la costa'

Las claves pueden ser cadenas de texto (han de ir entrecomilladas) o valores enteros.
DICCIONARIO con dict()
Acceso a los elementos DICCIONARIO
Acceso a los elementos DICCIONARIO con GET

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:

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

● Si la clave que buscamos no existe, nos devuelve None salvo que le


indiquemos otro valor por defecto, pero en ninguno de los dos casos
obtendremos un error.
Acceso a los elementos DICCIONARIO con GET
AÑADIR elementos DICCIONARIO
TAREA DICCIONARIO

Usando un diccionario, contar el número de veces que se repite cada letra en una
cadena de texto dada (puedes pedirla por teclado)
Obtener todos los elementos de un DICCIONARIO

Obtener todas las claves de un diccionario, mediante la función keys():


Obtener todos los elementos de un DICCIONARIO

Obtener todos los valores de un diccionario, mediante la función values():


Obtener todos los elementos de un DICCIONARIO

Obtener todos los pares «clave-valor» de un diccionario, mediante la función


items():
Otras funciones del DICCIONARIO

● Número de elementos («clave-valor») de un diccionario: función len()


● …
TAREA 5

1. Investigar sobre otras funciones para trabajar con diccionarios


2. Hacer un ejemplo donde se usen
TAREA de ampliación

Hay un tipo de dato que no hemos definido, CONJUNTO.


Investiga sobre él:
1. Cómo lo defino.
2. Cómo itero sobre sus elementos.
3. Operaciones con conjuntos.
4. Funciones que me permiten trabajar con conjuntos.
FUNCIONES

En este tiempo hemos trabajado con funciones pero, ¿cómo puedo hacer mis
propias funciones?

https://www.freecodecamp.org/espanol/news/guia-de-funciones-de-python-con
-ejemplos/
FUNCIONES

Una función permite


definir un bloque de
código reutilizable que se
puede ejecutar muchas
veces dentro de tu
programa.

Lo que reducirá
considerablemente el
número total de líneas de
código en tu proyecto.
FUNCIONES: Sintaxis

● La palabra clave def


● Un nombre de función
● Paréntesis ’()’, y dentro de los paréntesis los parámetros
de entrada (aunque son opcionales)
● Dos puntos ’:’
● Algún bloque de código para ejecutar
● Una sentencia de retorno (opcional)
FUNCIONES (sin parámetros o retorno de valores)
FUNCIONES (con parámetros)
FUNCIONES
FUNCIONES (con varios parámetros y sentencia de retorno)
ÁMBITO DE LAS VARIABLES

El ámbito de una variable es el contexto en el que existe esa variable.


Así, una variable existe en dicho ámbito a partir del momento en que
se crea y deja de existir cuando desaparece su ámbito.

Además, las variables son accesibles solo desde su propio ámbito, pero
con alguna excepción, como veremos más adelante.
ÁMBITO DE LAS VARIABLES

Los principales tipos de ámbitos en Python son dos:

Ámbito local: corresponde con el ámbito de una función, que existe desde que se
invoca a una función hasta que termina su ejecución. En un programa, el ámbito
local corresponde con las líneas de código de una función.
Cada función tiene su ámbito local. No se puede acceder a las variables de una
función desde fuera de esa función o desde otra función.
Ámbito global: corresponde con el ámbito que existe desde el comienzo de la
ejecución de un programa. Todas las variables definidas fuera de cualquier función
corresponden al ámbito global, que es accesible desde cualquier punto del
programa, incluidas las funciones. Si desde un módulo A importamos un módulo B
mediante un import, desde A podremos acceder a las variables globales de B.
Variables locales

Se definen dos funciones, cada una de las cuales posee su ámbito local.
Las variables y parámetros definidos dentro de cada una de ellas son solo
accesibles desde su ámbito.
El error NameError

Si intentamos acceder al valor de una variable local desde el cuerpo principal del programa o,
en general, a una variable que no ha sido definida obtendremos un error: NameError.

Al ejecutar el código anterior se nos


mostrará el saludo por pantalla
debido a la llamada a la función
saludar. Después, al intentar
mostrar el valor de la variable
saludo desde el cuerpo principal del
programa, Python nos “obsequiará”
con el mensaje NameError: name
'saludo' is not defined.
Variables globales

Las variables globales en Python son aquellas definidas en el cuerpo


principal del programa fuera de cualquier función.

Son accesibles desde cualquier punto del programa, incluso desde


dentro de funciones.

También se puede acceder a las variables globales de otros


programas o módulos importados.
Tarea 6: Funciones

Crea una función con alguno de los ejercicios que hemos hecho antes y ejecútala.
Módulo TURTLE

En 1967 Wally Feurzeig y Seymour Papert


crearon Logo, un lenguaje de programación
con fines educativos. Ese lenguaje incluía las
llamadas "gráficas tortuga".

La "tortuga" de Logo es un cursor al que se le


pueden dar órdenes de movimiento (avance,
retroceso o giro) y que puede ir dejando un
rastro sobre la pantalla. Moviendo
adecuadamente la tortuga se pueden
conseguir dibujar todo tipo de figuras.
Módulo TURTLE

Para utilizar el módulo turtle sólo hace falta importarlo:

● Si se va a escribir código no orientado a objetos:


from turtle import *
● Si se va a escribir código orientado a objetos:
import turtle

Consultar los métodos disponibles para Turtle y Screen


en Manual de Python
Módulo TURTLE
Módulo TURTLE
Módulo TURTLE

Instrucciones con ejemplos


Tarea 7: Dibujo con Turtle

Realiza un dibujo usando la tortuga y explica en


cada instrucción qué hace (utiliza los comentarios
de Python)
TAREA de ampliación 3

Investigar sobre el trabajo con ficheros en Python


MÁS INFORMACIÓN SOBRE PYTHON

● Documentación oficial Python 󰎼


● Guías de Python para principiantes
● Libros de Python
● Python intermedio

También podría gustarte