Introdução à programação e aos algoritmos

João Araujo Ribeiro · Capítulo 50 de 103

Páginas do PDF

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.