Se chegaches ata aquí xa deberías saber que en Python e noutras linguaxes de programación:
- Podemos crear/definir funcións internas no noso código que logo utilizamos nese programa, compactando o código e facilitando a repetición de procesos. Iso o facemos escribindo:
def nome_da_función (parámetros):
- Podemos chamar a funcións/métodos que teñamos creado e gardadas nun módulo ou biblioteca, un ficheiro ao que ten aceso Python para importar esas función.
A palabra librería é unha incorrecta tradución do inglés library, pero o seu uso está tan extendido na bibliografía informática que convén tela presente. Nós utilizaremos biblioteca e algunha vez, por despiste, librería.
- Pero sobre todo podemos chamar a cantidade de métodos que xa están creados en Python e gardados en módulos. Iso facemolo escribindo ao principio do código:
import nome_do_modulo
- Ou ben from nome-do-módulo import nome_do_método cando só queramos empregar un método determinado.
- Logo utilizamos o método, normalmente coa sintaxe:
nome_do_módulo.método()
A isto de que Python incorpore de serie un montón de bibliotecas chámanlle "vir coas pilas postas" (battery included). Verás que o Python ten unha morea de funcionalidades xa incorporadas que terás que molestarte en descubrir, en especial a medida que cambia a versión de Python, ou que desexes resolver outros problemas.
A estes módulos xa preinstalados en Python é o que coñecemos como Biblioteca Estándar de Python.
En realidade xa o tes feito ao utilizar calquera función predefinida de Python. Por exemplo a función string, str(), convirte calquera cousa nunha cadea. Se queremos converter un dato gardado nunha variable nunha cadea escribimos, por exemplo, nova_variable = str(variable).
1. Bibliotecas matemáticas
Estes módulos aportarán unha inmensa cantidade de métodos para traballo matemático.
Temos tres importantes:
- math (para cálculo con números reais, chamados de coma flotante)
- random (para xerar números ou procesos aleatorios)
- statistics (para cálculo estatístico, claro)
- SciPY. , moi recomendada para traballos científicos, pero non ven instalada, terás que facelo ti. Podes consultar nas nosas páxinas como instalar bibliotecas con PIP
a) Biblioteca math
Con math podemos abordar calquera cálculo que apareza en Secundaria ou Bacharelato: aritmética, trigonometría, logaritmos, exponenciais...Incluso temos outra biblioteca similar, Cmath, para traballar con números complexos.
O único que temos que ter coidado nos números reais é lembrar que o ordenador ten un límite para almacenar información. Cando escribimos Pi, ¶, que estamos a escribir?. Pois unha función que calcula o número ¶ aproximado ao nº de decimais que teñamos decidido previamente. Isto é fonte de confusión habitual. Proba o seguinte no teu IDE:
import math
print(math.pi) #cantos decimais tes?. Non son infinitos, verdade?. Ollo con isto.
Se queres utilizar PI no seu valor habitual proba isto:
print(round(math.pi,2)) #estás a utilizar o método round() para redondear
Podemos meter un método dentro doutro método:
print(math.cos(math.pi / 4))
En moitos métodos podemos decidir o número de decimais:
print(math.log(1024, 2))
Exercicio:
- Proba os métodos log e sin do módulo math escribindo un cálculo redondeado a 2 decimais no seu resultado.
- Explica que fan os métodos floor(), gcd(x,y), trunc() e pow(x,y) do módulo math.
b) Biblioteca random
Con random creamos procesos aletarios. Temos diversos métodos:
- para escoller un valor ao chou, por exemplo nunha lista: random.choice(lista)
- para escoller sen remprazar, por exemplo para xerar diversos valores aletorios: ramdon.sample(rango,nº datos)
- un número calquera: random.random()
- un enteiro dentro dun rango determinado: random.randrange(nº mínimo, nº máximo, paso) #non inclue o último nº,m podemos facer que só sexan pares, impares...
- o mesmo que randrange, pero incluindo o nº: random.randint(nº mínimo, nº máximo)
- mistura elementos dunha lista: random.shuffle(lista)
Exercicio:
- Podes probar o seguinte código e comentar o que fai cada método (lembra importar o módulo):
randon.choice(['cobra viperina', 'cobra de colar', 'cobra rateira'])
random.sample(range(100),10)
random.random()
random.randrange(10)
c) Biblioteca statistics
Con statistics facemos cousas como esta:
datos = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
statistics.mean(datos)
statistics.median(datos)
statistics.variance(datos)
Exercicio:
- Proba este código e explica que fan eses métodos. Serías quen de facelos cunha función propia?
2. Biblioteca de datas e tempos
a) Biblioteca time
Un módulo interesante e necesario para moitos programas é time. Se queres ler con calma todo o que podes facer e os problemas que podes ter cos formatos de tempo, proba a ler nesta páxina.
Un método de time que consideramos básico os que vimos dende scratch é sleep(), para poder agardar un tempo nun proceso. A súa sintaxe é:
time.sleep(nº de segundos)
Se queremos agardar milisegundos escribimos time.sleep(.nº de milisegundos):
import time
time.sleep(10) #agarda 10 s
time.sleep(.500) #agarda medio segundo
O método time() da a data actual en segundos, a partir da data de referencia do 1 de Xaneiro de 1970. En base a ese método podemos obter a data actual, do seguinte xeito :
localtime = time.asctime( time.localtime(time.time()) ) #o método asctime garda nunha cadea o formato de data
print ("Hora local actual :", localtime)
b) Bibliotecas datetime ou calendar
Temos outros dous módulos que melloran o traballo con datos temporais que son datetime e calendar. Se queres ler e practicar código para traballar con datos temporais, proba nesta páxina.
Para saber a data actual temos esta posibilidade, utilizando o método datetime.now():
from datetime import datetime, date, time, timedelta
import calendar
print(datetime.now())
print(datetime.utcnow()) #se non sabes o que é o tempo UTC mellor que leas un pouco ao respecto.
Para saber ano, mes, día, hora. minuto... podemos utilizar os métodos de datetime .year, .month, .day, .hour, .minute ...:
print(datetime.year()) #para saber en que ano estás, interesante para máis dun estudante despistado ;-)
Exercicio:
- Crea unha función saudo(nome) que diga algo do tipo 'Ola _nome_, son as 15 horas 35 minutos e 17 segundos de hoxe, día 28 de Maio de 2018'
3. Outras bibliotecas habituais
Tes moitas bibliotecas instaladas no teu Python3. Podes consultalas escribindo pydoc modules se entras en Python na terminal. E tamén help('nome_do_módulo') para saber os métodos disponibles, pero por suposto é máis sinxelo buscar a axuda dalgún amable internauta.
Un par de módulos que atoparás seguido se les ou copias programas de Python por internet:
- sys, argumento de líneas de comandos:
- cando necesitemos executar un programa dende a terminal dando parámetros (argumentos) necesitamos este módulo que garda os parámetros no atributo argv como unha lista.
- Exemplo: podemos ter un ficheiro, saudo.py, coa función saudo() que sauda a unha persoa polo seu nome. Se o executamos dende a terminal, podemos escribir python saudo.py Pepe se no ficheiro saudo.py temos escrito antes:
import sys
- os, para interactuar co sistema operativo:
- pode ser moi importante saber en que directorio estamos a traballar:
import os
print(os.getcwd())
- re e collections, para manexar cadeas, tuplas, dicionarios e expresións regulares dun xeito avanzado:
- executa o seguinte código e verás a potencia con respecto a facer ti o algoritmo:
import collections
print(collections.Counter('Ola caracola'))