Breve introducción a la sintaxis de Python 3 | Parte 3
Esta es la ultima parte de esta introducción a la sintaxis de Python 3, a lo largo de estas 3 partes se muestran algunos de los comandos que mas comúnmente utilizo cuando escribo un código en Python para resolver problemas sugeridos en libros de estudiantes de ingeniería química. Hay muchas formas de escribir un código para un problema, solo espero que los publicados aquí, te sirvan como una guía para escribir los tuyos.
Funciones matemáticas
Python solo admite las siguientes funciones matemáticas:
abs(a) | Obtiene el valor absoluto de a |
max(secuencia) | Obtiene el elemento mas grande de una secuencia |
min(secuencia) | Obtiene el elemento mas pequeño de una secuencia |
round(a,n) | Redondea a con n decimales |
cmp(a,b) | $$regresa \left\{\begin{matrix}-1 &si &a <b \\ 0 &si &a = b \\ 1 &si &a>b \end{matrix}\right.$$ |
La mayoría de las funciones matemáticas están disponibles en la librería matemática math.
Entrada de lectura
La función empleada para aceptar una entrada del usuario esinput(aviso) |
eval(cadena) |
- a = input('Introduce a: ')
- print(a, type(a)) # Mostrar a y su tipo
- b = eval(a)
- print(b,type(b)) # Mostrar b y su tipo
Introduce a: 11**2
11**2 <class ’str’>
121 <class ’int’>
Para este ejemplo se introdujo 11**2, con ayuda de input(), notamos que para el primer resultado que mostró Python interpreto la entrada como una cadena, y cuando se aplica la función eval(), lo convirtió a un valor numérico y realizo la operación de $11^{2} = 121$. Una forma conveniente de ingresar un número y asignarlo a la variable a es
a = eval(input(aviso)) |
Impresión de resultados
La salida de resultados se puede mostrar con la función print()print(objeto1,objeto2,...) |
- >>> a = 1234.56789
- >>> b = [2, 4, 6, 8]
- >>> print(a,b) # Muestra continua la información
- 1234.56789 [2, 4, 6, 8]
- >>> print('a =',a, '\nb =',b) #Notamos que lo muestra en otro renglón
- a = 1234.56789
- b = [2, 4, 6, 8]
'{:fmt1}{:fmt2}...'.format(argum1,argum2,...)
|
wd | Entero |
w.df | Notación de punto flotante |
w.de | Notación exponencial |
- >>> a = 1234.56789
- >>> n = 9876
- >>> print(’{:7.2f}’.format(a))
- 1234.57
- >>> print(’n = {:6d}’.format(n)) # Con espacios
- n = 9876
- >>> print(’n = {:06d}’.format(n)) # Con ceros
- n =009876
- >>> print(’{:12.4e} {:6d}’.format(a,n))
- 1.2346e+03 9876
Abrir, cerrar y leer un archivo con Python
Antes de acceder a un archivo de datos en un dispositivo de almacenamiento (por ejemplo, un disco, una USB o en la PC), debe crear un objeto de archivo con el comando
objeto_archivo = open(nombre del archivo, acción)
|
'r' | Leer de un archivo existente. |
'w' | Escribir en un archivo. Si el nombre del archivo no existe, se crea. |
'a' | Agregar al final del archivo. |
'r+' | Leer y escribir desde un archivo existente. |
'w+' | Igual que' r + ', pero el nombre de archivo se crea si no existe. |
'a+' | Igual que "w +", pero los datos se agregan al final del archivo. |
objeto_archivo.close()
|
Hay tres métodos para leer datos de un archivo. El método
objeto_archivo.read(n)
|
Si solo se va a leer la línea actual, use
objeto_archivo.readline(n)
|
Todas las líneas en un archivo se pueden leer usando
objeto_archivo.readlines()
|
Un método conveniente para extraer todas las líneas una por una es usar el bucle
for line in objeto_archivo
hacer algo con line
|
1896 05 26 40.94
1896 05 27 40.58
1896 05 28 40.20
etc.
Nuestra tarea es leer el archivo y crear una lista x que contenga solo la intensidad. Como cada línea en el archivo es una cadena, primero dividimos la línea en sus partes usando el comando dividir. Esto produce una lista de cadenas, como ["1896", "05", "26", "40.94"].Luego extraemos la intensidad (elemento [3] de la lista), la evaluamos y agregamos el resultado a x. Aquí está el algoritmo:
- x = [] #Creamos una lista vacía
- data = open(’sunspots.txt’,’r’) #Objeto de archivo
- for line in data: #Ciclo for
- x.append(eval(line.split()[3]))
- data.close() #Cerramos el archivo
Escribir datos en un archivo
El método
objeto_archivo.write(cadena)
|
objeto_archivo.writelines(lista de cadenas)
|
- f = open('cuadrados.txt','w') #Se crea el archivo
- for k in range(101,111): #Ciclo for
- f.write('{:4d} {:6d}'.format(k,k**2)) #Escribe la información con formato
- f.write('\n') #Pedimos que pase al siguiente renglón
- f.close() #Cerramos el archivo
La función de impresión también se puede utilizar para escribir en un archivo redirigiendo la salida a un objeto de archivo:
print(objeto1,objeto2,..., file=objeto_archivo) |
Se puede trabajar varias extensiones de archivos, personalmente utilizo mas frecuentemente la extensión .csv, la cual puede ser abierta con Excel.
Detección de errores
Cuando se produce un error durante la ejecución de un programa, se genera una excepción y el programa se detiene. Se pueden detectar excepciones con las declaraciones try y except:
try:
hacer algo con
except error:
hacer algo else
|
La siguiente declaración plantea la excepción ZeroDivisionError (recuerda que esto ya esta incorporado para mostrarse cuando hay un error):
- >>> c = 12.0/0.0
- Traceback (most recent call last):
- File "<pyshell#0>", line 1, in <module>
- c=12.0/0.0
- ZeroDivisionError: float division by zero
- try:
- c = 12.0/0.0
- except ZeroDivisionError:
- print('División entre cero')
Librerías
Esta es una de las características que hacen que Python sea mi lenguaje de programación favorito, las librerías de Python son muy amplias. La facilidad para obtener las rutinas de las librerías y aplicarlas en unas cuantas lineas de código, hace que sea fácil de entender y legible, lo que nos permite que nos concentremos mas en que hace el programa y no tanto en especializarnos en computación, esto es ideal para el aprendizaje y permitirnos enfocarnos en resolver los problemas de nuestra ingeniería.Existen miles de librerías, pero el sistema de empaquetamiento de este lenguaje permite construir librerías nuevas sobre las ya existentes para que estas sean más amplias y potentes. Ademas, es importante destacar que la capacidad de combinar librerías como NumPy y ScyPi, permite que Python sea uno de los lenguajes con mejor rendimiento para realizar proyectos de machine learning y data science. Gracias a esta razón, es que se a visto acelerado el crecimiento de Python.
Las siguientes son algunas de las librerías de uso mas común que encontraremos.
Como usar una librería
Utilizamos la librería o modulo math para ilustrar como puede llamarse a una librería. La mayoría de las funciones matemáticas no están integradas en Python principal, pero están disponibles al cargar el módulo matemático math. Hay tres formas de acceder a las funciones en un módulo.La declaración
from math import * |
Un método más seguro pero de ninguna manera infalible es cargar las definiciones seleccionadas con la declaración
from math import funcion1, funcion2, ... |
- >>> from math import log,sin # Importamos funciones especificas de la librería
- >>> print(log(sin(0.5))) #Utilizamos las funciones
- -0.735166686385
import math |
- >>> import math
- >>> print(math.log(math.sin(0.5)))
- -0.735166686385
import math as m |
- >>> import math as m
- >>> print(m.log(m.sin(0.5)))
- -0.735166686385
- >>> import math
- >>> dir(math)
- [’__doc__’, ’__name__’, ’acos’, ’asin’, ’atan’,
- ’atan2’, ’ceil’, ’cos’, ’cosh’, ’e’, ’exp’, ’fabs’,
- ’floor’, ’fmod’, ’frexp’, ’hypot’, ’ldexp’, ’log’,
- ’log10’, ’modf’, ’pi’, ’pow’, sign’, sin’, ’sinh’,
- ’sqrt’, ’tan’, ’tanh’]
Módulo cmath
El módulo cmath proporciona muchas de las funciones que se encuentran en el módulo matemático, pero estas funciones aceptan números complejos. Las funciones en el módulo son- [’__doc__’, ’__name__’, ’acos’, ’acosh’, ’asin’, ’asinh’,
- ’atan’, ’atanh’, ’cos’, ’cosh’, ’e’, ’exp’, ’log’,
- ’log10’, ’pi’, ’sin’, ’sinh’, ’sqrt’, ’tan’, ’tanh’]
Módulo numpy
El módulo numpy no forma parte de la versión estándar de Python. Como se señaló anteriormente, debe instalarse por separado (la instalación es muy fácil). Este módulo introduce objetos de matriz que son similares a las listas, pero pueden ser manipulados por numerosas funciones contenidas en el módulo. El tamaño de una matriz es inmutable y no se permiten elementos vacíos.El conjunto completo de funciones en numpy es demasiado largo para imprimirse en su totalidad. La siguiente lista está limitada a las funciones más utilizadas.
- [’complex’, ’float’, ’abs’, ’append’, arccos’,
- ’arccosh’, ’arcsin’, ’arcsinh’, ’arctan’, ’arctan2’,
- ’arctanh’, ’argmax’, ’argmin’, ’cos’, ’cosh’, ’diag’,
- ’diagonal’, ’dot’, ’e’, ’exp’, ’floor’, ’identity’,
- ’inner, ’inv’, ’log’, ’log10’, ’max’, ’min’,
- ’ones’, ’outer’, ’pi’, ’prod’ ’sin’, ’sinh’, ’size’,
- ’solve’, ’sqrt’, ’sum’, ’tan’, ’tanh’, ’trace’,
- ’transpose’, ’vectorize’,’zeros’]
Trazado con matplotlib.pyplot
El módulo matplotlib.pyplot es una colección de funciones de trazado 2D que proporcionan a Python una funcionalidad de estilo MATLAB. Al no ser parte del núcleo de Python, requiere una instalación por separado. Recuerda, que si instalaste Anaconda, este ya la trae incluida, si quieres saber que librerías ya tienes instaladas, ve a Anaconda Prompt y escribe pip list. El siguiente programa, que traza funciones seno y coseno, ilustra la aplicación del módulo a trazados xy simples.- import matplotlib.pyplot as plt
- from numpy import arange,sin,cos
- x = arange(0.0,6.2,0.2) # Se crea un arreglo con numpy
- plt.plot(x,sin(x),'o-',x,cos(x),'^-')
- # Gráfica con estilo especifico de linea y marcador
- plt.xlabel('x') # Agrega etiqueta al eje x
- plt.legend(('seno','coseno'),loc = 0)
- # Agrega una leyenda en la localización 0,0
- plt.grid(True)
- # Agrega una malla
- plt.savefig('testplot.png',format='png') # Guardar el gráfico en .png
- # formato para un futuro uso
- plt.show() # Mostrar el gráfico en la pantalla
- input("\nPresiona enter para salir")
Es posible tener más de un gráfico en una figura, como lo demuestra el siguiente código:
- import matplotlib.pyplot as plt
- from numpy import arange,sin,cos
- x = arange(0.0,6.2,0.2) # Se crea un arreglo
- plt.plot(x,sin(x),'o-',x,cos(x),'^-')
- # Grafica con estilo especifico de linea y marcador
- plt.subplot(2,1,1)
- plt.plot(x,sin(x),'o-')
- plt.xlabel('x');plt.ylabel('sin(x)')
- plt.grid(True)
- plt.subplot(2,1,2)
- plt.plot(x,cos(x),'^-')
- plt.xlabel('x');plt.ylabel('cos(x)')
- plt.grid(True)
- plt.show()
- input("\nPresiona enter para salir")
Hasta aquí concluye esta breve introducción, para mas informacion acerca de una librería, no dude en consultar su documentación oficial.
Referencias
- Python 3.8.2 documentation, recuperado de: https://docs.python.org/3/
- Guido van Rossum, (2017). El tutorial de Python, Python Software Foundation. Recuperado de: http://docs.python.org.ar/tutorial/
Comentarios
Publicar un comentario