Introdução à programação e aos algoritmos
4.2 Módulos de Python
No entanto, ainda falta definir a função fatorial(). Nas
próximas seções você vai descobrir como usar funções criadas por outros e também criar suas próprias.
4.2 MÓDULOS DE PYTHON
Já usamos algumas funções embutidas na linguagem: int(), print() , input(), por exemplo. Mas Python oferece muito mais. Para poupar o trabalho do programador, foram desenvolvidos módulos de programas que contêm diversas funções úteis para o dia a dia.
Vamos começar usando essas funções antes de criar as nossas
próprias.
Diferente das funções vistas até aqui, que pudemos usar
diretamente, para obter todo o potencial de Python, precisamos importar seus módulos. Um módulo é um arquivo que contém diversas funções agrupadas por assunto. Módulo é o nome que Python dá às suas bibliotecas de funções.
Um módulo importante é o math, de funções matemáticas. Ao
escrever
import math
no seu programa, temos acesso a dezenas de funções matemáticas. Você não precisa “reinventar a roda”. Além de funções matemáticas, math também fornece alguns valores úteis em cálculos matemáticos, como π (3,141592653589793) e o número de Euler e (2,718281828459045). Para ter acesso aos valores, basta usar a palavra math seguida de um ponto antes do nome da constante. Veja o Programa 4.4.
1 import math
2 print(‘Pi:’, math.pi)
3 print(‘Número de Euler:’, math.e) 4 print(‘Absoluto:’, math.fabs(-2.4))
■ Programa 4.4: Constantes e valor absoluto.
O resultado é o esperado:
Pi: 3.141592653589793
Número de Euler: 2.718281828459045
Absoluto: 2.4
Para chamar uma função de um módulo de Python, a sintaxe é a mesma:
nome_do_módulo.nome_da_função
Assim, se você quiser chamar a função que calcula o seno, você deve escrever:
math.sin(x)
em que sin é a função que calcula o seno e x é o ângulo em radianos para o qual você deseja o seno calculado.
Algumas funções úteis de math são:
math.sin(x) Retorna o seno de x (medido em radianos).
math.cos(x) Retorna o cosseno de x (medido em radianos).
math.pow(x,y) Retorna xy, ou seja, x elevado à potência y.
math.sqrt(x) Retorna a raiz quadrada de x.
math.hypot(x) Recebe dois argumentos, x e y, e devolve a hipotenusa de um triângulo retângulo de lados x e y, ou seja, retorna
.
math.fabs(x) Recebe como argumento um número em ponto flutuante e devolve seu valor absoluto.
factorial(x) Recebe como argumento um número inteiro e devolve seu fatorial.
Para saber todas as funções do módulo math, você pode
consultar on-line os diversos manuais disponíveis ou, muito mais rápido e simples, abrir um terminal no seu computador, digitar python3 (ou simplesmente python, dependendo de sua instalação),
import math e dir(math), como na Figura 4.2.
Figura 4.2 Console Python interativo.
Note que entre as funções de math existe uma que é o fatorial.
Isso ensina uma coisa importante: sempre que você precisar resolver um problema, pense se já não existe um módulo de Python com a solução para ele. A biblioteca de módulos de Python é grande o suficiente para que as chances de encontrar uma solução já pronta sejam bem significativas.
Em resumo: não tente reinventar a roda. Aproveite o
conhecimento adquirido e, a não ser que você tenha uma ideia genial de algoritmo para resolver o problema, a função existente na biblioteca de módulos deve ser a mais eficiente possível.
Vamos fazer um programa simples em Python para usar o módulo de funções matemáticas. O Programa 4.5 cria uma tabela com os valores de seno e cosseno de ângulos entre 0 e 360 graus, a cada 30 graus.
A solução do problema de criar a tabela é simples, basta lembrar que as funções matemáticas trabalham com radianos e não graus. Assim, é necessário converter graus em radianos antes de montar a tabela. A fórmula de conversão, você já sabe, é radianos = graus × π ÷ 180.
import math
print(‘Graus Radianos Seno Cosseno’) for graus in range(0, 361, 30):
rad = graus * math.pi / 180
print(graus, rad, math.sin(rad), math.cos(rad))
■ Programa 4.5: Tabela de senos e cossenos.
A saída na tela deste programa deixa muito a desejar:
Graus Radianos Seno Cosseno
0 0.0 0.0 1.0
30 0.5235987755982988 0.49999999999999994 0.86602540 37844387
60 1.0471975511965976 0.8660254037844386 0.500000000 0000001
90 1.5707963267948966 1.0 6.123233995736766e-17 120 2.0943951023931953 0.8660254037844387 -0.4999999 999999998
150 2.6179938779914944 0.49999999999999994 -0.866025 4037844387
180 3.141592653589793 1.2246467991473532e-16 -1.0 210 3.6651914291880923 -0.5000000000000001 -0.866025 4037844386
240 4.1887902047863905 -0.8660254037844384 -0.500000
0000000004
270 4.71238898038469 -1.0 -1.8369701987210297e-16
300 5.235987755982989 -0.8660254037844386 0.50000000
00000001
330 5.759586531581287 -0.5000000000000004 0.86602540
37844384
360 6.283185307179586 -2.4492935982947064e-16 1.0
Felizmente, Python tem como fazer esta saída mais
apresentável, como uma tabela. Existe um comando format que especifica o tamanho de campos de impressão, formatando uma string. Aproveito também para usar a função de math que transforma graus em radianos, afinal, não vamos reinventar a roda. A versão melhorada está no Programa 4.6.
import math
print (‘{:>9}{:>9}{:>9}{:>9}’.format(‘Graus’,
‘Radianos’,’Seno’,’Cosseno’))
for graus in range(0,361,30):
rad = math.radians(graus)
print (‘{:>9.2f}{:>9.2f}{:>9.2f}
{:>9.2f}’.format(graus,
rad, math.sin(rad), math.cos(rad)))
■ Programa 4.6: Tabela de senos e cossenos formatada.
E a tabela impressa fica bem melhor:
Graus Radianos Seno Cosseno
0.00 0.00 0.00 1.00
30.00 0.52 0.50 0.87
60.00 1.05 0.87 0.50
90.00 1.57 1.00 0.00
120.00 2.09 0.87 -0.50
150.00 2.62 0.50 -0.87
180.00 3.14 0.00 -1.00
210.00 3.67 -0.50 -0.87
240.00 4.19 -0.87 -0.50 270.00 4.71 -1.00 -0.00 300.00 5.24 -0.87 0.50 330.00 5.76 -0.50 0.87 360.00 6.28 -0.00 1.00
Não vou entrar em detalhes sobre a sintaxe do comando format() , pois é extensa e fugiria do assunto deste capítulo. Mas, resumindo o que foi feito, a primeira string é de formatação. Tudo que estiver entre chaves deve ter um correspondente dentro dos parênteses de format(). Desse modo, com 4 pares de chaves devemos ter 4 objetos para formatar. Os dois pontos (:) indicam que será especificada uma formatação, o sinal > indica alinhamento à direita, o número diz quantas casas serão usadas, no caso 9. O número após o ponto diz quantas casas decimais (2) serão usadas. Atente para o arredondamento do número. A letra f indica que é um número em ponto flutuante. Pesquise em manuais on-line de Python outras formatações.
Você pode também importar apenas as funções que precisam de math e, neste caso, não precisa colocar a palavra math antes de cada chamada de função. A sintaxe é ‘ from math import pi, sin, cos ’, como no Programa 4.7.
from math import radians, sin, cos
print(‘{:>9}{:>9}{:>9}
{:>9}’.format(‘Graus’, ‘Radianos’,
‘Seno’, ‘Cosseno
’))
for graus in range(0, 361, 30):
rad = radians(graus)
print(‘{:>9.2f}{:>9.2f}{:>9.2f}{:>9.2f}’.format(
graus, rad, sin(rad), cos(rad)))
■ Programa 4.7: Tabela de senos e cossenos importando
apenas as funções utilizadas.