Está en la página 1de 57

Tema 5:

Programación en Python 3.x


Informática Aplicada a Biología

Departamento de Ciencias de la
Computación e Inteligencia Artificial
Indice

 ¿Por qué Python 3.x?


 Expresiones. Definición de Variables.
 Asignación y Entrada/Salida Básica
 Comandos sobre variables
 Comentarios
 Ejemplos
Bibliografia Beginner Python exercises:
http://www.practicepython.org/

 Material online: Automate the Boring Stuff with Python by Al Sweigart.


Practical programming for total beginners. Free under a Creative
Commons license: https://automatetheboringstuff.com/#toc
 Material online: Traducción al español de la última versión del libro de
Mark Pilgrim sobre Python 3 Dive Into Python 3 - Inmersión en Python
3, por José Miguel González Aguilera
https://storage.googleapis.com/google-code-archive-
downloads/v2/code.google.com/inmersionenpython3/inmersionEnPyth
on3.0.11.pdf
 Material online: Video “Curso Python desde 0”
https://www.youtube.com/playlist?list=PLU8oAlHdN5BlvPxziopYZRd5
5pdqFwkeS (Python 3.6 – Hasta el capítulo 23, más el 33 – Nosotros
no veremos POO)
 Material online: Apuntes de Python, Ernesto Aranda (Universidad de
Castilla-La Mancha) http://matematicas.uclm.es/earanda/wp-
content/plugins/download-monitor/download.php?id=5 (Ojo Python
2.7 – Pero es muy recomendable)
¿Por qué Python 3.x?

 Lenguaje de programación de alto nivel creado a


finales de los 80 por Guido van Rossum
 Lenguaje interpretado cuya filosofía de desarrollo
enfatiza la simplicidad y legibilidad (reusabilidad y
facilidad para el aprendizaje). Filosofía «Pythónica»1
 Su nombre proviene de su afición por los Monty Python
 A día de hoy es uno de los lenguajes oficiales de Google y se
ha utilizado para desarrollar sites tales como Instagram,
youtube y otros productos de google.

1Código “pythónico”: Explícito es mejor que implícito; Simple es mejor que complejo; La legibilidad cuenta; Ahora es
mejor que nunca; Aunque nunca es a menudo mejor que ya mismo; Los casos especiales no son tan especiales como
para quebrantar las reglas; Etc… (https://es.wikipedia.org/wiki/Python#Filosof.C3.ADa)
¿Por qué Python 3.x?

Programming
sep-17 sep-16 Ratings Change
Language
Java 1 1 12687% -5.55%
C 2 2 7382% -3.57%
C++ 3 3 5565% -1.09%
C# 4 4 4779% -0.71%
Python 5 5 2983% -1.32%
PHP 6 7 2210% -0.64%

Programming
2017 2012 2007 2002 1997 1992
Language
Java 1 2 1 1 15 -
C 2 1 2 2 1 1
C++ 3 3 3 3 2 2
C# 4 4 7 13 - -
Python 5 7 6 11 27 -
Visual Basic .NET 6 17 - - - -
2017 postings that contained Third quarter plot for 2017, TIOBE Index 2017, September.
Python from Indeed.com. June 8. Figure from http://redmonk.com/ Figure from https://www.tiobe.com/
Based on the number of skilled engineers world-
Figure from http://www.codingdojo.com/
Global numerical ranking: wide, courses and third party vendors
1 JavaScript, 2 Java, 3 Python, 4 PHP, …
¿Por qué Python 3.x?
 Es software libre, de código abierto y gratuito2, con licencia BSD
(permisiva para empresas).
 Multiplataforma:Windows, MacOS, Linux, etc.
 Multiparadigma: Varios estilos de programación compatibles
(imperativo, orientado a objetos, funcional)
 Integración con otros lenguajes C/C++/R… en ambos sentidos
 Indentación obligatoria (legibilidad, legibilidad, legibilidad…
→ reusabilidad)

GPL (GNU General Public License): Impide que este


software se utilice como parte de software propietario. Obliga a
que siga siendo libre. Un buen ejemplo es el núcleo de Linux.
BSD (Berkeley Software Distribution): Permisiva. Garantiza
el crédito a los autores, pero no que las modificaciones futuras
sigan siendo libres.

2 Es importante no confundir software libre con software gratis, porque la libertad asociada al software libre de copiar, modificar y
redistribuir, no siempre implica gratuidad (https://www.informatica-hoy.com.ar/software-libre-gnu/Tipos-de-licencia-de-Software.php)
¿Por qué Python 3.x?
 Núcleo del lenguaje relativamente pequeño y disponibilidad de un amplio
espectro de magníficas librerías, desarrolladas y continuamente
actualizadas por una comunidad grande y activa, la gran mayoría
disponibles vía repositorios (disponibilidad inmediata online)

 PyPI es el repositorio oficial https://pypi.python.org/pypi

 Sencillez y rapidez para crear programas. Puede tener de 3 a 5 líneas de


código menos que C o Java por cada 10 líneas.

 Aunque Python 2.73 ha sido la versión más utilizada, usaremos Python 3.6
ya que no es que sea el futuro, sino que ya es el presente. No son
compatibles, pero prácticamente todas las librerías ya están
portadas y disponibles para Python 3.x

3 El fin del ciclo de vida de Python 2.7, The End Of Life date (EOL, sunset date), está programado para 2020. Python 2.7 dejará de
tener soporte (incluidas las librerías), y los productos desarrollados a partir de dicha fecha ya no tendrán por qué funcionar en Python 2.7.
Cientos de librerías relacionadas con la

¿Por qué Python 3.x?


biología, química, bioquímica, medicina, etc.
(probar las búsquedas por ‘biol’, ‘chem’,
‘biochem’, ‘genomic’, ‘proteomic’, ‘protein’,
‘molecule’, etc.)

 Quizá la más importante sea Biopython (desarrollada desde 1999).


 Su objetivo principal es el de desarrollar el mayor número posible
de bibliotecas que tengan aplicaciones bioinformáticas y que estén
disponibles para un público lo más amplio posible: Representación
Python Tools for de secuencias biológicas y anotaciones de genomas; Comunicación
Computational
Molecular Biology con las bases de datos biológicos en línea; alineamiento de
1.70, secuencias; cálculo de estructuras proteicas; genética de
released on 10 July 2017.
poblaciones; filogenética e inteligencia artificial; Etc…
Lenguaje Python
Lenguaje Python (Introducción) En Python 3.0 el tipo de
Tipos de Datos dato long desaparece y el
tipo de dato int tiene un
rango ilimitado sujeto a la
memoria virtual disponible
Principales tipos simples
Principales tipos compuestos

Tipo Clase Notas Ejemplo


int Entero Números enteros con un rango ilimitado 53
float Real Coma flotante de doble precisión 3.141592653589793
complex Complejo Parte real e imaginaria (3 + 5j)
bool Booleano Valores verdadero o falso True o False
str Cadena Inmutable, contiene texto "Hola"
unicode Cadena Versión Unicode de str u"Hola"
list Secuencia Mutable, contiene objetos de diverso tipo [4, "Hola", 3.14]
tuple Secuencia Inmutable, contiene objetos de diverso tipo (4, "Hola", 3.14)
set Conjunto Mutable, sin orden, sin duplicados set([4, "Hola", 3.14])
frozenset Conjunto Inmutable, sin orden, sin duplicados frozenset([4, "Hola", 3.14])
dict Diccionario Pares de clave:valor {"clave1":4, "clave2":"Hola"}
Tipos de Datos (tipado)
 Todos los tipos de datos son objetos en python: id, type, valor
type(dato), devuelve el tipo
id(dato), devuelve su identificador (un entero único)

 Dinámicamente tipado: el tipo se auto-asigna en tiempo de


ejecución según el valor utilizado
 Fuertemente tipado: opera transformando todos los tipos al
mismo según jerarquía de los involucrados en la operación, que
va de enteros a reales y luego a complejos (bool -> int -> float
-> complex)
 Se pueden forzar los tipos para obtener el resultado con el tipo
deseado:
Usando bool(dato), int(dato), float(dato),
str(dato), etc., que convierten a sus respectivos tipos.

O especificándolo así para que afecte en la operación,


Ej., 3. ó 3.0 (tipo real en ambos) ó 5+0j (tipo complejo)…
Construcción de “expresiones”
 Aunque crearemos nuestros programas en un
editor, las operaciones que queremos realizar
podemos probarlas en la terminal de Ipython
(In[ ]:)

 Justo tras escribir la operación, y pulsar


<ENTER>, nos devuelve el resultado
(Out[ ]: answer).

 In [1]: 3 + 5 <ENTER>
 Out[1]: 8
Expresiones:
Mostrar resultados desde un programa
Una breve introducción a ‘print’

 Aunque Ipython nos muestra a través de Out[ ] los


resultados de las expresiones, en un programa no se
mostrará nada que no se especifique que debe salir por
pantalla. En éste sentido debemos diferenciar muy bien
entre programar y probar instrucciones en Ipython.
Expresiones:
Mostrar resultados desde un programa

• Por ahora, usaremos la función ‘print’ (propia del


lenguaje) en su modo más sencillo para mostrar los
resultados de un programa de las siguientes dos
maneras:
1. print("texto") ó print('texto')
para mostrar un mensaje de texto
2. print(expresión)
para mostrar un resultado
• Por comodidad, en lo que sigue mostraremos los
resultados de las expresiones y funciones como el
resultado mostrado en Ipython, teniendo en cuenta que
en un programa tendríamos que usar ‘print’ cuando
queramos mostrar cualquier resultado
Expresiones: Operaciones y precedencia
Operación Símbolo Ejemplo Resultado Precedencia
Suma + 6+2 8 4
Resta - 6–2 4 4
Multiplicación * 6*2 12 2

División Real / 7/2 3.5 2

División Entera // 6.5 // 2 3.0 2


Módulo % 5%2 1 3
Potenciación ** 6 ** 2 36 1
 Precedencia: Orden establecido para evaluar las
operaciones de una expresión cuando no hay
paréntesis.
 Si se quiere forzar un determinado orden se deben
utilizar paréntesis, que siempre se evalúan primero

4/4+6 = 7.0 4/(4+6)= 0.4


3**5 * 2 = 486 3**(5 * 2) = 59049
Expresiones: Operaciones y precedencia
Ejemplo Descripción
In [1]: 3 + 6/2 Se calcula inicialmente 6/2, división real, ya que / tiene
Out [1]: 6.0 más precedencia que +.

In [1]: (3 + 6)/2.0 Se obtiene primero (3+6) ya que los paréntesis tienen


Out [1]: 4.5 mayor precedencia que cualquier otro operador y, por
tanto, lo que haya dentro se evalúa antes.

In [1]: 27**(1//3)+32**2 Se calcula el resultado de la expresión de dentro de los


Out [1]: 1025 paréntesis. En este caso, (1//3), división entera.
Seguidamente se ejecutan las dos potencias, (27**0) y
(32**2), y finalmente la suma.

In [1]: 5**2*4+5 Aplicamos directamente el orden de precedencia: en


Out [1]: 105 primer lugar se evalúa la potencia (5**2), seguidamente,
el producto (25*4) y finalmente la suma (100+5).
Expresiones: Uso de funciones
 En las expresiones podemos introducir
funciones matemáticas

 Nos obstante, el lenguaje ofrece muy pocas. La


gran mayoría, como por ejemplo la del cálculo
de la raíz cuadrada (sqrt), no están disponibles
ya que el lenguaje se apoya en la gran cantidad
de librerías existentes:

In [1]: 3 + sqrt(25)
NameError: name 'sqrt' is not defined
Expresiones: Uso de funciones

 Ésta, como muchísimas otras funciones para


cálculo matemático se encuentran en diversas
librerías como math (para escalares), cmath
(para números complejos), NumPy (para
vectores), etc.

 En lo que sigue veremos cómo importar


librerías (o módulos) y un listado de las
funciones más utilizadas junto con la librería en
la que se encuentran.
Introducción breve al uso de librerías

Expresiones: Uso de funciones


El espacio de nombres de un
módulo, es el conjunto de
nombres por los cuales se
pueden invocar los objetos o
funciones disponibles

• Los paquetes o librerías pueden incluir distintos


módulos. Podremos importar tanto las librerías
completas, como en particular cada módulo (incluso
podrémos importar sólo funciones u objetos
concretos).
Introducción breve al uso de librerías
Expresiones: Uso de funciones

• Existen principalmente tres formas de importar el


espacio de nombres de una librería o módulo:
(todas las instrucciones import se incluirían al principio de nuestro programa)

1. import module
module.fun() #(para usar la función fun en el programa)
2. from module import *
fun() #(para usar la función fun en el programa)
3. from module import fun1, fun2 #(sólo importaría esas dos)

fun1() ó fun2() #(para usar esas fuciones en el programa)

• Para conocer todas las funciones a las que tenemos


acceso dentro del módulo importado disponemos de la
orden dir(module).
Introducción breve al uso de librerías Se suelen renombrar los
módulos con nombres muy
Expresiones: Uso de funciones cortos. Usualmente con 2 o 3
letras del nombre inicial

• Se puede usar ‘as’ para renombrar un módulo, función u objeto.


Ejemplos:
1. import module as md Usaremos ésta forma
md.fun() #(para usar la función fun en el programa) de importar para
2. from module import fun1 as f1 evitar problemas de
f1() #(para usar fun1 nombrándola como f1) nombres

• Es posible que haya más de un módulo que use la misma función,


como es el caso de la raíz cuadrada, que aparece tanto en el
módulo math como en el módulo cmath. De manera que podemos
encontrarnos situaciones como la siguiente:
import math
import cmath
from cmath import *
math.sqrt(-1)

ValueError: math domain error
from math import *

sqrt(-1)
cmath.sqrt(-1)

Out[4]: 1j
Expresiones: Uso de funciones
Recomendación: No usar cmath si no es para cálculo con números complejos. Usar
math respecto a numpy si se va a trabajar con escalares, y numpy respecto a math si con
vectores. Cada una es más mucho más rápida que la otra en dichos casos. Incluso puede
interesar usar ambas (como en el ejemplo 1 de la transparencia anterior) según el tipo de
cálculo a realizar.
Función Descripción / Librería Ejemplo (import math as mt)
abs(x) Valor absoluto In [1]: abs(-35)
Propia del lenguaje Out [1]: 35
sqrt(x) Raíz cuadrada de un número In [1]: mt.sqrt(81)
math, cmath, numpy Out [1]: 9.0

exp(x) Exponencial (ex) In [1]: mt.exp(5)


math, cmath, numpy Out [1]: 148.4131591025766

log(x) Logaritmo en base e (ln) In [1]: mt.log(1000)


(log10(x) en base 10) Out [1]: 6.907755278982137
math, cmath, numpy
log2(x) Logaritmo en base 2 In [1]: mt.log2(16) Ojo: Devuelven un
math, numpy Out [1]: 4.0 tipo real. Si se quiere
entero habría que
forzarlo. Ej:
pow(x,y) Devuelve x**y (potenciación) In [1]: mt.pow(4,2) int(mt.pow(4,2))
math (power(x,y) en numpy) Out [1]: 16.0
Expresiones: Uso de Vea las funciones degrees(x)
y radians(x) de math y numpy

funciones para las conversiones radianes-


grados

Función Descripción / Librería Ejemplo (import math as mt)


factorial(x) Factorial de un entero positivo (x!) In [1]: mt.factorial(5)
math Out [1]: 120

sin(x) Seno del ángulo x (en radianes) In [1]: mt.sin(mt.pi/6)


math, cmath, numpy Out [1]: 0.49999999999999994

cos(x) Coseno del ángulo x (en radianes) In [1]: mt.cos(mt.pi/6)


math, cmath, numpy Out [1]: 0.8660254037844387

tan(x) Tangente del ángulo x (en radianes) In [1]: mt.tan(mt.pi/6)


math, cmath, numpy Out [1]: 0.5773502691896257

hypot(a,b) Hipotenusa de un triángulo In [1]: mt.hypot(3,4)


rectángulo dados sus catetos Out [1]: 5.0
math, numpy
Expresiones: Uso de Vea las funciones degrees(x)

funciones y radians(x) de math y numpy


para las conversiones radianes-
grados

Función Descripción / Librería Ejemplo (import math as mt)


factorial(x) Factorial de un entero positivo (x!) In [1]: mt.factorial(5)
math Out [1]: 120

sin(x) Seno del ángulo x (en radianes) In [1]: mt.sin(mt.pi/6)


math, cmath, numpy Out [1]: 0.49999999999999994

cos(x) Coseno del ángulo x (en radianes) In [1]: mt.cos(mt.pi/6)


math, cmath, numpy Out [1]: 0.8660254037844387

tan(x) Tangente del ángulo x (en radianes) In [1]: mt.tan(mt.pi/6)


math, cmath, numpy Out [1]: 0.5773502691896257

hypot(a,b) Hipotenusa de un triángulo In [1]: mt.hypot(3,4)


rectángulo dados sus catetos Out [1]: 5.0
math, numpy
Expresiones: Uso de funciones
round(x,n) –
Función Descripción / Librería Ejemplo (import math as mt)  si n es positivo, redondea
(import numpy as np) a n decimales
round(x) Redondea al entero más In [1]: round(7.53) In [1]: round(8.7346,2)
próximo Out [1]: 8 Out[1]: 8.73
Propia del lenguaje
 si n es negativo,
fix(x) Redondea hacia el entero In [1]: np.fix(13/5) redondea a las decenas,
más cercano a cero Out [1]: array(2.0) centenas, etc., según el n
numpy #en la práctica 2.0 indicado
ceil(x) Redondea hacia el entero In [1]: mt.ceil(11/5) In [1]: round(1258.7,-2)
más cercano a +∞ Out [1]: 3 Out[1]: 1300.0
math, numpy
floor(x) Redondea hacia el entero In [1]: mt.floor(-9/4)  Más funciones
más cercano a -∞ Out [1]: -3
math, cmath y numpy:
math, numpy
sinh(x), cosh(x), tanh(x)
trunc(x) Devuelve la parte entera In [1]: mt.trunc(45.6634)
math, numpy Out [1]: 45 math y cmath:
asin(x), acos(x), atan(x)
fmod(x,y) Devuelve el resto de la In [1]: mt.fmod(13,5)
división de x entre y Out [1]: 3.0 numpy:
math, numpy arcsin(x), arccos(x),
arctan(x)
Expresiones: Constantes
 Constantes: números muy comunes que
suelen referenciarse bajo un nombre
concreto.
Constante Descripción / Librería Ejemplo (import math as mt)
pi Número π In [1]: mt.pi
math, cmath, numpy Out [1]: 3.141592653589793

e Número de Euler e In [1]: mt.e


math, cmath, numpy Out [1]: 2.718281828459045
Inf Infinito (1/0) In [1]: mt.inf
math, cmath, numpy Out [1]: inf

nan Indeterminación (0/0) In [1]: mt.nan


(Not a Number) Out [1]: nan
math, cmath, numpy
Expresiones: Constantes
Constante Descripción / Librería Ejemplo (import sys)
float_info Información sobre la In [1]: sys.float_info
preción y representación Out [1]: sys.float_info(max=1.7976931348623157e+308,
del tipo real max_exp=1024, max_10_exp=308, min=2.2250738585072014e-
308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53,
sys epsilon=2.220446049250313e-16, radix=2, rounds=1)

float_info.min Menor número real In [1]: sys.float_info.min


representable Out [1]: 2.2250738585072014e-308
sys
float_info.max Mayor número real In [1]: sys.float_info.max
representable Out [1]: 1.7976931348623157e+308
sys
float_info.epsilon Distancia entre 1 y el In [1]: sys.float_info.epsilon
siguiente número punto Out [1]: 2.220446049250313e-16
flotante de doble
precisión más pequeño
sys
Expresiones: Operadores Relacionales

 Permiten comparar dos escalares, matrices, vectores,


variables o resultados de evaluar una expresión o
función.
 Se pueden incluir como parte de cualquier expresión
matemática
 El resultado es de tipo Booleano. False si es falso y True
si es verdadero.
◦ Igual ==
◦ Distinto !=
◦ Mayor que >
◦ Menor que <
◦ Mayor o igual >=
28
◦ Menor o igual <=
Expresiones: Operadores
Relacionales

Ejemplo:

In [1]: mt.pi != 3.1416, mt.pi != 3.141592653589793


Out [1]: (True, False)

In [1]: mt.pi == 3.1416, mt.pi == 3.141592653589793


Out [1]: (False, True)

29
Expresiones: Precisión de los resultados
Material complementario - http://www.techkrowd.com/articulo.php?codigo=39 (Vídeo explicando los tipos
básicos, los problemas de precisión y posibles soluciones: tipos importados Decimal y Fraction)

• Python trabaja internamente con la máxima


precisión posible, independientemente de cómo
se muestren los resultados

• La precisión para números reales es de 53


dígitos. Eso significa que los cálculos en muchas
ocasiones serán aproximados (Ej. 1/3.0).Véanse
los posibles problemas de redondeo en el
siguiente enlace, (sección - representación de
números decimales en binario)
http://www.mclibre.org/consultar/python/lecciones/pyth
30 on_operaciones_matematicas.html
Expresiones: Precisión de los resultados
Material complementario - http://www.techkrowd.com/articulo.php?codigo=39 (Vídeo explicando los tipos
básicos, los problemas de precisión y posibles soluciones: tipos importados Decimal y Fraction)

• Recuerde que en Ipython se puede modificar la


precisión mostrada en ‘Out[]:’ mediante la
función mágica %precision.

• En Ipython (y sólo en Ipython sin afectar en


nada a los programas), una vez establecido, los
resultados directos (resultados de expresiones)
se mostrarán según el formato elegido, hasta
nuevo cambio (aunque internamente sigue
31
trabajando a máxima precisión).
Definición de variable
 Una variable es una estructura de datos que
permite almacenar un valor o conjunto de
valores.
 Es equivalente a una "variable" en el contexto
matemático.
 Una variable corresponde con un área
reservada de la memoria principal del
ordenador
 El tamaño del área reservada dependerá del
tipo del dato que se vaya a almacenar
Definición de variable
 El ámbito de una variable puede ser:
◦ Local: cuando la variable sólo puede ser accedida por un subconjunto de
instrucciones del programa:
 Un bloque condicional
 Un bucle
 Una función…
◦ Global: cuando la variable puede ser accedida por cualquier instrucción
del programa
 Una variable tiene asociado un nombre o identificador
◦ El nombre es único dentro del “ámbito” o “alcance” de la variable
◦ combinación de letras, numeros y “_”.
◦ No empieza con número
◦ Pueden tener cualquier longitud.
◦ Sensible a mayúsculas / minúsculas
◦ Existen “palabras reservadas”
 Se suelen usar letras mayúsculas para nombrar constantes,
aunque las que emplea Python suelen ser minúsculas
(AVOGADRO, NUM_MESES).
Definición de variable
Reglas de definición de variables:
• No se pueden usar como nombres de variables las
siguientes palabras reservadas de Matlab:

In [1]: from keyword import iskeyword, kwlist

In [2]: kwlist
Out[2]: ['False', 'None', 'True', 'and', 'as', 'assert', 'break',
'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for',
'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not',
'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

In [3]: iskeyword('try') # ó try is None #comprobación


Out[3]: True
Definición de variable
Reglas de definición de variables:
• No es conveniente utilizar como nombres de variables
nombres de funciones. Si se hace así, no se podrán
utilizar como funciones.
Ejemplo:
Si no se tiene claro, se puede/debe comprobar
In [1]: from math import * así (tras importar todas las librerías que
usaremos en nuestro programa en el
In [2]: import math as mt intérprete)

In [3]: sin = 8

In [4]: sin(3.1416)
In [3]: sin #comprobación
Out[3]: <function math.sin> 
TypeError: 'int' object is not callable

In [5]: mt.sin = 8
In [4]: mt.sin #comprobación
Out[4]: <function math.sin> 
In [6]: mt.sin(3.1416)
TypeError: 'int' object is not callable
In [4]: sen #comprobación
NameError: name 'sen' is not defined 
Definición de variable
 Una variable es de un tipo de dato concreto
◦ Un número (entero, real, etc.)
◦ Una cadena de caracteres o texto
◦ Un dato Booleano
◦ Una lista
◦ …

 El tipo de dato de una variable puede ser complejo, i.e., puede


almacenar varios valores de diferentes tipos de datos
◦ Ejemplo: una lista de objetos, donde cada objeto es un dato
“primitivo” (numérico, texto, dato Booleano)
◦ Recuerde: Python es dinámicamente tipado, por lo que reconoce
el tipo en tiempo de ejecución al crear la variable
◦ Recuerde: Todo en Python es un objeto, incluido los tipos, por lo
que a una variable también se le pueden aplicar los comandos
type() e id().
Variables (Creación)
• Por lo tanto, las variables son nombres que reciben los
valores que se van calculando, con objeto de poder
utilizarlos en siguientes cálculos.

• No necesitan declararse previamente, sino simplemente


inicializarlas mediante una operación de asignación para
poder utilizarlas en cualquier tipo de expresión:

In [1]: resultado = 3 + 5
In [2]: cuadrado = resultado ** 2
In [3]: resultado, cuadrado #para ver los valores en Ipython
Out[3]: (8, 64)
Operación de Asignación
Antes de usar una variable, es necesario darle
algún valor. Es decir "inicializarla".
La forma más directa es mediante una sentencia
de asignación.
nro = 45
LADO DERECHO:
una variable, un literal o
LADO IZQUIERDO: Operador de una expresión compleja.
una variable Asignación

Forzar un tipo (importante):


nro = <tipo> (<expresión>)
Ejemplo: nro = float (45)
Asignaciones múltiples
Se pueden inicializar tantas variables a la vez como
se quiera:

v1, v2, v3, v4, … = 45, 3.2, -1, 5.6/0.5, …

Ejemplo:
In [1]: a, b, c = abs(-3.2), 88, 0.147
In [2]: a
Out[2]: 3.2
¡¡¡Cuidado con la legibilidad !!!
In [3]: b
Out[3]: 88
In [4]: c
Out[4]: 0.147
Regla de Asignación
Una variable en el lado derecho de una sentencia
de asignación debe estar definida (existir) antes de
que la sentencia de asignación se ejecute. Hasta
que un programa le da un valor a una variable, esa
variable no tiene valor.
La variable x no tiene ningún valor. No se
sabe qué hacer y se produce el siguiente
Ejemplo: ERROR!!!
y = x + 1 NameError: name 'x' is not defined

En la izquierda de una de asignación solo pueden existir


variables. La siguiente expresión no es valida:
Valor_Neto - Tasas = 34015
Operación de Asignación
Cuando se ejecuta una operación de asignación, primero se
evalúa la expresión del lado derecho y luego se almacena el
valor resultante en la variable indicada en el lado izquierdo.

Memoria
In [1]: num1 = 45
In [2]: num2 = 11 num1 45
In [3]: suma = num1 + num2
In [4]: suma num2 11
Out[4]: 56

suma 56
Regla de Asignación

La operación de asignación es una operación


destructiva: el valor almacenado en una variable se
pierde o se destruye y se sustituye por el nuevo valor
en la sentencia de asignación. Aunque en realidad no se
destruye si también está almacenado en otra variable
No se duplican
objetos

In [1]: a = 4 In [7]: a = 21
In [2]: b = 5 En la instrucción In[5] In [8]: id(a)
In [3]: id(a) se destruye el objeto 5
Out [8]: 1672670288
Out[3]: 1672669744 In [9]: id(b)
In [4]: id(b) Out [9]: 1672669744
Out[4]: 1672669776 In [10]: b
In [5]: b = 4 Out[10]: 4
In [6]: id(b) En realidad son el mismo
Out[6]: 1672669744 objeto. Python reutiliza
En la instrucción In[7] no se destruye el objeto 4
los objetos ya existentes
para ahorrar memoria.
Variables: Construcción de Expresiones
 Las variables pueden ser usadas para construir
expresiones teniendo en cuenta el valor que hay en
ellas al igual que vimos para los valores numéricos en
anteriormente
(haciendo uso de operadores aritméticos, relacionales, etc.)
In [1]: x = 2**3 In [6]: x = 10
In [2]: x In [7]: a = 3.25
Out[2]: 8 In [8]: b = 3
In [1]: a = 2 * 3 In [9]: y = a*x + b
In [3]: a In [10]: y
Out[3]: 6 Out[10]: 35.5
In [4]: y = a / x
In [5]: y
Out[5]: 0.75
Variables: Construcción de Expresiones
 También se pueden utilizar como argumentos
de las funciones.
In [1]: import math as mt
In [2]: x = 2.18
In [3]: y = mt.sin(x) * mt.cos(mt.pi * x)
In [4]: y
Out[4]: 0.6924366647911679

In [5]: angulo = 0.75


In [6]: resultado =
mt.sin(angulo)**2+mt.cos(angulo)**2
In [7]: resultado
Out[7]: 1.0
44
Función de salida (avanzado)
Recordatorio
print("texto") ó print('texto') Muestra por pantalla dicho texto
print(expresión) Muestra por pantalla el resultado de dicha expresión
Téngase en cuenta que el texto entrecomillado (tipo de datos string) es per se una expresión. Por lo
que el primer uso es simplemente un caso particular de la segunda.

 De manera aún más general, se pueden combinar varias


expresiones en una misma línea:
 print(expresión1, expresión2, …, sep='', end='')
sep='' – (opcional) Si no se incluye separa cada expresión por un espacio
end='' – (opcional) Si no se incluye se produce un salto de línea al final
Caracteres especiales:
\n salto de línea
\t tabulación
Ejemplo: \\ \
In [1]: print('Resultado 1/3', 1/3, 'valor real\n\tTexto tabulado', sep=' - ')
Resultado 1/3 - 0.3333333333333333 - valor real
Texto tabulado
Función de salida (avanzado)
 También se puede usar la concatenación de texto (tipo
string) junto con la conversión de tipos numéricos a texto:

Ejemplo:
In [1]: print('Resultado 1/3 - ' + str(1/3) + ' - valor real\n\tTexto tabulado')
Resultado 1/3 - 0.3333333333333333 - valor real
Texto tabulado
 O incluso usar el formateo del texto str.format()
d número decimal
Ejemplos: f número real
In [1]: print('Resultado 1/3 – {} – Resultado – {}'.format(1/3, 1/5))
Resultado 1/3 – 0.3333333333333333 – Resultado – 0.2

In [2]: print('Resultado 1/3 – {0:5.3f} – Resultado – {1:5d}'.format(1/3, 25))


Resultado 1/3 – 0.333 – Resultado – 25

In [3]: print('Resultado 1/3 – {1:8d} – Resultado – {0:7.4f}'.format(1/3, 25))


Resultado 1/3 – 25 – Resultado – 0.3333
Función de entrada Ojo! Aunque en Ipython cada input hace un
salto de línea antes de mostrar el mensaje, ésto
no ocurre en el programa final al ejecutarlo
desde ventana de comandos

var = input() ó var = input("texto") ó var = input('texto')

Muestra por pantalla el mensaje (si se le proporciona) y


queda esperando a que el usuario introduzca un texto, que
quedará almacenado en la variable var
 Será necesario forzar el tipo según el tipo de dato con el
que se desee trabajar Valor introducido
por alguien que está
ejecutando el
Ejemplos: programa
Programa (en fichero .py) Al ejecutarlo

val = int(input('Deme un valor: ')) Deme un valor: 5


print('Su cuadrado es', a**2) Su cuadrado es 25
val = int(input('Deme un valor: ')) Deme un valor: 5.5
print('Su cuadrado es', a**2) ValueError: invalid literal for int() with
base 10: '5.5'
val = float(input('Deme un valor: ')) Deme un valor: 5.5
print('Su cuadrado es', a**2) Su cuadrado es 30.25
val = input('Un objeto: ') Un objeto: naranja
print('Su objeto es', val) Su objeto es naranja

Asumiremos que el usuario introduce los valores correctamente según lo que se le


esté pidiendo. En el futuro veremos como controlarlo con excepciones
Varias instrucciones en la misma línea
• Con ; se permite poner varias instrucciones en la misma
línea: instrucción; instrucción; …

• También se puede escribir una instrucción en varias


líneas si se tabula a partir de la primera:

print('Su objeto es',


val)

48
Comentarios
• Comienzan por un carácter #: #Comentario en línea

• El texto después de ese carácter no es interpretado por


Python.

• Sirven para hacer indicaciones o aclaraciones útiles.

• Si van a ocupar más de una línea se encierran entre


grupos de 3 comillas dobles
"""
comentarios
más comentarios
"""

49
Python: Primeros programas y Ejemplos

A partir de aquí abandonaremos la notación


de Ipython para mostrar los resultados

Se mostrarán trozos de código que irían a


los scripts .py y los resultados que
tendríamos cuando alguien ejecute dicho
programa mediante ventana de
comandos: python programa.py

50
Ejemplos de uso
Ejemplo (asumimos import math as mt):

sen(2ɸ) para ɸ = 3π.


theta= 3*mt.pi;
print(mt.sin(2*theta))
Al ejecutarlo
-7.347880794884119e-16

sen-1(1).
print(mt.asin(1))
Al ejecutarlo
1.5707963267948966 51
Ejemplo de uso
Ejemplo (asumimos import math as mt):

• cos(45º)

print(mt.cos(45*mt.pi/180))
Al ejecutarlo
0.7071067811865476

print(mt.cos(mt.radians(45)))
Al ejecutarlo
0.7071067811865476

52
Ejemplo: Temperaturas
Enunciado:
Un objeto con una temperatura inicial T0 se introduce
en el instante t dentro de una cámara que tiene una
temperatura constante Ts. El objeto experimenta un
cambio de temperatura que se corresponde con la
ecuación:
− kt
T = Ts + (To − Ts )e ,
donde T es la temperatura final en Fahrenheit del objeto
en el instante t en horas y k una constante

53
Ejemplo: Temperaturas
Enunciado (continuación):
• Una lata de un refresco olvidada en un coche a una temperatura de
120ºF. Se introduce en una despensa que tiene en su interior una
temperatura de 38ºF. Calcular la temperatura de la lata después de
tres horas considerando k=0.45, redondeando el resultado al grado
más próximo.
import math as mt

K = 0.45 #cte. del entorno


temp_ini = float(input('Temperatura inicial: '))
temp_amb = float(input('Temperatura ambiente: '))
t = float(input('Tiempo transcurrido: '))

temp_fin = temp_amb + (temp_ini - temp_amb) * mt.exp(-K*t)


print('Temperatura tras ', t, ' hora/s: ', temp_fin, 'ºF', sep="")
input('Pulse enter para terminar...') Así lo podemos ejecutar con doble
clic desde el explorador de
Al ejecutarlo Windows sin que la ventana se
Temperatura inicial: 120 cierre antes de ver los resultados.
Temperatura ambiente: 38 Alternativa:
Tiempo transcurrido: 3 import os
Temperatura tras 3.0 hora/s: 59.257701372963105ºF os.system('PAUSE')
Ejemplo: Distancias
Enunciado:
La distancia d de un punto (x0, y0) a una recta Ax +By +C =0 viene dada
por la fórmula: Ax0 + Byo + C
d=
A2 + B 2
Calcula la distancia del punto (2,-3) a la recta 3x+5y-6=0.
import math as mt

print('Distacia (x0,y0) a la recta Ax+By+C')


x0 = float(input('Coordenada x0: '))
y0 = float(input('Coordenada y0: '))
a = float(input('Termino A: '))
b = float(input('Termino B: '))
c = float(input('Termino C: '))

d = abs(a*x0 + b*y0 + c) / mt.sqrt(a**2 + b**2)


print('Distancia entre (', x0, ', ', y0, ') y la recta ', a, 'x + ', b, 'y + ', c, ': ', d, sep="")
input('Pulse enter para terminar...')

Al ejecutarlo
Distacia (x0,y0) a la recta Ax+By+C
Coordenada x0: 2
Coordenada y0: -3
Termino A: 3
Termino B: 5
Termino C: -6
Distancia entre (2.0, -3.0) y la recta 3.0x + 5.0y + -6.0: 2.5724787771376323
Ejemplo: Energías
Enunciado:
La energía emitida por un terremoto de escala M en la Escala Richter viene dada por:
3
M
E = E0 e 2

donde E es la energía emitida por el terremoto y E0 = 104.4 Julios es una constante


(energía de un terremoto más pequeño de referencia). Determina cuántas veces más
energía emite un terremoto que registra 7.2 en la Escala Richter respecto a otro que
registra 5.3.
import math as mt

E0 = 10**4.4;
m1 = float(input('Magnitud del primer terremoto: '))
m2 = float(input('Magnitud del segundo terremoto: '))

E1 = E0 * mt.exp(3/2 * m1)
E2 = E0 * mt.exp(3/2 * m2)
print('La proporción existente entre el primer y segundo terremoto es:', E1/E2)
input('Pulse enter para terminar...')

Al ejecutarlo
Magnitud del primer terremoto: 7.2
Magnitud del segundo terremoto: 5.3
La proporción existente entre el primer y segundo terremoto es: 17.287781840567664
Ejemplo: Materia
Enunciado:
El sol irradia 385 x 1024 J/s, los cuales se generan mediante reacciones
nucleares que convierten la materia en energía. Dado que E= mC2 y que C,
la velocidad de la luz es 3.0 x 108 m/s, calcula cuánta materia se debe
convertir en energía para producir la cantidad de radiación
correspondiente a un día.

import math as mt

ENERGIA_SG = 385e24; C = 3e8


HORAS_DIA = 24; SG_HORA = 3600
dias = float(input('Indique el número de días para el cálculo: '))

e = dias * HORAS_DIA * SG_HORA * ENERGIA_SG


m = e / C**2

print('En', dias, 'dia/s se transforma la siguiente cantidad de materia:', m)


input('Pulse enter para terminar...')

Al ejecutarlo
Indique el número de días para el cálculo: 1
En 1.0 dia/s se transforma la siguiente cantidad de materia: 369600000000000.0

También podría gustarte