Python Estruturado
Python Estruturado
PROPÓSITO
Reconhecer, na linguagem Python, as estruturas de decisão e de repetição, a utilização de
subprogramas e de bibliotecas e as formas de tratamento de exceção e eventos.
PREPARAÇÃO
Antes de iniciar o conteúdo deste tema, é necessário que tenha o interpretador Python na
versão 3.7.7 e o ambiente de desenvolvimento PyCharm ou outro ambiente que suporte o
desenvolvimento na linguagem Python.
OBJETIVOS
MÓDULO 1
MÓDULO 2
MÓDULO 3
MÓDULO 4
INTRODUÇÃO
Programar significa, como em qualquer disciplina, aprender
ferramentas que permitam
desenvolver melhor a sua atividade. Ao aprender os
conceitos básicos de programação, o
estudante desenvolve habilidades iniciais para
escrever seus primeiros programas. Porém, é
difícil imaginar que aplicações
profissionais sejam feitas totalmente baseadas apenas nesses
conceitos básicos.
MÓDULO 1
Descrever as estruturas de
decisão e repetição em Python
Fonte: dTosh |
Shutterstock
Python C
Atenção! Para
visualização completa da tabela utilize a rolagem horizontal
Python C
if <condição>: if <condição>{
Instrução fora do if }
Atenção! Para
visualização completa da tabela utilize a rolagem horizontal
Python C
if <condição>: if <condição>{
Instrução fora do if }
Atenção! Para
visualização completa da tabela utilize a rolagem horizontal
1 if
<condição 1>:
5 else:
1 idade =
eval(input('Informe a idade da criança: '))
7 print('Aguarde as
próximas informações.')
8 else:
10 print('Informe-se
novamente neste prazo.')
Antes de detalhar o for, vamos conhecer uma função de Python que gera
uma lista de valores
numéricos. Essa lista ajudará a verificar a
repetição e deixará mais claro o entendimento do
laço.
SIMPLES
NÃO INICIADAS EM 0
INDICANDO INÍCIO, FIM E PASSO
SIMPLES
Para que a sequência não comece em 0, podemos informar o início e o fim como
parâmetros,
lembrando que o parâmetro fim não entra na lista (exclusive o fim). O
padrão é incrementar
cada termo em uma unidade. Ou seja, a chamada range(2,
7) cria a sequência (2, 3, 4, 5, 6).
1 for <variável>
in <sequência>:
3 Instrução fora do
for
Python C
Atenção! Para
visualização completa da tabela utilize a rolagem horizontal
2 print(item)
sequência 2 5 8
Atenção! Para
visualização completa da tabela utilize a rolagem horizontal
1 nome = input("Entre
com seu nome: ")
2 for letra in
nome:
3 print(letra)
2 L
3 a
4 u
5 r
6 a
Até agora, estudamos o uso do laço for com iterações sobre strings e
sobre sequências
numéricas, mas Python permite ainda mais que isso!
PODEMOS UTILIZAR O LAÇO FOR COM
ITERAÇÕES SOBRE
QUALQUER SEQUÊNCIA, NÃO SOMENTE AS NUMÉRICAS E
AS STRINGS.
Observe o exemplo da Figura 5:
1 nomes = ['Laura',
'Lis', 'Guilherme', 'Enzo', 'Arthur']
2 for nome in
nomes:
3 print(nome)
1 Laura
2 Lis
3 Guilherme
4 Enzo
5 Arthur
Python C
1 palavra = input('Entre
com uma palavra: ')
2 while palavra !=
'sair':
3 palavra =
input('Digite sair para encerrar o laço: ')
4 print('Você digitou
sair e agora está fora do laço')
Perceba que ao digitar ‘sair’ logo na primeira solicitação, a linha 3 do nosso programa
não é
executada nenhuma vez. Ou seja, o programa nem chega a entrar no laço
while.
No laço do-while, a condição é testada
após a iteração.
1 while
True:
EXEMPLO
Suponha que você deseje criar uma aplicação que permaneça
por meses ou anos sendo
executada, registrando a temperatura ou a umidade de um
ambiente. Logicamente, estamos
supondo que você tenha essa informação disponível
a partir da leitura de algum sensor.
1 while
True:
2 palavra = input('Entre
com uma palavra: ')
3 if palavra ==
'sair':
4 break
5 print('Você digitou
sair e agora está fora do laço')
Caso haja vários laços aninhados, o break será relativo ao laço em que
estiver inserido. Veja a
Figura 11:
1 while
True:
2 print('Você está no
primeiro laço.')
3 opcao1 = input('Deseja
sair dele? Digite SIM para isso. ')
4 if opcao1 ==
'SIM':
6 else:
7 while
True:
8 print('Você está no
segundo laço.')
9 opcao2 = input('Deseja
sair dele? Digite SIM para isso. ')
10 if opcao2 ==
'SIM':
12 print('Você saiu do
segundo laço.')
13 print('Você saiu do
primeiro laço')
14
O exemplo a seguir imprime todos os números inteiros de 1 até 10, pulando apenas o 5.
Veja
sua implementação na Figura 12:
2 if num ==
5:
3 continue
4 else:
5 print(num)
6 print('Laço
encerrado')
Para ressaltar a diferença entre as instruções break e continue, vamos alterar a linha 3 do
nosso programa, trocando a instrução continue pela instrução break. Veja a nova execução na
Figura 13:
Laço encerrado
A INSTRUÇÃO PASS
A instrução pass atua sobre a estrutura if, permitindo
que ela seja escrita sem outras
instruções a serem executadas caso a condição seja
verdadeira. Assim, podemos concentrar
as instruções no caso em que a condição seja
falsa. Suponha que queiramos imprimir somente
os números ímpares entre 1 e 10. Uma
implementação possível está na Figura 14:
2 if num % 2 ==
0:
3 pass
4 else:
5 print(num)
6 print('Laço
encerrado')
Laço encerrado
VERIFICANDO O APRENDIZADO
1 S = 0
2 FOR I IN RANGE(5):
3 S += 3*I
4 PRINT(S)
A) 0 3 9 18 30
B) 0 3 6 9 12
C) 30
D) 45
1 S = 0
2 A = 1
3 WHILE S < 5:
4 S = 3*A
5 A += 1
6 PRINT(S)
A) 9
B) 3 6
C) 3 3
D) 3 6 9 12
GABARITO
1. Considere o seguinte trecho de um programa escrito em Python:
1 s = 0
2 for i in range(5):
3 s += 3*i
4 print(s)
O laço for vai ser repetido 5 vezes, já que range(5) retorna a sequência (0, 1, 2, 3, 4). Vale
observar que a instrução print(s) está fora do laço for, o que a leva a ser executada apenas
uma vez quando o laço se encerrar. Isso elimina as opções A e B. A variável s começa com
valor zero e é acrescida, a cada iteração, do valor 3*i, sendo que i pertence à sequência (0, 1,
2, 3, 4). Ou seja, s recebe os acréscimos: 0 + 3 + 6 + 9 + 12. Assim, ela termina o laço com
o valor 30, que será impresso pela instrução print(s).
1 s = 0
2 a = 1
3 while s < 5:
4 s = 3*a
5 a += 1
6 print(s)
Ao ser testada pela primeira vez, a condição do while é verdadeira, já que s vale zero. Assim,
a variável s recebe o valor 3 (3x1) e a variável a é acrescida de uma unidade, ficando com o
valor 2. Em seguida, é impresso o valor de s (3). A condição do while é, então, testada
novamente, sendo mais uma vez verdadeira, porque s tem o valor 3 (menor que 5). Nessa
iteração, a variável s recebe o valor 6 (3x2) e a variável a é acrescida de uma unidade, ficando
com o valor 3. Em seguida, é impresso o valor de s (6). A condição do while é, então, testada
novamente e é falsa, já que s tem o valor 6, maior que 5. Com isso, o laço while é encerrado e
nada mais é impresso. Logo, foram impressos os valores 3 e 6.
MÓDULO 2
Fonte: dTosh |
Shutterstock
Os subprogramas são elementos fundamentais dos programas e por isso são importantes no
estudo de linguagens de programação. Neste módulo, abordaremos os conceitos de
subprogramas, como características gerais, passagem de parâmetros e recursividade, além
da
utilização de subprogramas em Python.
1
Um subprograma é definido quando o desenvolvedor descreve a
interface e as ações da
abstração desse subprograma.
2
O subprograma foi chamado quando uma instrução traz um pedido
explícito para sua
execução.
3
O subprograma está ativo após o início de sua execução, a partir da
sua chamada e
enquanto ele não foi concluído.
1 escolha =
input("Escolha uma opção de função: 1 ou 2")
2 if escolha ==
1:
3 def
func1(x):
4 return x +
1
5 else:
6 def
func2(x):
7 return x +
2
8
9 s =
func1(10)
10 print(s)
PARÂMETROS
Usualmente, um subprograma executa cálculos e operações a partir de dados que ele deve
processar. Existem duas maneiras de o subprograma obter esses dados: acessando
variáveis
não locais, mas visíveis para o subprograma, ou pela passagem de
parâmetros.
Quando o subprograma recebe os parâmetros adequados, ele pode ser executado com
quaisquer
valores recebidos. Porém, quando ele manipula variáveis não locais, uma forma de
evitar
alterações indevidas nessas variáveis é fazendo cópias locais delas. De
acordo com
Sebesta (2018), o acesso sistemático a variáveis não locais pode diminuir a
confiabilidade do
programa.
1 def
taximetro(distancia, multiplicador=1):
2 largada =
3
3 km_rodado =
2
4 valor = (largada +
distancia * km_rodado) * multiplicador
5 return
valor
8 pagamento =
taximetro(3.5)
9 print(pagamento)
ATENÇÃO
PROCEDIMENTOS E FUNÇÕES
Os subprogramas podem ser, distintamente, procedimentos e
funções. De acordo com
Sebesta (2018):
Procedimentos
Na maioria das linguagens que não explicita a diferença entre eles, as funções podem ser
definidas sem retornar qualquer valor, tendo comportamento de procedimento. Esse é o
caso
de Python. Veja o exemplo da Figura 18:
1 def
func1(x):
2 x =
10
3 print(f'Função
func1 - x = {x}')
4
5
6 def
func2(x):
7 x =
20
8 print(f'Função
func2 - x = {x}')
9
10
11 x = 0
12 func1(x)
13 func2(x)
AMBIENTES DE REFERENCIAMENTO
LOCAL
VARIÁVEIS LOCAIS
DINÂMICAS DA PILHA
ESTÁTICAS
DINÂMICAS DA PILHA
ESTÁTICAS
ATENÇÃO
As linhas 1, 2 e 3 definem a função func1(x), que recebe o parâmetro x, mas tem uma
variável local de nome x, cujo valor atribuído é 10;
O programa principal tem uma variável global de mesmo nome x, cujo valor atribuído é 0,
na linha 11;
Veja que as chamadas às funções func1(x) e func2(x) ocorrem nas linhas 12 e 13,
quando a variável x global já recebeu o valor 0. Porém, ao serem executadas, cada uma
dessas funções tem a sua própria variável local, a quem todas as referências internas são
feitas.
Função func1 - x = 10
Função func2 - x = 20
Programa principal - x = 0
Mesmo com a variável global tendo valor nulo, cada variável local das funções
func1(x) e
func2(x) tem seu próprio valor, e não
ocorrem alterações na variável global mesmo com
as atribuições das linhas 2
e 7.
2 global
x
3 x =
10
4 print(f'Função
func1 - x = {x}')
5
6
7 def
func2():
8 global
x
9 x =
20
10 print(f'Função func2 -
x = {x}')
11
12
13 x = 0
14 func1()
15 func2()
12 print(f'Programa
principal - x = {x}')
Função func1 - x = 10
Função func2 - x = 20
Programa principal - x = 20
SUBPROGRAMAS ANINHADOS
2 def
calculaMult():
4 return
1.2
5 else:
6 return
1
7 multiplicador =
calculaMult()
8 largada =
3
9 km_rodado =
2
10 valor = (largada +
distancia * km_rodado) * multiplicador
11 return
valor
12
13
14 dist =
eval(input("Entre com a distancia a ser percorrida em km: "))
15 pagamento =
taximetro(dist)
16 print(f'O valor a
pagar é R$ {pagamento}')
MÉTODOS DE PASSAGENS DE
PARÂMETROS
Os métodos de passagem de parâmetros são as maneiras que existem para transmiti-los ou
recebê-los dos subprogramas chamados. Os parâmetros podem ser passados principalmente
por:
VALOR
REFERÊNCIA
VALOR
REFERÊNCIA
SAIBA MAIS
RECURSIVIDADE
Uma função recursiva é aquela que chama a si mesma. Veja o exemplo da
função
regressiva(), como mostrado na Figura 23:
1 def
regressiva(x):
2 print(x)
3 regressiva(x -
1)
Ao chamar regressiva(1), o valor 1 é exibido na tela pela linha
2, e ocorre uma nova chamada
da função
regressiva() na linha 3, com o parâmetro
0.
Ao chamar regressiva(0), o valor 0 é exibido na tela e ocorre uma nova
chamada da função
regressiva, com o parâmetro -1, e assim sucessivamente.
ATENÇÃO
Em Python, o interpretador pode interromper a execução indefinida, mas essa não é uma boa
prática. Uma forma de contornar esse problema é definir adequadamente uma condição de
parada, como no exemplo da Figura 24:
1 def
regressiva(x):
2 if x <=
0:
3 print("Acabou")
4 else:
5 print(x)
6 regressiva(x-1)
Uma ou mais chamadas recursivas, que têm como parâmetros valores mais
próximos do(s)
caso(s) básico(s) do que o ponto de entrada da função.
Alguns exemplos clássicos de funções que podem ser implementadas de forma recursiva são
o
cálculo do fatorial de um inteiro não negativo e a sequência
de Fibonacci, que serão
explorados a seguir.
1, SE N = 0 OU N = 1
N ! =
N. (N - 1). (N - 2). . . 3. 2. 1, SE N ≥ 2
Atenção! Para visualização completa da equação utilize a rolagem
horizontal
1, SE N = 0 OU N = 1
N ! =
N. [(N - 1) !], SE N ≥ 2
Atenção! Para visualização completa da equação utilize a rolagem
horizontal
1 def
fatorial(n):
2 if n == 0 or n ==
1:
3 return 1
4 else:
5 return
n*fatorial(n-1)
Vale ressaltar que a função fatorial também poderia ter sido implementada de forma não
recursiva, como mostrado na Figura 26:
1 def
fatorial(n):
2 fat = 1
3 if n == 0 or n ==
1:
4 return
fat
5 else:
6 for x in range(2,
n + 1):
7 fat =
fat*x
8 return
fat
A SEQUÊNCIA DE FIBONACCI
1 def
fibo(n):
2 if n == 1 or n ==
2:
3 return 1
4 else:
5 return fibo(n - 1) +
fibo(n - 2)
DOCSTRINGS
Em Python, é possível definir uma string que serve como documentação de funções
definidas pelo desenvolvedor. Ao chamar o utilitário
help() passando como parâmetro a
função desejada, essa string é
exibida. Veja a Figura 28 e a Figura 29:
1 def fibo(n):
3 if n == 1 or n == 2:
4 return 1
5 else:
8 print(help(fibo))
1 fibo(n)
2 Determina o
n-ésimo
termo da sequência de Fibonacci
VERIFICANDO O APRENDIZADO
1DEF FUNC1(X):
2X = 10
3PRINT(X)
6X = 0
7PRINT(X)
8FUNC1(X)
9PRINT(X)
1DEF REC(N):
2IF N < 2:
3RETURN REC(N - 1)
6PRINT(REC(1))
D) A função não poderia ter sido definida com uma chamada a ela própria.
GABARITO
1def func1(x):
2x = 10
3print(x)
6x = 0
7print(x)
8func1(x)
9print(x)
A variável x da linha 6 é global. Mas, como existe outra variável com o mesmo nome dentro da
função func1() – na linha 2, apenas dentro da função func1(), x vale 10 –, chamamos essa
variável de local. Assim, o print da linha 7 recebe o valor da variável global (0). A execução da
linha 8 chama a função func1(), que imprime o valor de x válido dentro dela (10). Em seguida,
a execução do programa sai da função func1() e o print da linha 9 volta a enxergar a variável
global x, cujo valor é 0.
1def rec(n):
2if n < 2:
3return rec(n - 1)
6print(rec(1))
Quando o usuário tentou executar esse programa, houve um erro. Qual é a causa?
A função é recursiva, mas não apresenta parada. Ao ser chamada com o parâmetro 1, o if da
linha 2 tem condição verdadeira. Então, ocorre a chamada a rec(0). Mas rec(0) não é definido e
ocorrerá a chamada a rec(-1). E assim sucessivamente.
MÓDULO 3
Fonte: dTosh |
Shutterstock
Operações matemáticas.
ATENÇÃO
SAIBA MAIS
Chamar a função desejada, precedida do nome do módulo, com a instrução:
nome_modulo.nome_funcao(paramêtros)
>>> math.sqrt(5)
2.23606797749979
A partir desse ponto, serão apresentados os principais aspectos dos seguintes módulos:
MATH
RANDOM
SMTPLIB
TIME
usado para implementar contadores temporais.
TKINTER
MÓDULO MATH
Esse módulo provê acesso a funções matemáticas de argumentos reais. As funções
não
podem ser usadas com números complexos.
Função Retorno
cos(x) Cosseno de x
sin(x) Seno de x
pi Valor de Pi (3.141592...)
e Valor de e (2.718281...)
Atenção! Para
visualização completa da tabela utilize a rolagem horizontal
SAIBA MAIS
MÓDULO RANDOM
Esse módulo implementa geradores de números pseudoaleatórios para várias
distribuições.
NÚMEROS INTEIROS
SEQUÊNCIAS
NÚMEROS INTEIROS
SEQUÊNCIAS
Uma função para gerar uma permutação aleatória das posições na lista;
Uma função para escolher aleatoriamente sem substituição.
Função Retorno
Atenção! Para
visualização completa da tabela utilize a rolagem horizontal
A Tabela 9 mostra algumas das principais funções disponíveis para inteiros no módulo
random.
Função Retorno
randrange(stop) Um elemento selecionado aleatório de range(start, stop,
step),
mas sem
construir um objeto range.
randrange(start,
stop [,step])
Atenção! Para
visualização completa da tabela utilize a rolagem horizontal
A Tabela 10 mostra algumas das principais funções disponíveis para sequências no módulo
random.
Função Retorno
shuffle(x[,
Embaralha a sequência x no lugar.
random])
Atenção! Para
visualização completa da tabela utilize a rolagem horizontal
SAIBA MAIS
Para mais informações sobre o módulo
random, visite a biblioteca Python.
MÓDULO SMTPLIB
Esse módulo define um objeto de sessão do cliente SMTP que pode ser usado para
enviar e-mail para qualquer máquina da internet com um serviço de processamento
SMTP
ou ESMTP.
O exemplo a seguir vai permitir que você envie um e-mail a partir do
servidor SMTP do
Gmail.
Como a Google não permite, por padrão, realizar o login com a utilização do
smtplib por
considerar esse tipo de conexão mais arriscada, será
necessário alterar uma configuração de
segurança. Para resolver isso, siga as instruções
a seguir:
Depois Segurança.
Acesso a app menos
seguro.
Mude para "ativada" a opção de "Permitir aplicativos menos seguros".
Atenção!
Em algumas contas, os nomes estarão escritos no idioma inglês (Allow less secure
apps).
Para fazer seu primeiro envio, crie um programa novo no seu projeto. A Figura 31 mostra
as
importações necessárias para o envio:
1 #import dos
pacotes necessários
2 from
email.mime.multipart import MIMEMultipart
3 from
email.mime.text import MIMEText
4 import
smtplib
5
6 #criação de um
objeto de mensagem
7 msg =
MIMEMultipart()
8 texto = "Estou
enviando um email com Python"
9
10 #parâmetros
11 senha = "SUA
SENHA"
12 msg['From'] = "SEU
E-MAIL"
13 msg['To'] = "E-MAIL
DESTINO"
14 msg['Subject'] =
"ASSUNTO"
15
16 #criação do corpo da
mensagem
17 msg.attach(MIMEText(texto, 'plain'))
18
19 #criação do
servidor
20 server =
smtplib.SMTP('smtp.gmail.com: 587')
21 server.starttls()
22
24 server.login(msg['From'], senha)
25
26 #envio da
mensagem
28
29 #encerramento do
servidor
30 server.quit()
31
32 print('Mensagem
enviada com sucesso')
33
SAIBA MAIS
MÓDULO TIME
Esse módulo provê diversas funções relacionadas a tempo. Também pode ser útil
conhecer os módulos datetime e calendar. A Tabela 11 mostra algumas das
principais
funções disponíveis no módulo time.
Função Retorno
Atenção! Para
visualização completa da tabela utilize a rolagem horizontal
>>> x = time.time()
Tupla é uma sequência finita de objetos. Uma tupla é similar à estrutura de dados lista,
porém, a principal diferença é que uma tupla, após definida, não permite a adição ou
remoção de elementos.
8 tm_isdst 0, 1 ou -1
Atenção! Para
visualização completa da tabela utilize a rolagem horizontal
Tabela 12 - Atributos da classe
struct_time - Fonte: O autor (2020)
SAIBA MAIS
MÓDULO TKINTER
O pacote tkinter é a interface Python padrão para o Tk GUI (interface
gráfica com o usuário)
toolkit. Na maioria dos casos, basta importar o próprio
tkinter, mas diversos outros módulos
estão disponíveis no pacote. A
biblioteca tkinter permite a criação de janelas com elementos
gráficos,
como entrada de dados e botões, por exemplo.
O exemplo a seguir vai permitir que você crie a primeira janela com alguns elementos.
Para
isso, crie um programa novo no seu projeto. A Figura 35 mostra a criação da sua
primeira
janela, ainda sem qualquer elemento gráfico.
3 janelaPrincipal = Tk()
4 janelaPrincipal.mainloop()
3 janelaPrincipal = Tk()
5 texto.place(x = 50 y = 100)
6 janelaPrincipal.mainloop()
Veja o resultado de sua primeira janela, apenas com o texto, na Figura 37.
Fonte:Shutterstock
Figura 37 - Exibição da primeira janela com
tkinter - Fonte: O autor (2020)
Vamos agora incrementar um pouco essa janela. Para isso, vamos acrescentar uma imagem e
um botão. A imagem precisa estar na mesma pasta do seu arquivo .py.
3 def
funcClicar():
4 print("Botão
pressionado")
6 janelaPrincipal =
Tk()
7 texto = Label(master =
janelaPrincipal, text = "Minha janela exibida")
8 texto.pack()
10 pic =
PhotoImage(file="logoEstacio.gif")
11 logo = Label(master =
janelaPrincipal, image = pic)
12 logo.pack()
13
14 botao = Button(master
= janelaPrincipal, text = 'Clique', command = funcClicar)
15 botao.pack()
16
17 janelaPrincipal.mainloop()
18
Fonte:Shutterstock
Figura 39 - Segunda janela com tkinter
exibida - Fonte: O autor (2020)
Botão pressionado
SAIBA MAIS
Com um pacote pronto, o desenvolvedor pode disponibilizar esse material na internet, de forma
que qualquer pessoa possa aproveitar o código implementado. Isso foi um dos fatores que fez
com que o Python se tornasse uma das linguagens mais utilizadas no mundo atualmente.
Como forma de facilitar a distribuição dos pacotes entre os usuários, existe um grupo dentro da
comunidade Python que mantém o chamado Python Package Index, ou PyPI, que é um grande
servidor no qual os desenvolvedores podem hospedar os seus pacotes, contendo bibliotecas
e/ou módulos para que sejam baixados e instalados por outras pessoas.
É possível acessar o PyPI através do pip, um programa que pode ser instalado juntamente
com a distribuição do Python. Para isso, certifique-se de que a caixa “pip” está marcada
durante a instalação, conforme ilustrado a seguir.
Instalação do pip.
DICA
Para verificar se a sua instalação Python incluiu o pip, procure pela pasta Scripts dentro do
diretório de instalação que você escolheu para o Python. Dentro dessa pasta, localize o arquivo
pip.exe. Caso não o encontre, pesquise sobre como instalar o pip. O mais recomendado é
tentar reinstalar o Python, lembrando de marcar a opção de incluir o pip durante o processo de
instalação.
Além do pip, é necessário termos o endereço para acessar o pip dentro da variável de
ambiente PATH. O processo de instalação do python também permite incluir automaticamente
o Python no seu PATH, porém, caso não tenha feito isso, siga os passos abaixo:
Clique na tecla do Windows e escreva “Editar as variáveis de ambiente para a sua conta”.
Na janela que abrir, procure pela variável Path, selecione-a e clique no botão “Editar”.
Clique no botão “Novo” e digite o endereço da sua instalação do Python (por exemplo,
D:\Python).
Clique no botão “Novo” uma segunda vez e digite o endereço da pasta Scripts dentro da sua
instalação do Python (por exemplo, D:\Python\Scripts).
4
5
É importante que você se certifique de que a opção “Add Python to PATH” está marcada
durante a instalação, como ilustrado a seguir.
ATENÇÃO
É possível usar pacotes externos sem o uso de ambientes virtuais, porém isso pode causar
uma confusão caso você tenha vários projetos Python no seu computador.
Pesquise mais sobre ambientes virtuais e configure um em cada projeto. Não é muito difícil e
vai te ajudar a deixar o seu código mais profissional!
Para instalar um pacote externo disponível no PyPI, basta abrir o seu terminal (clique no botão
do Windows e digite “cmd” ou “prompt de comando”), ative o seu ambiente virtual (se você
estiver usando um) e digite o seguinte comando: d: \Projects\exemplo_pacotes>pip install
<nome_do_pacote>
Substitua <nome_do_pacote> pelo pacote que você deseja usar. Temos inúmeros pacotes
prontos à nossa disposição. Cada pacote normalmente possui um site que apresenta a sua
documentação, de forma similar à documentação oficial do Python.
Abaixo você encontra uma lista com alguns dos pacotes externos mais comuns e utilizados no
mercado:
Antes de começar o seu próprio módulo, é sempre recomendado pesquisar se o que você quer
fazer já existe em algum pacote popular. Se existir, procure pela documentação e instale esse
pacote.
O uso de módulos oriundos de pacotes externos é idêntico ao uso dos módulos da biblioteca
padrão, basta utilizar o import nome_do_modulo no seu código.
A)
1import math
2n = 5.9
3print(ceil(n))
A)
B)
1import math
2n = 5.9
3math.ceil(n)
4print(n)
B)
C)
1import math
2n = 5.9
3print(ceil.math(n))
C)
D)
1import math
2n = 5.9
3print(math.ceil(n))
D)
B) Tem o módulo de interface gráfica tkinter, que não permite a criação de janelas com botões.
C) Tem módulo de interface de e-mails smtplib, que não permite envio de e-mails por
servidores gratuitos.
D) Tem módulo de operações matemáticas math, que não permite operações com números
complexos.
GABARITO
A maneira correta de usar uma função de um módulo importado é: (i) importar o módulo e (ii)
chamar a função com a sintaxe nomeModulo.nomeFuncao().
MÓDULO 4
Analisar as formas de
tratamento de exceções e eventos em Python.
Fonte: dTosh |
Shutterstock
Até agora, consideramos que nossos programas tiveram seu fluxo de execução normal. Neste
módulo, vamos analisar o que acontece quando o fluxo de execução é interrompido por uma
exceção, além de controlar esse fluxo excepcional.
ERROS E EXCEÇÕES
Dois tipos básicos de erros podem acontecer em um programa em Python. Os erros de
sintaxe são aqueles que ocorrem devido ao formato incorreto de uma
instrução. Esses erros
são descobertos pelo componente do interpretador Python, chamado
analisador ou parser.
Veja exemplos na Figura 41 e na
Figura 42:
>>> print 'hello'
print 'hello'
>>> lista = [1 ; 2 ; 4]
lista = [1 ; 2 ; 4]
A divisão por 0.
Em cada caso, quando o programa atinge um estado inválido, dizemos que o interpretador
Python levanta uma exceção. Isso significa que é criado um objeto que
contém as
informações relevantes sobre o erro. A Tabela 13 traz alguns tipos comuns de
exceção:
Exceção Explicação
Atenção! Para
visualização completa da tabela utilize a rolagem horizontal
2 print(num)
File
"C:/Users/Humberto/PycharmProjects/estacio_ead/excessoes.py", line 1, in
<module>
Veja que o programa foi encerrado com uma exceção sendo levantada. Uma forma de fazer a
captura e a manipulação de exceções é usar o par de instruções try /
except.
O bloco except somente será executado se houver o levantamento de alguma
exceção.
Isso permite que o fluxo de execução continue de maneira alternativa. A Figura 45 mostra
uma
implementação possível desse exemplo:
1 try:
3 print(num)
4 except:
1 try:
2 Bloco 1
3 except:
4 Bloco 2
5 Instrução fora do
try/except
ATENÇÃO
1 try:
2 num =
eval(input("Entre com um número inteiro: "))
3 print(num)
4 except
NameError:
5 print("Entre com o
valor numérico e não letras")
Python permite que haja diversos tratamentos para diferentes tipos possíveis de
exceção. Isso pode ser feito com mais de uma cláusula
except vinculada à mesma cláusula
try. A Figura 48
mostra um exemplo de implementação da captura de exceções de múltiplos
tipos.
1 try:
3 print(num)
4 except ValueError:
5 print("Mensagem 1")
6 except IndexError:
7 print("Mensagem 2")
8 except:
9 print("Mensagem 3")
try:
2 Bloco 1
3 except Exception1:
5 except Exception2:
7 ...
8 else:
10 finally:
TRATAMENTO DE EVENTOS
O tratamento de eventos é similar ao tratamento de exceções. Assim como podemos tratar as
exceções ocorridas em tempo de execução, podemos tratar os eventos criados por ações
externas, como interações de usuário realizadas por meio de uma interface gráfica de
usuário
(GUI).
VERIFICANDO O APRENDIZADO
1 TRY:
3 PRINT(NUM)
4 EXCEPT VALUEERROR:
5 PRINT("MENSAGEM 1")
6 EXCEPT INDEXERROR:
7 PRINT("MENSAGEM 2")
8 EXCEPT:
9 PRINT("MENSAGEM 3")
GABARITO
1 try:
3 print(num)
4 except ValueError:
5 print("Mensagem 1")
6 except IndexError:
7 print("Mensagem 2")
8 except:
9 print("Mensagem 3")
Suponha que durante a execução o usuário entre com a palavra numero quando
solicitado. Assinale a opção que mostra o resultado imediato dessa ação.
Como o usuário inseriu uma palavra e não um número, a exceção não será do tipo ValueError
nem do tipo IndexError. Assim, a cláusula except a ser executada é a da linha 8, imprimindo
Mensagem 3.
CONCLUSÃO
CONSIDERAÇÕES FINAIS
Neste tema, você aprendeu a usar as estruturas de controle, sejam de decisão ou de
repetição,
foi apresentado aos conceitos de subprogramas em Python, implementou suas
próprias
funções, além de conhecer e utilizar as bibliotecas. Por fim, analisou as
formas de tratamento
de exceções e eventos. Com esse conteúdo, você com certeza terá
condições de desenvolver
aplicações muito mais complexas e com muito mais recursos.
AVALIAÇÃO DO TEMA:
REFERÊNCIAS
PERKOVIC, L. Introdução à computação usando Python: um foco no desenvolvimento de
aplicações. Rio de Janeiro: LTC, 2016.
EXPLORE+
Para ter desafios mais complexos e exercícios para treinar, recomendamos uma visita ao
website Python Brasil.
Acesse o site das bibliotecas apresentadas e busque pela documentação para que você possa
conhecer todas as funcionalidades que estão disponíveis.
CONTEUDISTA
Humberto Henriques de Arruda
CURRÍCULO LATTES