Introduciendo Python
Introduciendo Python
• Introducción
• ¿Qué es Python?
• Instalación del lenguaje
• Elementos de un programa Python
• Variables
• Tipos de datos
• Entrada y salida
• Estructuras de control
• Funciones
Introducción
' " # \
( ) [ ] { }
, : . ; @ = ->
+= -= *= /= //= %= @=
&= |= ^= >>= <<= **=
Elementos de un programa de
Python
• Identificadores
• Los identificadores son las palabras que se utilizan para nombrar
elementos creados por el usuario u otros usuarios. Esos elementos
pueden ser variables u objetos que almacenan información,
funciones que agrupan instrucciones, clases que combinan ambos,
módulos que agrupan los elementos anteriores, etc.
• Los identificadores están formados por letras (mayúsculas y
minúsculas), números y el carácter guión bajo (_). Pueden ser
caracteres Unicode, aunque normalmente se recomienda utilizar
caracteres ASCII para evitar complicaciones a usuarios de oros
países que utilizan juegos de caracteres diferentes.
• El primer carácter del identificador debe ser una letra.
Elementos de un programa de
Python
• Identificadores
• Los identificadores son las palabras que se utilizan para nombrar
elementos creados por el usuario u otros usuarios. Esos elementos
pueden ser variables u objetos que almacenan información,
funciones que agrupan instrucciones, clases que combinan ambos,
módulos que agrupan los elementos anteriores, etc.
• Los identificadores están formados por letras (mayúsculas y
minúsculas), números y el carácter guión bajo (_). Pueden ser
caracteres Unicode, aunque normalmente se recomienda utilizar
caracteres ASCII para evitar complicaciones a usuarios de oros
países que utilizan juegos de caracteres diferentes.
• El primer carácter del identificador debe ser una letra.
Elementos de un programa de
Python
• Operadores
• Python el paradigma de la programación funcional. Esto quiere
decir que está basada en una programación declarativa de
funciones matemáticas.
• Operadores aritméticos: Al hacer operaciones con números
enteros y decimales el resultado es siempre decimal
• En el caso de que el resultado no tenga parte decimal, Python escribe 0 como
parte decimal.
Suma +
Resta -
Multiplicación *
División /
Potencia **
Resto %
Cociente //
Elementos de un programa de
Python
• Operadores
• Operadores lógicos: son utilizados, en la mayoría de las ocasiones,
en las estructuras condicionales. Los resultados que devuelven son
de tipo booleano, es decir, verdadero (True) o falso (False).
Igual que ==
Distinto que !=
Mayor que >
Mayor o igual que >=
Menor que <
Menor o igual que <=
Elementos de un programa de
Python
• Operadores
• Expresiones compuestas: Se utilizan para evaluar varias
expresiones lógicas.
• and: "y" lógico. Este operador da como resultado True si y sólo si sus dos
operandos son True
• or: "o" lógico. Este operador da como resultado True si algún operando es True
• not: negación. Este operador da como resultado True si y sólo si su argumento es
False
• Python evalúa primero los not, luego los and y por último los or
• Se recomienda utilizar paréntesis para asegurar el orden de las
operaciones.
Elementos de un programa de
Python
• Funciones adicionales
• Un programa puede definir nuevas funciones o redefinir las
funciones integradas. Los nombres de las funciones no pueden
coincidir con las palabras reservadas.
• Un programa puede también importar nuevas funciones que se
encuentran definidas en otros ficheros llamados módulos.
• Python incluye una biblioteca de módulos (llamada Biblioteca
estándar - https://docs.python.org/3/library/) especializados en todo
tipo de tareas.
• Además de la biblioteca estándar, existen miles de módulos escritos
por diferentes programadores y accesibles en Internet. El principal
repositorio de módulos es el Python Package Index (Índice de
paquetes de Python - https://pypi.python.org/pypi), más conocido
por PyPI.
Variables
Asignación es equivalente a
aumentada
a += b a=a+b
a -= b a=a-b
a *= b a=a*b
a /= b a=a/b
a **= b a = a ** b
a //= b a = a // b
a %= b a=a%b
Variables
• Números
• Python distingue entre números enteros y decimales. Al escribir un
número decimal, el separador entre la parte entera y la parte
decimal es un punto.
• OJO: Si se escribe una coma como separador entre la parte entera y la
decimal, Python no lo entiende como separador, sino como una pareja
de números (concretamente, lo entiende como una tupla de dos
elementos
• Si se escribe un número con parte decimal 0, Python considera el
número como número decimal.
• Python trae soporte por defecto para los números complejos, dónde
la parte imaginaria va a estar representada por la letra j en lugar de
utilizar la i como en la notación matemática.
Tipos de datos
• Números
• Al sumar, restar o multiplicar números enteros, el resultado es
entero.
• Al dividir números enteros, el resultado es siempre decimal, aunque
sea un número entero.
• Cuando Python escribe un número decimal, lo escribe siempre con
parte decimal, aunque sea nula.
• Al hacer operaciones en las que intervienen números enteros y
decimales, el resultado es siempre decimal. En el caso de que el
resultado no tenga parte decimal, Python escribe 0 como parte
decimal para indicar que el resultado es un número decimal
• OJO: Al realizar operaciones con decimales, los resultados pueden
presentar errores de redondeo
• Este error se debe a que Python almacena los números decimales en
binario y pasar de decimal a binario provoca errores de redondeo
• Si necesitas precisión absoluta, deberas utilizar bibliotecas específicas.
Tipos de datos
• Números
• Cuando en una fórmula aparecen varias operaciones, Python las
efectúa aplicando las reglas usuales de prioridad de las operaciones
(primero multiplicaciones y divisiones, después sumas y restas)
• En caso de querer que las operaciones se realicen en otro orden, se
deben utilizar paréntesis
• El operador cociente // tiene la misma prioridad que la división. El
resultado es siempre un número entero, pero será de tipo entero o
decimal dependiendo del tipo de los números empleados (en caso
de ser decimal, la parte decimal es siempre cero).
• El operador resto % tiene la misma prioridad que la división. El resto
de la división tendrá tipo entero o decimal, de acuerdo con el
resultado de la operación.
Tipos de datos
• Números
• Las potencias tienen prioridad sobre las multiplicaciones y
divisiones. Utilizando exponentes negativos o decimales se pueden
calcular potencias inversas o raíces n-ésimas.
• También se pueden calcular potencias o raíces mediante la función
pow(x,y). Si se da un tercer argumento, pow(x, y, z), la
función calcula primero x elevado a y después calcula el resto de la
división por z.
• Para redondear un número se puede utilizar la función round().
Admite uno o dos argumentos numéricos.
• Si sólo hay un argumento, la función devuelve el argumento
redondeado al entero más próximo
• Si se escriben dos argumentos, siendo el segundo un número entero, la
función round() devuelve el primer argumento redondeado en la
posición indicada por el segundo argumento. Si el segundo argumento
es negativo, se redondea a decenas, centenas, etc. Si el segundo
argumento es 0, se redondea al entero más próximo pero el resultado
es decimal y no entero.
Tipos de datos
• Números
• Para redondear un número al entero anterior o posterior, se pueden
utilizar las funciones floor() y ceil(), que están incluidas en la
biblioteca math. Estas funciones sólo admiten un argumento
numérico y devuelven valores enteros.
• Antes de utilizar estas funciones, hay que importarlas, o se generará
un error: from math import floor
• La función integrada abs() calcula el valor abosluto de un número,
es decir, el valor sin signo.
Tipos de datos
• Booleanos
• En Python cualquier variable (en general, cualquier objeto) puede
considerarse como una variable booleana. En general, los elementos
nulos o vacíos se consideran False y el resto se consideran True.
• Para comprobar si un elemento se considera True o False, se puede
convertir a su valor booleano mediante la función bool().
Tipos de datos
• Cadenas de texto
• Una cadena es una secuencia inmutable de caracteres Unicode,
delimitada por comillas.
• Las cadenas de texto se pueden delimitar con comillas simples (') o con
comillas dobles ("). Son completamente equivalentes.
• Las comillas triples permiten que las cadenas ocupen más de
una línea.
• Se utilizan, sobre todo, para la documentación de módulos, funciones,
clases o métodos. Son las llamadas docstrings, definidas en el PEP 257
(https://www.python.org/dev/peps/pep-0257/). Son cadenas que se
escriben al principio del elemento describiendo lo que hace el
elemento. No producen ningún resultado en el programa, pero las
herramientas de documentación de Python pueden extraerlas para
generar documentación automáticamente.
Tipos de datos
• Cadenas de texto
• Se pueden escribir comillas simples en cadenas delimitadas con
comillas dobles y viceversa.
• Otra forma de escribir comillas en una cadena es utilizar los
caracteres especiales \" y \' que representan los caracteres comillas
dobles y simples respectivamente y que Python no interpreta en
ningún caso como delimitadores de cadena.
• Se pueden utilizar ambos caracteres especiales independientemente
del delimitador utilizado
• Otros caracteres especiales:
• Salto de línea: \n
• Tabulador: \t
• En el prompt de IDLE se pueden escribir cadenas sueltas, sin
necesidad de escribir la función print().
Tipos de datos
• Cadenas de texto
• Si un programa contiene cadenas muy largas, las cadenas se pueden
simplemente partir en varias cadenas.
• Cadenas de texto
• También es posible concatenar una variable de tipo string con una
cadena o concatenar directamente dos variables.
• Cadenas de texto
• El operador * aplicado a cadenas de texto nos permite repetir una
cadena n veces.
• Listas
• Las listas son conjuntos ordenados de elementos (números, cadenas,
listas, etc.). Las listas se delimitan por corchetes ([ ]) y los elementos
se separan por comas.
• Las listas pueden contener
• elementos del mismo tipo
• elementos de tipos distintos
• listas
• Las listas pueden tener muchos niveles de anidamiento
• Las variables de tipo lista hacen referencia a la lista completa
• Una lista que no contiene ningún elemento se denomina lista vacía
• Al definir una lista se puede hacer referencia a otras variables
Tipos de datos
• Listas
• Se puede acceder a cualquier elemento de una lista escribiendo el
nombre de la lista y entre corchetes el número de orden en la lista.
• El primer elemento de la lista es el número 0.
• Listas
• Cada elemento se identifica por su posición en la lista, teniendo en
cuenta que se empieza a contar por 0.
• Se pueden utilizar números negativos (el último elemento tiene el
índice -1 y los elementos anteriores tienen valores descendentes)
• Se puede modificar cualquier elemento de una lista haciendo
referencia a su posición
Tipos de datos
• Listas
• De una lista se pueden extraer sublistas, utilizando la notación
nombreDeLista[inicio:límite]
• Se puede modificar una lista modificando sublistas. De esta manera
se puede modificar un elemento o varios a la vez e insertar o
eliminar elementos
• Al definir sublistas, Python acepta valores fuera del rango, que se
interpretan como extremos (al final o al principio de la lista)
Tipos de datos
• Listas
• La palabra reservada del permite eliminar un elemento o varios
elementos a la vez de una lista, e incluso la misma lista.
• Listas
• Se puede recorrer una lista de principio a fin de dos formas
distintas:
• Recorrer directamente los elementos de la lista, es decir, que la variable
de control del bucle tome los valores de la lista que estamos
recorriendo:
• Listas
• Se puede recorrer una lista de principio a fin de dos formas
distintas:
• Para saber si un valor está en una lista se puede utilizar el operador in.
La sintaxis sería "elemento in lista" y devuelve un valor lógico:
True si el elemento está en la lista, False si el elemento no está en la
lista.
Tipos de datos
• Tuplas
• En Python, una tupla es un conjunto ordenado e inmutable de
elementos del mismo o diferente tipo.
• Una vez inicializada la tupla no podemos agregar, borrar o modificar sus
elementos.
• Las tuplas se representan escribiendo los elementos entre paréntesis
y separados por comas.
• En realidad no es necesario escribir los paréntesis para indicar que se
trata de una tupla, basta con escribir las comas, pero Python escribe
siempre los paréntesis
• La función len() devuelve el número de elementos de una tupla
• Una tupla puede no contener ningún elemento, es decir, ser una
tupla vacía
• Una tupla puede incluir un único elemento, pero para que Python
entienda que nos estamos refiriendo a una tupla es necesario
escribir al menos una coma.
Tipos de datos
• Tuplas
• Python posibilita la conversión de tuplas a listas y viceversa
mediante las funciones:
list(parametro de tipo tupla)
tuple(parametro de tipo lista)
• Empaquetado: Se puede generar una tupla asignando a una
variable un conjunto de variables o valores separados por coma
• Desempaquetado:
Tipos de datos
• Diccionarios
• En Python, un diccionario es una colección no-ordenada de valores
que son accedidos a través de una clave.
• En lugar de acceder a la información mediante el índice numérico,
como es el caso de listas y tuplas, es posible acceder a los valores a
través de sus claves.
• Las claves son únicas dentro de un diccionario.
• Si se asigna un valor a una clave ya existente, se reemplaza el valor anterior.
• Cualquier variable de tipo inmutable, puede ser clave de un
diccionario: cadenas, enteros, tuplas, etc.
• No hay restricciones para los valores que el diccionario puede
contener: listas, cadenas, tuplas, otros diccionarios, objetos, etc.
• Un diccionario es una estructura de datos mutable es decir
podemos agregar elementos, modificar y borrar.
Tipos de datos
• Diccionarios
• Es posible definir un diccionario directamente con los miembros que
va a contener, o bien inicializar el diccionario vacío y luego agregar
los valores de uno en uno.
Tipos de datos
• Diccionarios
• Para acceder al valor asociado a una determinada clave, se utiliza la
clave. Esto falla si se proporciona una clave que no esta en el
diccionario. Por ello, se recomienda utilizar la función get, que
devuelve None, o un valor por omisión que se establece
opcionalmente, si la clave no está en el diccionario.
Tipos de datos
• Diccionarios
• Existen diversas formas de recorrer un diccionario:
• Recorrer sus claves y usar esas claves para acceder a los valores
• Diccionarios
• Para verificar si una clave se encuentra en el diccionario, se utiliza la
palabra reservada in
Tipos de datos
• Salida
• Para que IDLE muestre el valor de una variable, basta con escribir su
nombre.
• También se puede conocer el valor de varias variables a la vez
escribiéndolas entre comas (IDLE las mostrará entre paréntesis)
• En los programas, para mostrar texto o variables hay que utilizar la
función print()
• El texto a mostrar se escribe como argumento de la función
• La función print() admite varios argumentos seguidos. En el
programa, los argumentos deben separarse por comas. Los
argumentos se muestran en el mismo orden y en la misma línea,
separados por espacios.
• Al final de cada print(), Python añade automáticamente un salto
de línea
• Si no se quiere que Python añada un salto de línea al final de un print(),
se debe añadir al final el argumento end=""
Entrada y salida
• Salida
• Para generar una línea en blanco, se puede escribir una orden
print() sin argumentos
• Para incluir comillas dentro de comillas, se puede escribir una
contrabarra (\) antes de la comilla para que Python reconozca la
comilla como carácter, no como delimitador de la cadena o escribir
comillas distintas a las utilizadas como delimitador de la cadena
• La función print() permite incluir variables o expresiones como
argumento, lo que nos permite combinar texto y variables
• Salida
• Para eliminar ese espacio, se puede reducir el número de
argumentos, concatenando texto y variables con el operador suma
(+):
• Salida
• En Python 3.6 se ha añadido (PEP 498 -
https://www.python.org/dev/peps/pep-0498/) una nueva notación
para cadenas llamada cadenas "f", que simplifica la inserción de
variables y expresiones en las cadenas.
• Una cadena "f" contiene variables y expresiones entre llaves ({}) que
se sustituyen directamente por su valor.
• Se reconocen porque comienzan por una letra f antes de las comillas
de apertura
• Salida
• Las cadenas "f" permiten dar formato a las variables, siguiendo la
sintaxis del método
str.format()(https://docs.python.org/3/library/string.html#format
strings)
Entrada y salida
• Entrada
• La función input() permite obtener texto escrito por teclado. Al
llegar a la función, el programa se detiene esperando que se escriba
algo y se pulse la tecla Intro.
• El usuario escribe su respuesta en una línea distinta a la pregunta
porque Python añade un salto de línea al final de cada print().
• Si se prefiere que el usuario escriba su respuesta a continuación de
la pregunta, se podría utilizar el argumento opcional end en la
función print(), que indica el carácter o caracteres a utilizar en vez
del salto de línea.
• Entrada
• De forma predeterminada, la función input() convierte la entrada
en una cadena. Si se quiere que Python interprete la entrada como
un número entero o un número decimal, se debe utilizar las
funciones int() y float(), respectivamente.
• La función input() sólo puede tener un argumento.
Entrada y salida
• Ficheros
• Antes de poder realizar cualquier operación de lectura/escritura hay
que abrir el archivo con open() indicando su ubicación y nombre
seguido, opcionalmente, por el modo o tipo de operación a realizar
y la codificación que tendrá el archivo.
• Si no se indica el tipo de operación el archivo se abrirá en modo de
lectura y si se omite la codificación se utilizará la codificación actual del
sistema.
• ¿Y que codificación utiliza nuestro sistema? Podemos
averiguarlo ejecutando las siguiente líneas de código:
import locale
print(locale.getpreferredencoding())
Entrada y salida
• Ficheros
• Las operaciones que pueden realizarse sobre un archivo:
r Lectura
r+ Lectura/Escritura
w Sobreescritura. Si no existe el achivo se creará.
a Añadir. Escribe al final del archivo.
b Binario
+ Permite lectura/escritura simultanea
U Salta de línea universal
Win CR*LF
Linux LF
Mac CR
rb Lectura binaria
wb Sobreescritura binaria
r+b Lectura/Escritura binaria
Entrada y salida
• Ficheros
• Después de terminar de trabajar con un archivo lo cerraremos con el
método close.
• Con el método read() es posible leer un número de bytes
determinados.
• Si no se indica número se leerá todo lo que reste o si se alcanzó el final
de fichero devolverá una cadena vacía.
• El método readline() lee de un archivo una línea completa
• El método readlines() lee todas las líneas de un archivo como
una lista. Si se indica el parámetro de tamaño leerá esa cantidad de
bytes del archivo y lo necesario hasta completar la última línea
• with-as permite usar los archivos de forma óptima cerrándolos y
liberando la memoria al concluir el proceso de lectura.
Entrada y salida
• Ficheros
• El método write() escribe una cadena y el método
writelines() escribe una lista a un archivo.
• Si en el momento de escribir el archivo no existe se creará uno nuevo.
• El método seek() desplaza el puntero a una posición del archivo y
el método tell() devuelve la posición del puntero en un
momento dado (en bytes).
• Para leer y escribir cualquier tipo de objeto Python podemos
importar el modulo pickle y usar sus métodos dump() y
load() para leer y escribir los datos.
Entrada y salida
• Sangrado de bloques
• Un bloque de instrucciones puede contener varias instrucciones.
Todas las instrucciones del bloque deben tener el mismo sangrado.
• Sentencias condicionales anidadas
• Una sentencia condicional puede contener a su vez otra sentencia
anidada. OJO con los sangrados.
• Más de dos alternativas: if ... elif ... else ...
• La estructura de control if ... elif ... else ... permite
encadenar varias condiciones. "elif" es una contracción de "else
if".
• Se pueden escribir tantos bloques elif como sean necesarios
Estructuras de control
• Sangrado de bloques
• Un bloque de instrucciones puede contener varias instrucciones.
Todas las instrucciones del bloque deben tener el mismo sangrado.
• Sentencias condicionales anidadas
• Una sentencia condicional puede contener a su vez otra sentencia
anidada. OJO con los sangrados.
• Más de dos alternativas: if ... elif ... else ...
• La estructura de control if ... elif ... else ... permite
encadenar varias condiciones. "elif" es una contracción de "else
if".
• Se pueden escribir tantos bloques elif como sean necesarios
Estructuras de control
• Condiciones no booleanas
• Dado que cualquier variable puede interpretarse como una variable
booleana, si la condición es una comparación con cero, podemos
omitir la comparación.
Estructuras de control
• El bucle for
• Un bucle es una estructura de control que repite un bloque de
instrucciones.
• Un bucle for es un bucle que repite el bloque de instrucciones un
número prederminado de veces. El bloque de instrucciones que se
repite se suele llamar cuerpo del bucle y cada repetición se suele
llamar iteración.
• La sintaxis de un bucle for es la siguiente:
for variable in elemento iterable (lista, cadena, range, etc.):
cuerpo del bucle
• No es necesario definir la variable de control antes del bucle,
aunque se puede utilizar como variable de control una variable ya
definida en el programa.
• El cuerpo del bucle se ejecuta tantas veces como elementos tenga
el elemento recorrible (elementos de una lista o de un range(),
caracteres de una cadena, etc.)
Estructuras de control
• El bucle for
• La variable de control puede ser una variable empleada antes del
bucle. El valor que tuviera la variable no afecta a la ejecución del
bucle, pero cuando termina el bucle, la variable de control conserva
el último valor asignado:
Estructuras de control
• El bucle for
• En vez de una lista se puede escribir una cadena. En este caso, la
variable de control va tomando como valor cada uno de los
caracteres:
• El bucle while
• Un bucle while permite repetir la ejecución de un grupo de
instrucciones mientras se cumpla una condición (es decir, mientras la
condición tenga el valor True)
• La sintaxis del bucle while es la siguiente:
while condicion:
cuerpo del bucle
• Cuando llega a un bucle while, Python evalúa la condición y, si es
cierta, ejecuta el cuerpo del bucle. Una vez ejecutado el cuerpo del
bucle, se repite el proceso (se evalúa de nuevo la condición y, si es
cierta, se ejecuta de nuevo el cuerpo del bucle) una y otra vez
mientras la condición sea cierta. Únicamente cuando la condición
sea falsa, el cuerpo del bucle no se ejecutará y continuará la
ejecución del resto del programa.
Estructuras de control
• El bucle while
• Si la condición del bucle se cumple siempre, el bucle no terminará
nunca de ejecutarse y tendremos lo que se denomina un bucle
infinito.
• Para interrumpir un bucle infinito, hay que pulsar la combinación de
teclas Ctrl+C.
Estructuras de control
• Variables locales
• Si no se han declarado como globales o no locales, las variables a
las que se asigna valor en una función se consideran variables
locales, es decir, sólo existen en la propia función, incluso cuando en
el programa exista una variable con el mismo nombre.