Licencia Creative Commons
<span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Python en ciencias e ingeniería: tutoriales basados en ejemplos</span> por <span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">Sergio Gutiérrez Rodrigo y Adrián Navas Montilla</span> se distribuye bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional.


Programa de Recursos en Abierto en la UZ (2022)

Python en ciencias e ingeniería: tutoriales basados en ejemplos

Universidad de Zaragoza

PRAUZ-739

Ejemplos de introducción al lenguaje de programación Python mediante Jupyter


Variables

In [ ]:
a = 42        #entero
b = 3.1416    #real
bexp = 3.14e0 #exponencial
c = 3+7j      #complejo
d = "Ejemplo de cadena de caracteres " #Cadena de caracteres

#Imprimir por pantalla
print (a,b,bexp,c,d)

#Tipos de variables
print (type(a))
print (type(b))
print (type(c))
print (type(d))
42 3.1416 3.14 (3+7j) Ejemplo de cadena de caracteres 
<class 'int'>
<class 'float'>
<class 'complex'>
<class 'str'>

Operadores

In [ ]:
a,b=3.0,2.0

suma=a+b
resta=a-b
multip=a*b
div=a/b
div_entera=a//b
exp=a**b

print('a=',a,'b=',b)
print("a+b=",suma)
print("a-b=",resta)
print("a*b=",multip)
print("a/b=",div)
print("División entera a/b=",div_entera)
print("a^b=",exp)
a= 3.0 b= 2.0
a+b= 5.0
a-b= 1.0
a*b= 6.0
a/b= 1.5
División entera a/b= 1.0
a^b= 9.0

Cadena de caracteres

In [ ]:
a= "Hola\n"
b = "\t Este es un ejemplo de cadena de caracteres \n"
c = """        Es posible escribir saltos de linea sin necesidad de utilizar los códigos 
de escape"""

print(a,b,c)

d= a + b #concatenación
e = " repite "
f = 3*e #repetición
g = e*3 #equivale a lo anterior

print(d,f,g)
Hola
 	 Este es un ejemplo de cadena de caracteres 
         Es posible escribir saltos de linea sin necesidad de utilizar los códigos 
de escape
Hola
	 Este es un ejemplo de cadena de caracteres 
  repite  repite  repite   repite  repite  repite 

Control de flujo

  • Sentencias condicionales: if-elif-else
  • Secuencias iterativas: bucles
    • Bucles for...in
    • Bucles while
In [ ]:
# Usos del if
'''
Ejemplo: ¿contiene la variable un número negativo?
'''
print("Ejemplo 1: usos del if")
a=-27.0
if(a<0.0): #Los paréntesis no son necesarios
    print(a," es un número negativo.")
elif (a==0):
    print(a," es cero.")
else:
    print(a," es un número positivo.")

'''
Ejemplo: utilizando la función isintance() nos preguntamos si la variable
a contiene un número real
'''
print("\n Ejemplo 2: usos del if")
a=37.0
print("Tipo de variable=",type(a))
if(isinstance(a,float)):
    print(a," es un número real")
else:
    print(a," no es un número real")
Ejemplo 1: usos del if
-27.0  es un número negativo.

 Ejemplo 2: usos del if
Tipo de variable= <class 'float'>
37.0  es un número real
In [ ]:
#Bucle for
'''
Ejemplo: utilizando el método range proporciona una lista de números,
comprobamos si un número es postivo o negativo
'''
print("Ejemplo 1: bucle for")

rango=list(range(-5,5)) # Más adelante entenderemos qué hace el método list

print("De los siguientes números ",rango,"comprobamos cuáles son negativos")
for a in range(-5,5):
   if(a<0.0): #Los paréntesis no son necesarios
    print(a," es un número negativo.")   

'''
Ejemplo: una forma compacta de escribir el mismo loop..
'''   
print("\n Ejemplo 2: bucle for")
 
[print(a," es un número negativo.") for a in range(-5,5) if(a < 0.0)]

'''
Ejemplo: Python permite bucles en cualquier objeto que sea iterable
'''   
print("\n Ejemplo 3: bucle for")

lista = ["manzana","pera","gato"] #Más adelante veremos qué tipo de dato representa lista

for palabra in lista:
    print(palabra)
Ejemplo 1: bucle for
De los siguientes números  [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4] comprobamos cuáles son negativos
-5  es un número negativo.
-4  es un número negativo.
-3  es un número negativo.
-2  es un número negativo.
-1  es un número negativo.

 Ejemplo 2: bucle for
-5  es un número negativo.
-4  es un número negativo.
-3  es un número negativo.
-2  es un número negativo.
-1  es un número negativo.

 Ejemplo 3: bucle for
manzana
pera
gato
In [ ]:
# Bucle while
'''
Ejemplo: Se representan los números pares empezando por 2 hasta llegar al número 20 (incluido).
OJO: los bucles while producen fácilmente bucles infinitos. En el ejemplo ocuure si se elimina 
la condición de parar cuando el número llega a 20.
'''
print("Ejemplo 1: bucle for")

nopar= 2

while (nopar > 0):
    print (nopar)
    nopar = nopar + 2
    if (nopar > 20):
        break
Ejemplo 1: bucle for
2
4
6
8
10
12
14
16
18
20

Algunos tipos de datos en Python

  • Tuplas
  • Listas

Información adicional sobre otros tipos de datos: https://docs.python.org/3/tutorial/datastructures.html

In [ ]:
# Tuplas
'''
Un tupla es una secuencia inmutable y ordenada de elementos. Pueden ser de 
de cualquier tipo (básico o no). Se pueden indexar.
Sintaxis para declarar una tupla: especificar los elementos separados por una coma (,)
'''
tupla_vacia = ( )
tupla1 = 1 ,2 ,3 ,4 ,6 ,
tupla1b = (1 , 2 , 3 , 4 , 6)
tupla2 = "hola" , 2 ,3
tupla3 = tupla2 , 90
tupla4 = tuple ("ejemplo")

print("Tuplas")
print(tupla1)
print(tupla1[0:2])
print(tupla1b)
print(tupla2)
print(tupla3)
print(tupla4)
Tuplas
(1, 2, 3, 4, 6)
(1, 2)
(1, 2, 3, 4, 6)
('hola', 2, 3)
(('hola', 2, 3), 90)
('e', 'j', 'e', 'm', 'p', 'l', 'o')
In [ ]:
# Listas
'''
Una lista es una secuencia mutable y ordenada de elementos. Sus elementos 
se pueden modificar a diferencia de las tuplas. Se pueden indexar.
Sintaxis para declarar una lisat: los elementos de la lista se seprar usando comas.
Se especifica que es una lista cerrando el conjunto entre corchetes [,].
'''
lista_vacia = []
lista1 = [1 ,2 ,3 ,4 ,6]
lista2 = ["hola" , 2 ,3]
lista3 = lista2+[90]
lista4 = list("ejemplo")
print("Listas")
print(lista1)
print(lista1[0:2])
print("lista2=",lista2)
print(lista3)
print(lista4)
Listas
[1, 2, 3, 4, 6]
[1, 2]
lista2= ['hola', 2, 3]
['hola', 2, 3, 90]
['e', 'j', 'e', 'm', 'p', 'l', 'o']

Funciones

In [ ]:
# Funciones
'''
Ejemplo: encapsulamos parte del código de los ejemplos previos en una función
'''
print("Ejemplo 1: funciones")

def isnegative(x):
    if(a<0.0): #Los paréntesis no son necesarios
       print(a," es un número negativo.")  

rango=list(range(-5,5)) # Más adelante entenderemos qué hace el método list

print("De los siguientes números ",rango,"comprobamos cuáles son negativos")
for a in range(-5,5):
   isnegative(a)


'''
Ejemplo: cálculo de un polinomio de grado n
'''
print("\n Ejemplo 2: funciones")

def polynomial(x,a):    
    result=0
    n=len(a)-1    
    i=0
    for factor in a:
         result=result+factor*x**i
         i=i+1
    return result

a=[1.0,1.0,1.0] # a_0*x**(0)+a_1*x**(1)+...a_n*x**n, donde n=len(a)
x=2.0
pol_x=polynomial(x,a)
txt="Polinomio de grado n="+str(len(a)-1)+"\n y coeficientes [$a_0,a_{1},..,a_{n-1},a_n$]="+str(a)
txt=txt+", en x="+str(x)+" tiene un valor igual a ="+str(pol_x)
print(txt)

'''
Ejemplo: cuerpo caída libre
'''
print("\n Ejemplo 3: funciones")
def y_t(t,y0,v0):
    g=9.81        
    return y0+v0*t-0.5*g*t**2     
y0=100.0 #m
v0= 50.0 #m/s
t = 5 #s
print("Para la condición inicial (y0,v0)=(",y0,"m,",v0,"m/s)")
print("La velocidad para un cuerpo en caída libre en t=",t,'(s), será de',y_t(t,y0,v0),
      'm/s')
Ejemplo 1: funciones
De los siguientes números  [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4] comprobamos cuáles son negativos
-5  es un número negativo.
-4  es un número negativo.
-3  es un número negativo.
-2  es un número negativo.
-1  es un número negativo.

 Ejemplo 2: funciones
Polinomio de grado n=2
 y coeficientes [$a_0,a_{1},..,a_{n-1},a_n$]=[1.0, 1.0, 1.0], en x=2.0 tiene un valor igual a =7.0

 Ejemplo 3: funciones
Para la condición inicial (y0,v0)=( 100.0 m, 50.0 m/s)
La velocidad para un cuerpo en caída libre en t= 5 (s), será de 227.375 m/s

Bibliotecas

In [ ]:
import numpy as np # numpy es la biblioteca con la que crear y operar con vectores/matrices y en general "tensores"

'''
Ejemplos básicos
'''
print("\n Ejemplo 1: Ejemplos básicos")
x=np.array([[1,2,3,4],[1,2,3,4],[1,2,3,4]])
print("Dimensión=",x.ndim,"Shape=",x.shape,"Tipo=",x.dtype)
print(x)
y=np.zeros(x.shape) # Crear una matriz con las mismas características que otra y rellenarla de ceros
print(y)
z=np.identity(3) # Crea una matriz identidad nxn. En el ejemplo n=3
print(z)

'''
Ejemplos : operaciones con vectores de tipo element-wise 
'''
print("\n Ejemplo 2: operaciones con vectores de tipo element-wise ")
tmin,tmax= 0.0,20.0 #s
nopto=20
t=np.linspace(tmin,tmax,nopto) #Se define un vector de dimensión (nopto,), con valores en el intervalo [tmin,tmax]
y=np.array(t) # copia el vector, matriz, en general tensor t.

def y_t(t,y0,v0):
    g=9.81        
    return y0+v0*t-0.5*g*t**2  

y0=100.0 #m
v0= 5.0 #m/s

'''
Python permite cálculos "element-wise": un cálculo elemento a elemento de un vector. 
No hay problema en sustituir en un función lo que 
en principio son escalares (el tiempo t), por un vector/matriz/.... De la misma forma,
el resultado de la función que en principio es un escalar, puede devolver un vector/matriz/...
'''
y=y_t(t,y0,v0) 
print(t)
print(y)
 Ejemplo 1: Ejemplos básicos
Dimensión= 2 Shape= (3, 4) Tipo= int32
[[1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

 Ejemplo 2: operaciones con vectores de tipo element-wise 
[ 0.          1.05263158  2.10526316  3.15789474  4.21052632  5.26315789
  6.31578947  7.36842105  8.42105263  9.47368421 10.52631579 11.57894737
 12.63157895 13.68421053 14.73684211 15.78947368 16.84210526 17.89473684
 18.94736842 20.        ]
[  100.            99.82825485    88.7867036     66.87534626
    34.09418283    -9.5567867    -64.07756233  -129.46814404
  -205.72853186  -292.85872576  -390.85872576  -499.72853186
  -619.46814404  -750.07756233  -891.5567867  -1043.90581717
 -1207.12465374 -1381.2132964  -1566.17174515 -1762.        ]
In [ ]:
'''
Ejemplo 1: representación gráfica de una función
'''
print("\n Ejemplo 1: cuerpo en caída libre")

import numpy as np

tmin,tmax= 0.0,10.0 #s
nopto=100
t=np.linspace(tmin,tmax,nopto) #Se define un vector de dimensión (nopto,), con valores en el intervalo [tmin,tmax]
y=np.array(t) # copia el vector, matriz, en general tensor t.

def y_t(t,y0,v0):
    g=9.81        
    return y0+v0*t-0.5*g*t**2  

y0=100.0 #m
v0= 5.0 #m/s
y=y_t(t,y0,v0)

print("Para la condición inicial (y0,v0)=(",y0,"m,",v0,"m/s)")

'''
Elementos esenciales en una representación gráfica
'''
# Se llama a las bibliotecas necesarias
import matplotlib.pyplot as plt
import numpy as np

fig,ax = plt.subplots(figsize=(5,5))
ax.plot(t,y, color="blue", linewidth=0,linestyle='--',marker=".",markersize=12)
ax.set_ylabel("y(m)")
ax.set_xlabel("t(s)")
ax.legend()
plt.show()

'''
Ejemplo 2: representación gráfica de una función
'''
print("\n Ejemplo 2: representación de un polinomio")

def polynomial(x,a):    
    result=0
    n=len(a)-1    
    i=0
    for factor in a:
         result=result+factor*x**i
         i=i+1
    return result

# Se llama a las bibliotecas necesarias
import matplotlib.pyplot as plt
import numpy as np

a=[0.0,1.0,-1.0] # a_0*x**(0)+a_1*x**(1)+...a_n*x**n, donde el grado del polinomio es n=len(a)-1
txt="Polinomio de grado n="+str(len(a)-1)+" \n  y coeficientes [$a_0,a_{1},..,a_{n-1},a_n$]="+str(a)
print(txt)
xmin,xmax,nopto=-10.3,10.5,100
'''
Para cada valor asignado al vector x mediante el método np.linspace, 
la función polynomial calcula su valor volcándolo en el vector y. 
'''
x=np.linspace(xmin,xmax,nopto) #Se define un vector de dimensión (nopto,), con valores en el intervalo [xmin,xmax]
y1=polynomial(x,a)

'''
La forma equivalente utilizando el bucle for sería la siguiente (se parte de la definición previa de x)
'''
y2=np.array(x) #Crea un array idéntico a x
for i in range(0,len(x)):
    y2[i]=polynomial(x[i],a)
'''
Elementos esenciales en una representación gráfica
'''
fig,ax = plt.subplots(figsize=(8,8))
ax.plot(x,y1, color="blue", linewidth=0,linestyle='--',marker=".",markersize=12,label=txt)
ax.plot(x,y2, color="red", linewidth=3,linestyle='-')
ax.set_title("$a_0+a_{1} x+...a_{n-1} x^{n-1}+a_n x^n$")
ax.set_ylabel("y")
ax.set_xlabel("x")
ax.legend()
plt.show()
 Ejemplo 1: cuerpo en caída libre
Para la condición inicial (y0,v0)=( 100.0 m, 5.0 m/s)
No handles with labels found to put in legend.
 Ejemplo 2: representación de un polinomio
Polinomio de grado n=2 
  y coeficientes [$a_0,a_{1},..,a_{n-1},a_n$]=[0.0, 1.0, -1.0]