Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Python es un lenguaje de programación relativamente fácil de aprender, interpretado, de alto nivel, orientado
a objetos, con tipado dinámico, ampliable con biblioteca de módulos... y que permite un desarrollo rápido de
aplicaciones en diversas áreas y sobre la mayoría de las plataformas.
Está orientado hacia la computación numérica, aunque hay módulos para cálculo simbólico, tratamiento de
datos...
INSTALACIÓN
Online
Plataforma repl.it: Uno de los editores y consola en línea, a través del navegador de internet (por tanto
accesible en cualquier dispositivo), se tiene en la plataforma web https://repl.it/languages, seleccionando el
lenguaje de programación Python (a continuación se muestra la interface con sesión iniciada en repl.it):
En la ventana de la derecha (fondo negro) está la consola (introducir órdenes y ejecutarlas y mostrar
resultados, como en una calculadora) y en la central el editor de programas, que se ejecutan pulsando en run
(icono verde) y mostrando el resultado en la consola. En la figura anterior se muestra el resultado de la
ejecución del programa.
Registrándose (es gratuito) se pueden guardar proyectos a los que se les asigna una url para ejecutar /
modificar o compartir en cualquier momento.
Instalar Python desde el sitio oficial https://www.python.org/ descargando Python 3 para el sistema operativo
correspondiente.
en donde es preferible añadir las rutas al PATH de Windows y realizar una instalación personalizada para
seleccionar la carpeta de instalación, entre otras opciones.
Se instala un IDLE (Integrated Development and Learning Environment), un entorno interactivo de edición,
que actúa de consola en la que se pueden introducir instrucciones, y pulsar RETURN para obtener
resultados, como en una calculadora:
que, después de guardarlo, al ir a Run, Run Module se ejecuta el programa mostrando el resultado en la
consola:
Android
Cada línea de comentario tiene que comenzar con el carácter almohadilla # (es un delimitador):
#esto es un comentario
VARIABLES
Las variables son una especie de "cajas" de memoria a las que asignamos nombres, que almacenarán
cualquier tipo de dato y que puede ir variando su contenido a lo largo del programa. (Propiamente en Python,
por ser un lenguaje orientado a objetos, las variables son nombres -etiquetas- que se utilizan para referirse a
los objetos que son las “cajas” de memoria en la que están almacenados los datos concretos).
Los nombres de las variables deben empezar por letra o guion bajo y puede seguir con más letras, números o
guiones bajos, o letras mayúsculas (tener en cuenta que Python distingue minúscula de mayúscula). No se
permiten espacios y no se pueden utilizar palabras reservadas del sistema.
En la siguiente línea se almacena el número 5 en la variable a1 (el texto previo a este paréntesis está
redactado utilizando economía del lenguaje, pero deberíamos decir crear el objeto 5 guardándolo en una caja
de memoria a la que asignamos la etiqueta a1, pues será más fácil recordar ese objeto por su etiqueta que por
sus coordenadas en la memoria del ordenador. En resumen, en Python cuando se dice "guardar un valor en
una variable" se debe entender "guardar el valor en un objeto y asociar una variable al objeto"):
a1 = 5
En la siguiente orden se suma 7 al contenido de a1 y se guarda en a1, pasando a1 a contener el valor 12 (se
asigna el valor de la expresión de la derecha a la variable que aparece a la izquierda):
a1 = a1 + 7
Palabras reservadas
+ (suma) - (resta)
** (potencia)
Valores booleanos
Números
Enteros
Máquinas de 32 bits: de -231 a 231-1 (de -2 147 483 648 a 2 147 483 647)
Máquinas de 64 bits: -9 223 372 036 854 775 808 hasta 9 223 372 036 854 775 807
long (largo)
Reales
Tienen decimales. Se expresan mediante el tipo float, utilizando 64 bits, de doble precisión. Van de
±2,2250738585072020x10-308 hasta ±1,7976931348623157×10308.
La potencia de 10 se representa con la letra e. Así, el número de Avogadro se escribe 6.023e23 (que
es lo mismo que 6,023·1023).
Cadenas de caracteres
Son secuencias de caracteres (palabras o frases) que siempre van encerradas entre comillas, simples o
dobles (son otros delimitadores):
‘Martes’ "es un día de la semana"
Una cadena se convierte en número (siempre que la cadena tenga caracteres numéricos, de lo contrario dará
error) a tipo entero con la función int() (para lo cual no puede haber punto decimal, de lo contrario
tendríamos error), o real con la función float(). Por ejemplo:
valor = "6"
numero_entero = int(valor)
valor = "6.75"
numero_real = float(valor)
Listas
Las listas son un tipo de colección de datos ordenados (otros son las tuplas y los diccionarios). Son como los
arrays o vectores en otros lenguajes, pero con gran flexibilidad. Pueden contener cualquier tipo de dato
(número, cadena, listas dentro de listas... incluso distintos tipos de datos). Se indican entre corchetes y sus
elementos se separan con comas. El primer elemento de la lista es el 0, no el 1.
Dos ejemplos basados en calificaciones (una lista para tres calificaciones numéricas de un alumno, y la otra
para las cualitativas) pueden ser:
cali_numericas = [6.7, 8.25, 9.0]
cali_cualitativas = ["Insuficiente", "Suficiente", "Aprobado", "Notable",
"Sobresaliente"]
obteniendo el valor 8.25 (recordar que el primer elemento tiene el índice 0).
El número de elementos de una lista se obtiene con la función len(), que también se aplica a cadenas. Así,
para la segunda lista
len(cali_cualitativas)
Para añadir una cuarta calificación, por ejemplo 6.75 a la primea lista, se utiliza el método append:
cali_numericas.append(6.75)
a = range(4)
Asignación de tipos
Input()
Se debe tener en cuenta que todas las entradas por pantalla son de tipo cadena, así si hacemos valor =
input() y tecleamos 5.6 no podremos realizar operaciones con valor tal como valor+5 porque daría
error, pues 5.6 fue almacenado como la cadena "5.6". Para ello deberemos utilizar las funciones int() o
float().
Print()
Escribe en la pantalla el contenido que está entre paréntesis, que puede ser cadena, contenido de una
variable, resultado de expresiones, etc:
nombre = "Juan"
edad = 5 #en años
print(nombre) #salida: Juan
print("Esta persona es ", nombre) #salida: Esta persona es Juan
print("Es ", nombre, " y tiene ", 5*12, " meses") #salida: Es Juan y tiene 60 meses
nombre = "Juan"
edad = 5
Otro ejemplo:
valor1 = 5
valor2 = 6
if
Es una estructura de control que permite que un programa ejecute unas instrucciones cuando se cumpla una
condición.
La estructura es:
if condicion:
aquí va el bloque de órdenes que se ejecutan si la condición es cierta
(true), que pueden ocupar varias líneas.
La condición siempre se evalúa. En caso de que sea verdadera se ejecuta el bloque de órdenes que está
formado por las líneas identadas. Notar que después de la condición hay que escribir el símbolo de dos
puntos. Al pulsar RETURN las siguientes líneas se identan automáticamente. Si no están correctamente
identadas esas líneas no se reconocen como bloque a ejecutar en el caso de que la condición sea verdadera.
El bloque termina con la última línea identada. Si la condición es falsa no se ejecuta dicho bloque y el
programa continúa en la primera línea no identada a partir del if.
Algunos operadores lógicos son ==, >, >=, <, <=, ¡= (distinto).
Tiene dos bloques, el primero se ejecuta cuando la condición es verdadera, el segundo cuando es falsa.
cali_numerica = 6.7
if cali_numerica >=5:
print("Aprobado")
else:
print("Suspenso")
while
Un ejemplo muy sencillo que imprime los números pares hasta el 10:
a = 0
while a <= 8:
a = a + 2
print(a)
print("Fin")
Comprueba el valor de a. Si la condición a <= 10 es verdadera entonces imprime el valor de a. Notar que
cuando a alcanza el valor 8 todavía en inferior a 10 e imprimirá el valor de a + 2. Después a pasa a valer 10
y sale del bloque porque ya no se cumple la condición.
Si en el ejemplo anterior queremos que no se imprima el 6 podemos utilizar la instrucción continue, que
hace que no se ejecuten las restantes líneas del bloque while y se continúe con la siguiente iteracción:
a = 0
while a <= 8:
a = a + 2
if a == 6:
continue
else:
print(a)
print("Fin")
Si en este ejemplo nos olvidamos de escribir la instrucción que aumenta el valor de a, el bucle continuará
ejecutándose indefinidamente (bucle infinito), por lo que es necesario tener cuidado.
A veces un bucle infinito es útil; por ejemplo uno en el que el programa repite todo lo que el usuario
introduzca hasta que se escriba, por ejemplo, salir, haciendo que break salga del bucle while:
print("para salir del bucle teclear salir")
while True:
entrada = input("teclear algo: ")
if entrada == "salir":
break
else:
print("se ha tecleado: ", entrada)
print("ha salido del programa")
El índice, en este caso la variable i recorre el rango entre el límite inferior (15 en este caso) y el superior (19)
adquiriendo sus valores, pero teniendo en cuenta que no se ejecuta el bloque cuando el índice toma el valor
del límite superior. Como índice se suele utilizar la variable i, pero puede ser cualquier otra.
dará error porque presupone (si no se indica) que el paso es +1 y el valor final es inferior al inicial.
En las estructuras for también se pueden utilizar las instrucciones break y continue.
FUNCIONES
Una función es un bloque de código, al que se le asocia un nombre, que realiza una serie de tareas y devuelve
un valor (nulo -None- cuando no se emplea return -es como un procedimiento en otros lenguajes-, o no
nulo cuando se emplea return). Utilizar funciones ayuda a programar y depurar el programa al hacerlo más
legible, y permite reutilizar código, es decir, las funciones evitan la repetición de código.
Las funciones se escribirán al principio del programa para que ya se encuentren definidas en el momento en
que se llamen. Se suele dejar una línea en blanco al final de la definición de cada función por claridad de
lectura del código. Si una función llama a otra, la que llama tiene que declararse después de la llamada. Una
vez terminada la declaración de funciones comienza el cuerpo del programa.
Un ejemplo muy elemental: se define una función que recoge una cadena (en el argumento texto) y la
imprime. El nombre de la función comienza, por manía propia, con f_ para indicar que es una función (no es
necesario, evidentemente). El cuerpo del programa comienza asignando una cadena a la variable valor para
a continuación llamar a la función pasándole el contenido de valor que es asignado a texto:
def f_imprime_algo(texto):
print(texto)
valor = "hola"
f_imprime_algo(valor)
El contenido de la variable del bloque programa, en este caso valor, es visible para la función porque es una
variable global. Así
def f_imprime_algo(texto):
print(valor)
print(texto)
valor = "hola"
f_imprime_algo(valor)
Sin embargo, el contenido del o de los argumentos declarados en la función o variables dentro del cuerpo de
la función no son visibles fuera de ella, es decir, son locales. Así
def f_imprime_algo(texto):
valor2 = "ejemplo"
print(texto)
valor = "hola"
f_imprime_algo(valor)
print(valor2)
imprimirá hola pero dará un error en el momento de ejecutar la última instrucción del programa porque la
variable valor2 no está definida (no tiene contenido, no hace referencia a ningún objeto) fuera del cuerpo de
la función.
A continuación una función que tiene varios parámetros de entrada y devuelve un valor: calcula la media de
tres valores:
def f_media(p1, p2, p3):
valor_medio = (p1 + p2 + p3)/3
return valor_medio
función muy limitada porque solo sirve para un caso muy concreto, pero muestra como return devuelve la
media calculada. Además el cálculo de la media en este caso se podría escribir dentro del cuerpo del
programa y no crear una función, pues ese cálculo consta de una sola instrucción. Sin embargo la función
mejora la legilibilidad del programa.
Mejoramos el programa para que la función que calcula la media admita un número indeterminado de
parámetros (se hace anteponiendo el asterisco al parámetro):
def f_media(*valores):
total = 0
for i in valores:
total = total + i
valor_medio = total/len(valores)
return valor_medio
y un ejemplo completamente general utilizando una lista, datos, en la que se introducen los n datos:
def f_media(valores):
total = 0
for i in valores:
total = total + i
valor_medio = total/len(valores)
return valor_medio
Un ejemplo en el que la función devuelve varios valores: una función que determina la media y la varianza s2
∑(𝑥𝑖 −𝑥̅ )2
= y devuelve los dos valores con una sola llamada a la función:
𝑛
def f_media_varianza(valores):
total = 0
for i in valores:
total = total + i
valor_medio = total/len(valores)
total = 0
for i in valores:
total = (i - valor_medio)**2
s2 = total/len(valores)
return valor_medio, s2
f_imprime()
Python incluye las siguientes funciones de forma predeterminada (es decir, estas funciones siempre están
disponibles):
_import_() delattr() hash() memoryview() set()
Los nombres de las funciones integradas se pueden utilizar para nombrar variables, pero entonces las
funciones ya no estarán disponibles en el programa. Si se eliminan las variables, las funciones vuelven a
estar disponibles.
MÓDULOS
Los programas largos se suelen dividir en fragmentos, almacenando cada uno de ellos en un archivo con la
extensión .py. Cada archivo, con su nombre correspondiente, es un módulo de Python, que suele contener
definiciones de funciones y/o declaraciones de constantes. Estos archivos, que deberán estar en la misma
carpeta que el archivo del programa principal, serán cargados con la instrucción import desde el programa
principal.
Supongamos que creamos un módulo llamado impresion (guardado con el nombre de archivo
impresion.py) que contiene dos funciones, la primera que imprime un texto que le pasamos y la segunda el
cuadrado de un valor numérico que también le pasamos:
def f_imprime_numero_cuadrado(valor):
print(valor**2)
y ahora creamos el programa principal, que guardaremos en la misma carpeta que el módulo anterior con la
extensión también .py:
#programa principal que llama a un módulo
import impresion
cadena = "imprimiendo"
impresion.f_imprime_texto(cadena)
numero = 3.4
impresion.f_imprime_numero_cuadrado(numero)
impresion.f_imprime_texto(cadena)
y
impresion.f_imprime_numero_cuadrado(numero)
Si el nombre del módulo es largo tendríamos que teclear bastante texto para llamar a sus funciones y se
convertiría además en ilegible. Tenemos la alternativa de llamar con, por ejemplo, import impresion as Im, y
la llamada a la función que imprime texto quedaría:
Im.f_imprime_texto(cadena)
Otra forma de importar es cargar la o las funciones que nos interesan del módulo. Para ello se utiliza la
instrucción
from modulo import nombre_funcion # o funciones, separadas por comas
que evita hacer referencia al objeto (módulo) en el que está contenida dicha función, es decir, se elimina el
nombre del objeto y el punto que le sigue. Este método también carga menos instrucciones en memoria, y
por ello es más rápido.
Y en el caso de desear cargar todas las funciones del módulo se podría utilizar la instrucción
from modulo import *
cuyas funciones serían llamadas sin hacer referencia al objeto, como en el caso anterior.
Python instala numerosos módulos que se cargan como se ha descrito anteriormente con la instrucción
import. Por ejemplo, por defecto Python no contiene en su núcleo muchas funciones matemáticas, tal como
la raíz cuadrada, funciones trigonométricas, etc., o constantes como el número pi. Para trabajar con estas
funciones antes hay que cargar el módulo math, que es un módulo del sistema, de la librería estándar (aunque
no del núcleo) de Python y que se instala con el.
∑(𝑥𝑖 −𝑥̅ )2
Así, el cálculo de la media y de la desviación típica de una muestra, s = √ 𝑛−1
, podría ser:
Cuando Python importa un módulo, primero comprueba si existe integrado en el sistema, si no existe
comprueba si existe un archivo con ese nombre, bien creado por el usuario o bien un módulo externo.
A continuación tenemos un código que calcula el tiempo, en segundos, que tarda en contar desde 0 hasta
999, utilizando el módulo integrado time. La instrucción for necesita ejecutar algo, y si no lo encuentra
produce un error, por ello se añade la sentencia pass para que continúe con el siguiente valor del índice:
import time
TiempoInicial = time.time()
for i in range(1000):
pass
TiempoFinal = time.time()
TotalTiempo = TiempoFinal - TiempoInicial
print("El tiempo empleado en segundo es= ", TotalTiempo)
Python también permite realizar cálculo simbólico: derivadas e integrales simbólicas, límites, resolución de
ecuaciones, etc. Para ello se necesita el módulo externo (de terceros, que no está en la librería estándar de
Python, que no se instala cuando se instala Python), SymPy, que puede ser llamado directamente por los
Python online (tal como repl.it –NOTA: en este servicio hay que iniciar sesión para que cargue módulos de
terceras partes-) o QPython de Android, pero necesita instalación previa cuando se trabaja con Python en un
ordenador.
Nota: al ejecutar la orden pip nos puede aparecer el aviso de actualización del programa pip. Para actualizar
se ejecuta python -m pip install --upgrade pip.
Veamos un sencillo ejemplo en el que deseamos obtener las raíces de una ecuación (es de segundo grado
aunque no está escrita en forma polinómica) procedente de un equilibrio químico ácido-base: un ácido débil
de concentración 0,5 M y constante de disociación 1,8·10-5 del que queremos calcular la concentración de
𝑥2
iones hidrógeno en el equilibrio, es decir, x. La condición de equilibrio es entonces 1.8 · 10−5 = 0.5−𝑥, y el
código:
import sympy #importar el módulo SymPy
x = sympy.symbols("x") #hacer que x sea símbolo aplicando el método symbols
exp = x**2/(0.5 - x) - 1.8e-5 #construír la expresión igualada a 0
raices = sympy.solvers.solve(exp, x) #obtener las raíces aplicando el método solvers.solve
print(raices) #imprimir las soluciones
con la diferencia de que el resultado ahora es de tipo conjunto o set (un tipo de datos de Python que no está
ordenado, por tanto no se puede indexar), con sus elementos encerrados entre llaves en vez de corchetes
como en las listas, {-0.00300901349996963, 0.00299101349996962} . Una forma de extraer los
elementos del conjunto consiste en recorrer el conjunto con un bucle for y añadir el elemento a una lista
creada previamente y vacía, por lo que se añadiría el siguiente código:
lista=[] #crea una lista vacía
for i in raices: #recorre los elementos del conjunto raices
lista.append(i) #añade el elemento a la lista
Un ejemplo con dos ecuaciones: calcular el pH de una disolución acuosa de ácido cianhídrico de
concentración c0 = 1,2·10-5 M a 25 ºC, sabiendo que Ka = 6,2·10-10.
Se trata de un ácido muy débil y a muy baja concentración por lo que en los equilibrios hay que tener en
cuenta la autoionización del agua. Si x es la concentración de los iones oxonio procedentes del ácido e y la
procedente del agua, las ecuaciones son:
(𝑥 + 𝑦) · 𝑥
Ka =
c0 − 𝑥
Kw = (𝑦 + 𝑥) · 𝑦
y el código:
import sympy
x, y = sympy.symbols("x, y")
c0 = 1.2e-5
Ka = 6.2e-10
Kw = 1e-14
exp1 = (x + y)*x/(c0 - x) - Ka
exp2 = (y + x)*y - Kw
sol = sympy.solvers.solve([exp1, exp2], [x, y])
print(sol)
obteniendo una matriz (ya redondeados los valores a efectos de presentar aquí) [(-5.6546e-8 + 0.e-28*I,
-7.5647e-8 + 0.e-28*I), (5.6130e-8 - 0.e-28*I, 7.5798e-8 - 0.e-28*I), (2.81289e-5 -
0.e-30*I,-2.8129e-5 + 0.e-28*I)] observando que los términos imaginarios son nulos (10-28 ≈ 0) y que
las soluciones válidas son las del segundo conjunto –o segunda fila en términos de matriz- (hay tres
conjuntos, encerrados en paréntesis cada uno de ellos). Para extraer el valor de x haremos
(que extrae el elemento de índice 0 –recordemos que el índice comienza en 0- del conjunto 1)
El código anterior permite modificar los valores de la concentración inicial y/o de la constante de equilibrio y
obtener rápidamente la solución.
En el siguiente ejemplo se representan tres gráficas utilizando las funciones gráficas del módulo Sympy:
import sympy
x,t=sympy.symbols("x t")
#grafica1 de p1
p1=x**3
sympy.plot(p1)
#grafica2 de p1 con el color por defecto y p2 en rojo
p2=sympy.diff(p1)
p=sympy.plot(p1,p2,(x,-15,15), show=False)
p[1].line_color="r"
p.show()
#grafica3 de una parametrica
ejex=2*t
ejey=-t**2+6*t+10
sympy.plotting.plot_parametric(ejex, ejey, (t,0,10))
que hay que teclear en un IDE que permita ventanas gráficas, tal como el IDE propio de Python, o el de
PyScripter... Cada vez que se invoca la instrucción plot o show se abre una ventana gráfica representando la
gráfica. Para continuar con la siguiente hay que cerrar la que está abierta.
El resultado es:
• Sangrado o identado: con espacios (4 espacios) en lugar de tabuladores. Recuérdese que el identado
es obligatorio para que Python reconozca el bloque a ejecutar.
• Escribir una instrucción por línea (Python permite escribir varias instrucciones por líneas
separándolas con dos puntos).
• Evitar espacios después de un paréntesis, llave o corchete de apertura o antes de uno de cierre, o
antes de un paréntesis de apertura de función.
• Evitar espacios antes de comas, punto y coma y dos puntos, pero poner espacio después de los
mismos.
RECURSOS
Tutoriales de Python
Tutorial de Python:
http://docs.python.org.ar/tutorial/3/index.html#