Logo Passei Direto
Buscar

3-Python estruturado

User badge image
TESTE

em

Ferramentas de estudo

Questões resolvidas

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Questões resolvidas

Prévia do material em texto

<p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 1/46</p><p>Python estruturado</p><p>Prof. Humberto Henriques de Arruda</p><p>Prof. Kleber de Aguiar</p><p>Descrição</p><p>Identificação de estruturas de controle, de decisão e de repetição na linguagem Python, bem como dos conceitos, da implementação de</p><p>subprogramas e bibliotecas e das formas de tratamento de exceções e eventos.</p><p>Propósito</p><p>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</p><p>de exceção e eventos.</p><p>Preparação</p><p>Antes de iniciar a leitura deste conteúdo, é necessário possuir uma versão de um interpretador Python e o ambiente de desenvolvimento PyCharm</p><p>(ou outro ambiente que suporte o desenvolvimento na linguagem Python). Também é preciso conhecer tipos de variáveis em Python, assim como</p><p>realizar a entrada e saída de dados em Python.</p><p>Objetivos</p><p>Módulo 1</p><p>Estruturas de decisão e repetição em Python</p><p>Descrever as estruturas de decisão e repetição em Python.</p><p>Módulo 2</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 2/46</p><p>Conceitos de subprogramas e a sua utilização em Python</p><p>Definir os principais conceitos de subprogramas e a sua utilização em Python.</p><p>Módulo 3</p><p>Bibliotecas em Python</p><p>Identificar o uso correto de recursos de bibliotecas em Python.</p><p>Módulo 4</p><p>Eventos em Python</p><p>Analisar as formas de tratamento de exceções e eventos em Python.</p><p>Programar significa, como em qualquer disciplina, aprender ferramentas que permitam desenvolver melhor a sua atividade. Ao conhecer os</p><p>conceitos básicos de programação, o estudante desenvolve habilidades iniciais para escrever seus primeiros programas. No entanto, é difícil</p><p>imaginar que aplicações profissionais sejam feitas totalmente baseadas apenas nesses conceitos básicos.</p><p>Em aplicações mais complexas, é essencial considerar a necessidade de ganhar tempo, com o computador executando as tarefas</p><p>repetitivas, assim como as demandas de manutenção e tratamento de erros. Para avançar no aprendizado da programação, você conhecerá</p><p>novas ferramentas (entre elas, as estruturas de controle, como decisão e repetição), além de subprogramas e bibliotecas, bem como formas</p><p>de tratar exceções e eventos.</p><p>Vamos começar nossa jornada acessando os códigos-fonte originais propostos para o aprendizado de Python estruturado. Baixe o arquivo</p><p>aqui, descompactando-o em seu dispositivo. Com isso, você poderá utilizar os códigos como material de apoio ao longo de sua leitura!</p><p>Introdução</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/docs/python_estruturado.rar</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 3/46</p><p>1 - Estruturas de decisão e repetição em Python</p><p>Ao �nal deste módulo, você será capaz de descrever as estruturas de decisão e repetição em Python.</p><p>Vamos começar!</p><p>Emprego de estruturas de decisão e repetição</p><p>Estruturas de decisão</p><p>Tratamento das condições</p><p>As estruturas de controle permitem selecionar quais partes do código (chamadas de estruturas de decisão) serão executadas e repetir blocos de</p><p>instruções com base em algum critério, como uma variável de controle ou a validade de alguma condição (denominadas estruturas de repetição).</p><p>Neste módulo, vamos conhecer as estruturas de decisão e de repetição em Python.</p><p>As estruturas de decisão e de repetição possuem sintaxes bastante semelhantes em C e em Python. Mesmo com essa grande semelhança, existe</p><p>uma diferença crítica no tratamento das condições.</p><p>Diferentemente da linguagem C, Python oferece o tipo bool. Por isso, cabe ressaltar a diferença de comportamento das duas linguagens nesse</p><p>tratamento.</p><p>Python C</p><p>Existe o tipo bool Não existe o tipo bool</p><p></p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 4/46</p><p>Python C</p><p>True Qualquer valor diferente de 0 (zero)</p><p>False 0 (zero) ou vazio</p><p>Tabela: Tratamento das condições</p><p>Elaborada por Humberto Henriques de Arruda</p><p>Atenção!</p><p>Observe que o fato de haver o tipo bool em Python permite que as condições sejam tratadas como verdadeiras ou falsas, o que não é exatamente</p><p>igual em C.</p><p>As estruturas de decisão if, if-else e elif</p><p>Em Python, é possível utilizar as estruturas de decisão if e if-else da mesma forma que em C. A diferença principal é o modo de delimitar os blocos</p><p>de instruções relativos a cada parte da estrutura.</p><p>Observe as duas tabelas a seguir:</p><p>Python C</p><p>if <condição>: if <condição> {</p><p>Instruções com 4 espaços de indentação A indentação não é exigida</p><p>Instrução fora do if }</p><p>Tabela 2 - Estruturas de decisão simples</p><p>Elaborada por Humberto Henriques de Arruda</p><p>Python C</p><p>if <condição>: if <condição> {</p><p>Instruções com 4 espaços de indentação (caso a condição seja</p><p>verdadeira)</p><p>Bloco 1 (caso a condição seja verdadeira, a indentação não é</p><p>exigida)</p><p>else: } else {</p><p>Instruções com 4 espaços de indentação (caso a condição seja falsa) Bloco 2 (caso a condição seja falsa). A indentação não é exigida</p><p>Instrução fora do if }</p><p>Estruturas de decisão compostas</p><p>Elaborada por Humberto Henriques de Arruda</p><p>Python também oferece a estrutura elif, que permite o teste de duas condições de forma sequencial. Essa estrutura não existe em C, sendo</p><p>necessário o encadeamento de estruturas if-else.</p><p>Em geral, o formato da estrutura elif é:</p><p>Python </p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 5/46</p><p>A estrutura elif.</p><p>Veja uma implementação possível com a estrutura elif no emulador a seguir (trata-se do código 1 no arquivo disponibilizado na introdução deste</p><p>texto). Clique em Executar:</p><p>Perceba que a indentação precisa ser ajustada, uma vez que o último else é relativo ao elif. Por isso, eles precisam estar alinhados.</p><p>Estruturas de repetição</p><p>Estruturas de repetição for</p><p>A estrutura de repetição for tem funcionamento muito semelhante nas linguagens C e Python. Contudo, a sintaxe é diferente nas duas linguagens.</p><p>Além disso, existe mais flexibilidade em Python, já que a repetição pode ser controlada por uma variável não numérica.</p><p>Antes de detalharmos o for, vamos conhecer uma função de Python que gera uma lista de valores numéricos. Essa lista nos ajudará a verificar a</p><p>repetição e deixará mais claro o entendimento do laço.</p><p>As listas do tipo range()</p><p>Ao chamar o método range(), Python cria uma sequência de números inteiros, desde uma maneira simples até a mais complexa. Observe:</p><p>Simples</p><p>Exercício 1 dTUTORIAL COPIAR</p><p>Python3</p><p>null</p><p>null</p><p></p><p>if <condição 1>:</p><p>Bloco de código que será executado caso condição seja True</p><p>elif <condição 2>:</p><p>Bloco de código que será executado caso condição 1 seja False e condição 2 seja True</p><p>else:</p><p>Bloco de código que será executado caso condição 1 seja False e condição 2 seja False</p><p>idade = eval(input('Informe a idade da criança: \n'))</p><p>if idade < 5:</p><p>print('A criança deve ser vacinada contra a gripe.')</p><p>print('Procure o posto de saúde mais próximo.')</p><p>elif idade == 5:</p><p>i t('A i t á di í l b ')</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 6/46</p><p>Ela pode ser chamada de maneira simples, tendo apenas com um argumento. Nesse caso, a sequência começará em 0 e será incrementada de uma</p><p>unidade até o limite do parâmetro passado (exclusive). Exemplo: range(3) cria a sequência (0, 1, 2).</p><p>Não iniciadas em 0</p><p>Para que a sequência não comece em 0, pode-se informar o início e o fim como parâmetros. Lembre-se de que o parâmetro fim não entra na lista</p><p>(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).</p><p>Indicando início, �m e passo</p><p>Também é possível criar sequências mais complexas indicando, na ordem, os parâmetros de início, fim e passo. O passo é o valor que será</p><p>incrementado de um termo para o próximo. Exemplo: range(2, 9,</p><p>3) cria a sequência (2, 5, 8).</p><p>A sintaxe da estrutura for</p><p>A estrutura for tem a seguinte sintaxe em Python:</p><p>Python </p><p>Cabe ressaltar a diferença de sintaxe entre as linguagens C e Python. Veja a tabela a seguir:</p><p>Python C</p><p>for <variável> in <sequência>: for (inicialização; condição; incremento ou decremento){</p><p>Instruções com 4 espaços de indentação Bloco de instruções a ser repetido. A indentação não é exigida</p><p>Instrução fora do for }</p><p>A estrutura for</p><p>Elaborada por Humberto Henriques de Arruda</p><p>Vamos analisar um exemplo simples em Python: imprimir todos os elementos de uma sequência criada com a chamada range(). Observe adiante</p><p>uma possível implementação desse exemplo (código 2 no arquivo disponibilizado na introdução deste conteúdo). Clique em Executar no emulador</p><p>seguinte:</p><p>Exercício 2 dTUTORIAL COPIAR</p><p>Python3</p><p>for <variável> in <sequência>:</p><p>Bloco que será repetido para todos os itens da sequência</p><p>Instrução fora do for</p><p>for item in range(2, 9, 3):</p><p>print(item)</p><p>1</p><p>2</p><p>3</p><p>1</p><p>2</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 7/46</p><p>1. A linha 1 mostra a criação do laço com a variável item percorrendo a sequência (2, 5, 8), que é criada pela chamada range(2, 9, 3);</p><p>2. A linha 2 indica a instrução que será executada para cada repetição desse laço. O laço for executa a instrução da linha 2 três vezes, uma para</p><p>cada elemento da sequência (2, 5, 8). O resultado está exemplificado na tabela seguinte.</p><p>Sequência 2 5 8</p><p>Iteração 1 do laço item = 2</p><p>Iteração 2 do laço item = 5</p><p>Iteração 3 do laço item = 8</p><p>Um exemplo do for em Python</p><p>Elaborada por Humberto Henriques de Arruda</p><p>O laço for com uma string</p><p>Python também permite que a repetição aconteça ao longo de uma string. Para isso, basta lembrar que a string é uma sequência de caracteres</p><p>individuais.</p><p>Suponha que você queira soletrar o nome informado pelo usuário. Uma possível implementação está demonstrada a seguir (no arquivo</p><p>disponibilizado na introdução, trata-se do código 3).</p><p>Informe um nome (string) no campo Input do emulador e clique em Executar:</p><p>null</p><p>null</p><p></p><p>Exercício 3 dTUTORIAL COPIAR</p><p>Python3</p><p>null</p><p>null</p><p>nome = input("Entre com seu nome: \n")</p><p>for letra in nome:</p><p>print(letra)</p><p>1</p><p>2</p><p>3</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 8/46</p><p>1. A linha 1 faz com que a palavra inserida pelo usuário seja armazenada na variável nome;</p><p>2. A linha 2 mostra a criação do laço, com a variável letra percorrendo a sequência de caracteres armazenada na variável nome;</p><p>3. A linha 3 indica a instrução que será executada para cada repetição desse laço. O laço for executará a instrução da linha 3 tantas vezes quanto</p><p>forem os elementos da sequência que está na variável nome.</p><p>Uso do laço for com qualquer sequência</p><p>Até agora estudamos o uso do laço for com iterações sobre strings e sequências numéricas, mas o Python permite ainda mais que isso!</p><p>Podemos utilizar o laço for com iterações sobre qualquer sequência - e não somente as numéricas e as strings.</p><p>Observe este exemplo (código 4 do arquivo disponibilizado):</p><p>Clique em Executar no emulador anterior e veja o resultado da execução do código.</p><p>Estrutura de repetição while</p><p>A estrutura de repetição while tem funcionamento e sintaxe muito semelhantes nas linguagens C e Python. Observe a comparação entre as duas</p><p>linguagens:</p><p>Python C</p><p>while <condição>: while <condição>{</p><p>Instruções com 4 espaços de indentação Bloco de instruções a ser repetido. A indentação não é exigida.</p><p></p><p>Exercício 4 dTUTORIAL COPIAR</p><p>Python3</p><p>null</p><p>null</p><p></p><p>nomes = ['Laura', 'Lis', 'Guilherme', 'Enzo', 'Arthur']</p><p>for nome in nomes:</p><p>print(nome)</p><p>1</p><p>2</p><p>3</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 9/46</p><p>Python C</p><p>Instrução fora do while }</p><p>Tabela: Comparação do while em Python e em C</p><p>Elaborada por Humberto Henriques de Arruda</p><p>Como exemplo inicial do uso do laço while, vamos analisar um programa em que o usuário precisa digitar a palavra “sair” para que esse laço seja</p><p>encerrado.</p><p>Uma possível implementação desse exemplo em Python aparece no código adiante (código 5 no arquivo disponibilizado neste texto).</p><p>Atenção!</p><p>Para que o exemplo seja executado corretamente, deve-se inserir, no campo Input do emulador, uma sequência de palavras, uma por linha, sendo</p><p>que a última tem de ser a palavra “sair”.</p><p>No emulador seguinte, clique em Executar:</p><p>1. A linha 1 representa a solicitação ao usuário para que ele insira uma palavra a ser armazenada na variável palavra;</p><p>2. A linha 2 cria o laço while, que depende da condição <valor da variável palavra ser diferente de ‘sair’>;</p><p>3. A linha 3 será repetida enquanto a condição for verdadeira, ou seja, enquanto o valor da variável palavra for diferente de ‘sair’. Quando esses</p><p>valores forem iguais, a condição do laço while será falsa e o laço, encerrado;</p><p>4. A linha 4 representa a impressão da mensagem fora do laço while.</p><p>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</p><p>chega a entrar no laço while.</p><p>Em C, existe outra estrutura muito semelhante ao while chamada de do-while. A diferença básica entre elas é o momento em que a condição é</p><p>testada, como podemos verificar a seguir:</p><p>No laço while, a condição é testada antes da iteração.</p><p>Exercício 5 dTUTORIAL COPIAR</p><p>Python3</p><p>null</p><p>null</p><p></p><p>palavra = input('Entre com uma palavra: \n ')</p><p>while palavra != 'sair':</p><p>palavra = input('Digite sair para encerrar o laço: \n')</p><p>print('Você digitou sair e agora está fora do laço')</p><p>1</p><p>2</p><p>3</p><p>4</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 10/46</p><p>O laço while testa e executa caso a condição seja verdadeira.</p><p>No laço do-while, a condição é testada após a iteração.</p><p>O laço do-while executa e testa.</p><p>Infelizmente, a estrutura do-while não existe em Python. Isso não chega a ser um grande problema, porque podemos adaptar nosso programa e</p><p>controlar as repetições com o laço while.</p><p>O laço while in�nito</p><p>Laços infinitos são úteis quando queremos executar um bloco de instruções indefinidamente.</p><p>O laço while infinito tem o seguinte formato:</p><p>Python </p><p>Exemplo</p><p>Você deseja criar uma aplicação que permaneça por meses ou anos sendo executada, registrando a temperatura ou a umidade de um ambiente.</p><p>Logicamente, você possui essa informação disponível a partir da leitura de algum sensor. Você, portanto, precisa tomar cuidado e ter a certeza de</p><p>que seu uso é realmente necessário para evitar problemas de consumo excessivo de memória.</p><p>As instruções auxiliares break, continue e pass</p><p>A instrução break</p><p>A instrução break funciona da mesma maneira em C e em Python. Ela interrompe as repetições dos laços for e while. Quando a execução do</p><p>programa chega a uma instrução break, a repetição é encerrada e o fluxo do programa segue a partir da primeira instrução seguinte ao laço.</p><p>Para exemplificarmos o uso dessa instrução, vamos voltar ao primeiro exemplo do laço while, utilizando o laço infinito. O laço será encerrado</p><p>quando o usuário inserir a palavra ‘sair’.</p><p>Atenção!</p><p>Para que o exemplo seja executado corretamente, deve-se inserir, no campo Input do emulador, uma sequência de palavras, uma por linha, sendo</p><p>que a última tem de ser a palavra “sair”.</p><p>No emulador abaixo, clique em Executar (trata-se do código 6 do arquivo disponibilizado):</p><p></p><p>Exercício 6 dTUTORIAL COPIAR</p><p>Python3</p><p>while True:</p><p>Bloco que será repetido indefinidamente</p><p>while True:</p><p>palavra = input('Entre com uma palavra: \n')</p><p>1</p><p>2</p><p>1</p><p>2</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 11/46</p><p>Caso haja vários laços aninhados, o break será relativo ao laço em que estiver inserido.</p><p>Veja o código a seguir:</p><p>Python </p><p>A instrução continue</p><p>A instrução continue também funciona da mesma maneira em C e em Python. Ela atua sobre</p><p>as repetições dos laços for e while, como a instrução</p><p>break, mas não interrompe todas as repetições do laço. Essa instrução interrompe apenas a iteração corrente, fazendo com que o laço passe para a</p><p>próxima iteração.</p><p>O exemplo a seguir imprime todos os números inteiros de 1 até 10, pulando apenas o 5. Veja sua implementação (código 8 do arquivo</p><p>disponibilizado) no emulador abaixo:</p><p>null</p><p>null</p><p></p><p>Exercício 8 dTUTORIAL COPIAR</p><p>Python3</p><p>null</p><p>null</p><p>if palavra == 'sair':</p><p>break</p><p>print('Você digitou sair e agora está fora do laço')</p><p>while True:</p><p>print('Você está no primeiro laço.')</p><p>opcao1 = input('Deseja sair dele? Digite SIM para isso. \n')</p><p>if opcao1 == 'SIM':</p><p>break # este break é do primeiro laço</p><p>else:</p><p>for num in range(1, 11):</p><p>if num == 5:</p><p>continue</p><p>else:</p><p>print(num)</p><p>print('Laço encerrado')</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>3</p><p>4</p><p>5</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 12/46</p><p>Para ressaltar a diferença entre as instruções break e continue, vamos alterar a linha 3 do código anterior, trocando a instrução continue pela</p><p>instrução break. Clique em Executar no emulador e veja a nova execução. Essa alteração está no arquivo disponibilizado neste texto (código 9).</p><p>A instrução pass</p><p>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</p><p>verdadeira. Assim, podemos concentrar as instruções no caso em que a condição é falsa.</p><p>Suponha que queiramos imprimir somente os números ímpares entre 1 e 10. Uma implementação possível está no emulador seguinte (código 10 do</p><p>arquivo disponibilizado):</p><p>Claramente, seria possível reescrever a condição do if-else para que pudéssemos transformá-lo em um if simples, sem else. Entretanto, o objetivo</p><p>aqui é mostrar o uso da instrução pass.</p><p>Agora que já vimos os principais conceitos relativos às estruturas de decisão e de repetição, vamos testar seus conhecimentos.</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>1. Considere o seguinte trecho de um programa escrito em Python:</p><p>Python </p><p></p><p>Exercício 9 dTUTORIAL COPIAR</p><p>Python3</p><p>null</p><p>null</p><p></p><p>for num in range(1, 11):</p><p>if num % 2 == 0:</p><p>pass</p><p>else:</p><p>print(num)</p><p>print('Laço encerrado')</p><p>s = 01</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 13/46</p><p>Assinale a opção que apresenta corretamente o que será impresso na tela.</p><p>Parabéns! A alternativa C está correta.</p><p>O laço for vai ser repetido cinco 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</p><p>for, o que a levará 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</p><p>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 estes acréscimos: 0 + 3 + 6 + 9 + 12.</p><p>Assim, ela termina o laço com o valor 30, que será impresso pela instrução print(s).</p><p>Questão 2</p><p>Considere o seguinte trecho de um programa escrito em Python:</p><p>Python </p><p>Marque a opção que apresenta corretamente o que será impresso na tela.</p><p>A 0   3   9   18   30</p><p>B 0   3   6   9   12</p><p>C 30</p><p>D 45</p><p>E 3 6 9 12 15</p><p>A 9</p><p>B 3   6</p><p>for i in range(5):</p><p>s += 3*i</p><p>print(s)</p><p>s = 0</p><p>a = 1</p><p>while s < 5:</p><p>s = 3*a</p><p>a += 1</p><p>print(s)</p><p>2</p><p>3</p><p>4</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 14/46</p><p>Parabéns! A alternativa B está correta.</p><p>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), enquanto a</p><p>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</p><p>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</p><p>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 é testada novamente</p><p>e se revela falsa, pois s tem o valor 6 (maior que 5). Com isso, o laço while é encerrado e nada mais é impresso. Por isso, foram impressos os</p><p>valores 3 e 6.</p><p>2 - Conceitos de subprogramas e a sua utilização em Python</p><p>Ao �nal deste módulo, você será capaz de de�nir os principais conceitos de subprogramas e a sua utilização em Python.</p><p>Vamos começar!</p><p>Emprego de procedimentos e funções</p><p>C 3   3</p><p>D 3   6   9   12</p><p>E 0 3 6 9</p><p></p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 15/46</p><p>Visão geral</p><p>Características gerais dos subprogramas</p><p>Os subprogramas são elementos fundamentais dos programas. Por isso, eles são importantes no estudo de linguagens de programação.</p><p>Neste módulo, abordaremos os conceitos de subprogramas, como características gerais, passagem de parâmetros e recursividade. Além disso,</p><p>falaremos sobre a utilização deles em Python.</p><p>Todos os subprogramas estudados neste módulo, com base em Sebesta (2018), têm as seguintes características:</p><p>1. Cada subprograma tem um único ponto de entrada.</p><p>2. A unidade de programa chamadora é suspensa durante a execução do subprograma chamado, o que significa que existe apenas um subprograma</p><p>em execução em determinado momento.</p><p>3. Quando a execução do subprograma termina, o controle sempre retorna para o chamador.</p><p>De�nições básicas</p><p>As definições básicas, segundo Sebesta (2018), estabelecem que:</p><p>Um subprograma é definido quando o desenvolvedor descreve a interface e as ações da abstração desse subprograma.</p><p>O subprograma é chamado quando uma instrução traz um pedido explícito para sua execução.</p><p>O subprograma estará ativo após o início de sua execução, que se dá a partir da sua chamada, e enquanto ele não for concluído.</p><p>O cabeçalho do subprograma é a primeira parte da definição em que podem ser especificados o nome, os parâmetros e o tipo de retorno do</p><p>subprograma.</p><p>Em C, o cabeçalho dos subprogramas (chamados de funções) traz, na ordem, o tipo de retorno, o nome e a lista de parâmetros, como pode ser</p><p>verificado adiate:</p><p>�oat calculaIMC (int peso, �oat altura)</p><p>Em Python, as funções definidas pelo desenvolvedor devem ser precedidas pela palavra reservada def. Não são especificados o tipo de retorno e os</p><p>tipos dos parâmetros, como no exemplo a seguir:</p><p>def calculaIMC (peso, altura)</p><p>Em Python, as sentenças de função def são executáveis. Isso implica que a função só pode ser chamada após a execução da sentença def.</p><p>Veja o exemplo a seguir (código 11 do arquivo disponibilizado). Digite 1 ou 2 no campo Input do emulador e, depois, em Executar:</p><p>Exercício 10 dTUTORIAL COPIAR</p><p>Python3</p><p>escolha = input("Escolha uma opção de função: 1 ou 2\n")1</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 16/46</p><p>A função func1() só pode ser chamada caso a variável escolha seja igual a 1. Ou seja, o usuário deverá inserir 1 quando for solicitado (na linha 1)</p><p>para que a linha 9 possa ser executada sem que um erro seja gerado .</p><p>Parâmetros, procedimentos e funções</p><p>Parâmetros</p><p>Usualmente, um subprograma executa cálculos e operações a partir de dados que ele deve processar. Há duas maneiras de o subprograma obter</p><p>esses dados: acessar variáveis não locais, mas visíveis para o subprograma, ou pela passagem de parâmetros.</p><p>Quando o subprograma recebe os parâmetros adequados, ele pode ser executado com quaisquer valores recebidos. Porém, quando ele manipula</p><p>variáveis não locais, uma forma de evitar alterações indevidas nessas variáveis é fazer cópias locais delas.</p><p>De acordo com Sebesta (2018), o acesso sistemático a variáveis não locais pode diminuir a confiabilidade do programa. São denominados</p><p>parâmetros formais aqueles do cabeçalho</p><p>do subprograma.</p><p>Quando o subprograma é chamado, é necessário escrever o nome dele e a lista de parâmetros a serem vinculados a seus parâmetros formais, que</p><p>são denominados parâmetros reais ou argumentos.</p><p>No exemplo anterior, em que usamos o emulador, há o cabeçalho da função func1 na linha 3 com o parâmetro formal x. Na linha 9, a função func1 é</p><p>chamada com o parâmetro real 10.</p><p>Em Python, é possível estabelecer valores padrão para os parâmetros formais. O valor padrão é usado quando a chamada da função ocorre sem</p><p>nenhum parâmetro real.</p><p>Veja o exemplo de definição e chamada da função taxímetro no próximo código (no arquivo disponibilizado, trata-se do código 12):</p><p>null</p><p>null</p><p></p><p>Exercício 11 dTUTORIAL COPIAR</p><p>Python3</p><p>null</p><p>if escolha == "1":</p><p>def func1(x):</p><p>return x + 1</p><p>s = func1(10)</p><p>def taximetro(distancia, multiplicador=1):</p><p>largada = 3</p><p>km_rodado = 2</p><p>valor = (largada + distancia *</p><p>km_rodado) * multiplicador</p><p>return valor</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 17/46</p><p>1. Observe que, mesmo com a definição da linha 1 de dois parâmetros formais, a chamada da função na linha 9 ocorre apenas com um parâmetro</p><p>real.</p><p>2. A palavra reservada return indica que a função retorna algum valor. Isso implica que o valor retornado seja armazenado em uma variável do</p><p>programa chamador (como ocorre na linha 8) ou utilizado como parâmetro para outra função.</p><p>Atenção!</p><p>Retornar um valor é diferente de imprimir na tela. Ao utilizar a função print(), ocorre apenas a impressão de algo nela, o que não significa o retorno</p><p>de qualquer função definida pelo usuário.</p><p>Procedimentos e funções</p><p>Os subprogramas podem ser procedimentos e funções. De acordo com Sebesta (2018):</p><p>Procedimentos</p><p>São aqueles que não retornam valores.</p><p>Funções</p><p>São aquelas que retornam valores.</p><p>Na maioria das linguagens que não explicita a diferença entre ambos, as funções podem ser definidas sem retornar qualquer valor, tendo um</p><p>comportamento de procedimento. Esse é o caso de Python.</p><p>Veja o código a seguir (código 13 no arquivo disponibilizado na introdução deste texto):</p><p>null</p><p></p><p></p><p>Exercício 12 dTUTORIAL COPIAR</p><p>Python3</p><p>null</p><p>def func1(x):</p><p>x = 10</p><p>print(f'Função func1 - x = {x}')</p><p>def func2(x):</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 18/46</p><p>As funções func1(x) e func2(x) não possuem qualquer retorno. Ou seja, elas são funções com comportamento de procedimentos.</p><p>Ambientes de referenciamento local</p><p>Variáveis locais</p><p>Quando um subprograma define as próprias variáveis, ele estabelece ambientes de referenciamento local. Essas variáveis são chamadas de</p><p>variáveis locais, nas quais seu escopo usualmente é o corpo do subprograma.</p><p>As variáveis locais podem ser:</p><p>Dinâmicas da pilha</p><p>São vinculadas ao armazenamento no início da execução do subprograma e desvinculadas quando essa execução termina. As variáveis locais</p><p>dinâmicas da pilha têm diversas vantagens, e a principal delas é a flexibilidade. Suas principais desvantagens são o custo do tempo – para alocar,</p><p>inicializar (quando necessário) e liberar tais variáveis para cada chamada ao subprograma – e o fato de que os acessos a essas variáveis locais</p><p>devem ser indiretos, enquanto os acessos às variáveis estáticas podem ser diretos.</p><p>Estáticas</p><p>São vinculadas a células de memória antes do início da execução de um programa e permanecem vinculadas a essas mesmas células até que a</p><p>execução do programa termine. Elas são um pouco mais eficientes que as variáveis locais dinâmicas da pilha, já que não é necessário tempo para</p><p>alocar ou liberar essas variáveis. Sua maior desvantagem é a incapacidade de suportar recursão, como vamos explicado mais à frente.</p><p>Atenção!</p><p>Nas linguagens C e C++, as variáveis locais são dinâmicas da pilha, a menos que elas sejam especificamente declaradas como static. Todas as</p><p>variáveis locais em Python são dinâmicas da pilha. As variáveis globais são declaradas em definições de método; além disso, qualquer variável</p><p>declarada global em um método precisa ser definida fora dele. Caso haja uma atribuição à variável local com o mesmo nome de uma variável global,</p><p>a global é implicitamente declarada como local.</p><p>Voltemos ao exemplo do tópico Procedimentos e funções. Vamos detalhar as funções func1(x) e func2(x):</p><p>1. 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;</p><p>2. Analogamente, a função func2(x) – definida nas linhas 6, 7 e 8 – recebe o parâmetro x e tem uma variável de mesmo nome, mas com valor</p><p>atribuído 20;</p><p>3. O programa principal tem uma variável global de mesmo nome x, cujo valor atribuído é 0, na linha 11;</p><p>4. 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 ser</p><p>executada, cada uma dessas funções tem a própria variável local a quem todas as referências internas são feitas.</p><p>5. Mesmo com a variável global tendo valor nulo, cada variável local das funções func1(x) e func2(x) tem o próprio valor. Não há alterações na</p><p>variável global mesmo com as atribuições das linhas 2 e 7.</p><p>null</p><p></p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 19/46</p><p>Para alterar a variável global x, seria necessário explicitar, dentro de cada função, que o nome x é referente a ela. Isso pode ser feito com a palavra</p><p>reservada global. Além de explicitar a referência à variável global, as funções func1(x) e func2(x) não recebem mais os parâmetros de mesmo nome,</p><p>já que fazem referência à variável global.</p><p>Veja como ficaria o nosso exemplo com essa pequena alteração no código anterior (trata-se do código 14 no arquivo disponibilizado):</p><p>Observando a execução do código anterior, percebe-se que o print() do programa principal está na linha 16, depois da chamada à função func2(x).</p><p>Dessa forma, a variável global x, alterada na execução da func2(x), fica com o valor 20 quando a execução volta ao programa principal.</p><p>Subprogramas aninhados</p><p>Em Python (e na maioria das linguagens funcionais), é permitido aninhar subprogramas. Contudo, as linguagens C e C++ não permitem essa prática.</p><p>Veja o exemplo a seguir (código 15 no arquivo disponibilizado neste conteúdo). No campo Input do emulador, digite o valor que será atribuído à</p><p>variável dist e clique em Executar:</p><p>Exercício 13 dTUTORIAL COPIAR</p><p>Python3</p><p>null</p><p>null</p><p></p><p>Exercício 14 dTUTORIAL COPIAR</p><p>Python3</p><p>null</p><p>null</p><p>def func1():</p><p>global x</p><p>x = 10</p><p>print(f'Função func1 - x = {x}')</p><p>def taximetro(distancia):</p><p>def calculaMult():</p><p>if distancia < 5:</p><p>return 1.2</p><p>else:</p><p>t 1</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 20/46</p><p>A função taximetro() tem, dentro de sua definição, a definição de outra função denominada calculaMult(). Na linha 7, a função calculaMult() é</p><p>chamada, e o seu retorno é armazenado na variável multiplicador.</p><p>Métodos de passagens de parâmetros</p><p>Os métodos de passagem de parâmetros são as maneiras existentes para transmiti-los ou recebê-los dos subprogramas chamados. Os parâmetros</p><p>podem ser passados principalmente por:</p><p>Valor</p><p>O parâmetro formal funciona como uma variável local do subprograma, sendo inicializado com o valor do parâmetro real. Dessa maneira, não ocorre</p><p>uma alteração na variável externa ao subprograma caso ela seja passada como parâmetro.</p><p>Referência</p><p>Em vez de passar o valor do parâmetro real, é transmitido um caminho de acesso (normalmente, um endereço) para o subprograma chamado. Isso</p><p>fornece o caminho de acesso para a célula que armazena o parâmetro real. Assim, o subprograma chamado pode acessar esse parâmetro na</p><p>unidade de programa chamadora.</p><p>Saiba mais</p><p>Na linguagem C, utilizamos ponteiros para</p><p>fazer a passagem de parâmetros por referência. As transmissões de parâmetros que não forem ponteiros</p><p>utilizarão a passagem por valor.</p><p>O método de passagem de parâmetros de Python é chamado de passagem por atribuição. Como todos os valores de dados são objetos, toda</p><p>variável é uma referência para um objeto.</p><p>Ao se estudar a orientação a objetos, fica mais clara a diferença entre a passagem por atribuição e a passagem por referência. Por enquanto,</p><p>podemos entender que a passagem por atribuição é uma passagem por referência, pois os valores de todos os parâmetros reais são referências.</p><p>Funções recursivas</p><p>Recursividade</p><p>Uma função recursiva é aquela que chama a si mesma. Veja o exemplo da função regressiva() (código 16 do arquivo disponibilizado):</p><p>Python </p><p>Exemplo de função recursiva.</p><p>Na implementação da função regressiva(), tendo x como parâmetro, ela mesma é chamada com o parâmetro x – 1. Vamos analisar a chamada</p><p>regressiva(2):</p><p></p><p>def regressiva(x):</p><p>print(x)</p><p>regressiva(x - 1)</p><p>1</p><p>2</p><p>3</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 21/46</p><p>Ao chamar a regressiva(2), o valor 2 é exibido na tela pela linha 2 e ocorre uma nova chamada da função regressiva() na linha 3 com o parâmetro</p><p>1. Vamos continuar com esse caminho de execução da regressiva(1).</p><p>Ao chamar a 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</p><p>0.</p><p>Ao chamar a regressiva(0), o valor 0 é exibido na tela e ocorre uma nova chamada da função regressiva com o parâmetro -1 - e assim</p><p>sucessivamente.</p><p>Atenção!</p><p>Conceitualmente, essa execução será repetida indefinidamente até que haja algum erro por falta de memória. Perceba que não definimos</p><p>adequadamente uma condição de parada para a função regressiva(), o que leva a esse comportamento ruim.</p><p>Em Python, o interpretador pode interromper a execução indefinida, mas essa não é uma boa prática. Uma forma de contornar esse problema é</p><p>definir adequadamente uma condição de parada como a do exemplo a seguir (código 17 do arquivo disponibilizado neste texto):</p><p>Python </p><p>Função recursiva com condição de parada.</p><p>Uma função recursiva que termina tem:</p><p>1. Um ou mais casos básicos que funcionam como condição de parada da recursão.</p><p>2. Uma ou mais chamadas recursivas que têm como parâmetros valores mais próximos do(s) caso(s) básico(s) que o ponto de entrada da função.</p><p>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</p><p>sequência de Fibonacci, que serão explorados a seguir.</p><p>A função recursiva fatorial</p><p>A função matemática fatorial de um inteiro não negativo n é calculada por:</p><p>Rotacione a tela. </p><p>Além disso, ela pode ser definida recursivamente por:</p><p>n! =∣</p><p>1,  se n = 0 ou n = 1</p><p>n. (n − 1) ⋅ (n − 2) … 3.2.1,  se n ≥ 2</p><p>def regressiva(x):</p><p>if x <= 0:</p><p>print("Acabou")</p><p>else:</p><p>print(x)</p><p>regressiva(x-1)</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 22/46</p><p>Rotacione a tela. </p><p>Observe agora uma implementação recursiva da função fatorial em Python (trata-se do código 18 no arquivo disponibilizado):</p><p>Python </p><p>Função recursiva fatorial.</p><p>Vale ressaltar que a função fatorial também poderia ter sido implementada de forma não recursiva, como é mostrado a seguir (código 19 no arquivo</p><p>disponibilizado):</p><p>\</p><p>Python </p><p>Função fatorial com laço for.</p><p>Porém, neste tópico, o intuito principal é explorar a recursividade.</p><p>A sequência de Fibonacci</p><p>A sequência de Fibonacci é: 1, 1, 2, 3, 5, 8, 13, 21... Os dois primeiros termos são 1; a partir do 3º termo, cada termo é a soma dos dois anteriores.</p><p>Veja uma possível implementação recursiva de função que determina o n-ésimo termo da sequência de Fibonacci (no arquivo disponibilizado, trata-</p><p>se do código 20):</p><p>Python </p><p>Função recursiva para sequência de Fibonacci.</p><p>1. A linha 2 traz as condições de parada.</p><p>n! =∣</p><p>1,  se n = 0 ou n = 1</p><p>n ⋅ [(n − 1)!],  se n ≥ 2</p><p>def fatorial(n):</p><p>if n == 0 or n == 1:</p><p>return 1</p><p>else:</p><p>return n*fatorial(n-1)</p><p>def fatorial(n):</p><p>fat = 1</p><p>if n == 0 or n == 1:</p><p>return fat</p><p>else:</p><p>for x in range(2, n + 1):</p><p>def fibo(n):</p><p>if n == 1 or n == 2:</p><p>return 1</p><p>else:</p><p>return fibo(n - 1) + fibo(n - 2)</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 23/46</p><p>2. A linha 5 traz as chamadas recursivas para calcular os dois termos anteriores da sequência.</p><p>Documentação de funções – Docstrings</p><p>Docstrings</p><p>Em Python, é possível definir uma string que serve como documentação de funções definidas pelo desenvolvedor. Ao chamar o utilitário help()</p><p>passando como parâmetro a função desejada, essa string é exibida.</p><p>Verifique o código (no arquivo disponibilizado, trata-se do código 21) e a sua saída:</p><p>Python </p><p>Docstring da função fibo().</p><p>Python </p><p>Exibição da docstring da função fibo().</p><p>1. No codigo “Docstring da função fibo()”, a linha 2 mostra a declaração da docstring.</p><p>2. A linha 8 exibe a impressão na tela da chamada help(fibo). No codigo “Exibição da docstring da função fibo()”, está o resultado da execução desse</p><p>programa.</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>#Determina o n-ésimo termo da sequência de Fibonacci</p><p>if n == 1 or n == 2:</p><p>return 1</p><p>else:</p><p>return fibo(n - 1) + fibo(n - 2)</p><p>fibo(n)</p><p>2 Determina o n-ésimo termo da sequência de Fibonacci</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>1</p><p>2</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 24/46</p><p>Considere o seguinte trecho de um programa escrito em Python:</p><p>Python </p><p>O que acontecerá quando o usuário tentar executar esse programa?</p><p>Parabéns! A alternativa C está correta.</p><p>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</p><p>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</p><p>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</p><p>da linha 9 volta a enxergar a variável global x, cujo valor é 0.</p><p>Questão 2</p><p>Considere o seguinte trecho de um programa com uma implementação de função recursiva escrito em Python:</p><p>Python </p><p>Quando o usuário tentou executar esse programa, houve um erro. Qual é a causa?</p><p>A Ocorrerá um erro, e o programa não será executado.</p><p>B Ocorrerá um erro durante a execução.</p><p>C Será impresso na tela: 0   10   0.</p><p>D Será impresso na tela: 0   10   10.</p><p>E 10 10 10</p><p>A Na linha 2, o if está escrito de maneira errada.</p><p>def func1(x):</p><p>x = 10</p><p>print(x)</p><p>x = 0</p><p>def rec(n):</p><p>if n < 2:</p><p>return rec(n - 1)</p><p>print(rec(1))</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 25/46</p><p>Parabéns! A alternativa B está correta.</p><p>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</p><p>chamada a rec(0). Mas rec(0) não é definido; assim, ocorrerá a chamada a rec(-1) - e assim sucessivamente.</p><p>3 - Bibliotecas em Python</p><p>Ao �nal deste módulo, você será capaz de identi�car o uso correto de recursos de bibliotecas em Python.</p><p>Vamos começar!</p><p>Aplicando as bibliotecas Python para a resolução de problemas reais</p><p>B A função não tem condição de parada.</p><p>C A função está sem retorno.</p><p>D A função não poderia ter sido definida com uma chamada a ela própria.</p><p>E Na linha 3, o return deve ter a mesma identação do if.</p><p></p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html#</p><p>26/46</p><p>Importação de funções e módulos</p><p>Biblioteca padrão Python</p><p>Python oferece, em seu núcleo, algumas funções que já utilizamos, como print() e input(), além de classes, como int, float e str. Logicamente, o</p><p>núcleo da linguagem Python disponibiliza muitas outras funções (ou métodos) e classes além das citadas. Mas, ainda assim, ele é pequeno, tendo o</p><p>objetivo de simplificar o uso e ganhar eficiência.</p><p>Para aumentar a disponibilidade de funções, métodos e classes, o desenvolvedor pode usar a biblioteca padrão Python. Neste módulo,</p><p>apresentaremos alguns dos principais recursos dessa biblioteca e a forma de utilizá-los.</p><p>A biblioteca padrão Python (Python standard library) consiste em milhares de funções, métodos e classes relacionados a determinada finalidade e</p><p>organizados em componentes chamados de módulos. Há mais de 200 módulos que dão suporte, entre outras coisas, a:</p><p>1. Operações matemáticas.</p><p>2. Interface gráfica com o usuário (GUI).</p><p>3. Funções matemáticas e geração de números pseudoaleatórios.</p><p>É importante lembrar os conceitos de classes e objetos, pois eles são os principais conceitos do paradigma de programação orientada a objeto. As</p><p>classes são fábricas, que podem gerar instâncias chamadas objetos.</p><p>Uma classe Pessoa, por exemplo, pode ter como atributos nome e CPF. Ao gerar uma instância de Pessoa com nome João da Silva e CPF</p><p>000.000.000-00, há um objeto.</p><p>Dica</p><p>Para compreender mais os conceitos de classe e objeto, pesquise sobre o paradigma orientado a objeto.</p><p>Como usar uma função de módulo importado</p><p>Para usar as funções e os métodos de um módulo, são necessários dois passos:</p><p>Fazer a importação do módulo desejado com a instrução:</p><p>import nome_modulo</p><p>Chamar a função desejada, precedida do nome do módulo, com a instrução:</p><p>nome_modulo.nome_funcao(paramêtros)</p><p>Como exemplo, vamos importar o módulo math (dedicado a operações matemáticas) e calcular a raiz quadrada de 5 por meio da função sqrt().</p><p>Clique em Executar e observe o uso do math no próximo código (trata-se do código 22 no arquivo disponibilizado):</p><p></p><p>Exercício 14 dTUTORIAL COPIAR</p><p>Python3</p><p>import math</p><p>x = math.sqrt(5)</p><p>1</p><p>2</p><p>3</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 27/46</p><p>A partir desse ponto, serão apresentados os principais aspectos dos seguintes módulos:</p><p>math</p><p>Usado para operações matemáticas.</p><p>random</p><p>Usado para gerar números pseudoaleatórios.</p><p>smtplib</p><p>Usado para permitir envio de e-mails.</p><p>time</p><p>Usado para implementar contadores temporais.</p><p>tkinter</p><p>Usado para desenvolver interfaces gráficas.</p><p>Módulos nativos do Python</p><p>Módulo math</p><p>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.</p><p>Listaremos agora algumas das funções do módulo math:</p><p>Função Retorno</p><p>sqrt(x) Raiz quadrada de x</p><p>ceil(x) Menor inteiro maior ou igual a x</p><p>null</p><p>null</p><p></p><p>print(x)4</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 28/46</p><p>Função Retorno</p><p>floor(x) Maior inteiro menor ou igual a x</p><p>cos(x) Cosseno de x</p><p>sin(x) Seno de x</p><p>log(x, b) Logaritmo de x na base b</p><p>pi Valor de Pi (3.141592...)</p><p>e Valor de e (2.718281...)</p><p>Principais funções do módulo math</p><p>Elaborada por Humberto Henriques de Arruda</p><p>Saiba mais</p><p>Para mais informações sobre o módulo math, visite a biblioteca Python.</p><p>Módulo random</p><p>Esse módulo implementa geradores de números pseudoaleatórios para várias distribuições.</p><p>Números inteiros</p><p>Para inteiros, existe:</p><p>- Uma seleção uniforme a partir de um intervalo.</p><p>Sequências</p><p>Para sequências, existem:</p><p>- Uma seleção uniforme de um elemento aleatório; - Uma função para gerar uma permutação aleatória das posições na lista; - Uma função para</p><p>escolher aleatoriamente sem substituição.</p><p>Distribuições de valores reais</p><p>A tabela a seguir mostra algumas das principais funções disponíveis para distribuições de valores reais no módulo random.</p><p>Função Retorno</p><p>random() Número de ponto flutuante no intervalo (00,0, 1,0)</p><p>uniform(a, b) Número de ponto flutuante N tal que a ≤ N ≤ b</p><p>gauss(mu, sigma) Distribuição gaussiana. mu é a média e sigma é o desvio padrão.</p><p>normalvariate(mu, sigma) Distribuição gaussiana. mu é a média e sigma é o desvio padrão.</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 29/46</p><p>Principais distribuições de valores reais</p><p>Elaborada por Humberto Henriques de Arruda</p><p>Funções para números inteiros</p><p>Veja algumas das principais funções disponíveis para inteiros no módulo random.</p><p>Função Retorno</p><p>randrange(stop) Um elemento selecionado aleatório de range(start, stop, step), mas sem construir um objeto range.</p><p>randrange(start, stop, [step])</p><p>randint(a, b) Número inteiro N tal que a ≤ N ≤ b</p><p>Principais funções do módulo random para inteiros</p><p>Elaborada por Humberto Henriques de Arruda</p><p>Funções para sequências</p><p>Esta tabela mostra algumas das principais funções disponíveis para sequências no módulo random:</p><p>Função Retorno</p><p>choice(seq) Elemento aleatório de uma sequência não vazia seq.</p><p>shuffle(x[, random]) Embaralha a sequência x no lugar.</p><p>sample(pop, k)</p><p>Uma sequência de tamanho k de elementos escolhidos da população pop, sem repetição. Usada para amostragem</p><p>sem substituição.</p><p>Principais funções do módulo random para sequências</p><p>Elaborada por Humberto Henriques de Arruda</p><p>Saiba mais</p><p>Para mais informações sobre o módulo random, visite a biblioteca Python.</p><p>Módulo SMTPLIB</p><p>Esse módulo define um objeto de sessão do cliente SMTP que pode ser usado a fim de enviar e-mail para qualquer máquina da internet com um</p><p>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.</p><p>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á</p><p>necessário alterar uma configuração de segurança. Para resolver isso, siga estas instruções:</p><p>Acesse sua conta no Google.</p><p>D i S</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 30/46</p><p>Para fazer seu primeiro envio, crie um programa no seu projeto. O codigo a seguir mostra as importações necessárias para o envio:</p><p>Python </p><p>Envio de e-mail com módulo smtplib 1.</p><p>O código seguinte mostra a criação da mensagem com o corpo e seus parâmetros:</p><p>Python </p><p>Envio de e-mail com módulo smtplib 2.</p><p>1. A linha 7 mostra a criação de um objeto de mensagem.</p><p>2. A linha 8 exibe o corpo da mensagem em uma string.</p><p>3. As linhas de 11 a 14 devem ser preenchidas com os valores adequados para que seu programa seja executado com sucesso.</p><p>4. A linha 17 anexa o corpo da mensagem (que estava em uma string) ao objeto msg.</p><p>O próximo código mostra os passos necessários para o próprio envio:</p><p>Python </p><p>Depois acesse Segurança.</p><p>Acesso a app menos seguro.</p><p>Atenção! Em algumas contas, os nomes estarão escritos no idioma inglês (Allow less secure apps).</p><p>Mude para "ativada" a opção de "Permitir aplicativos menos seguros".</p><p>#import dos pacotes necessários</p><p>from email.mime.multipart import MIMEMultipart</p><p>from email.mime.text import MIMEText</p><p>import smtplib</p><p>#criação de um objeto de mensagem</p><p>1</p><p>2</p><p>3</p><p>4</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>1</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 31/46</p><p>Envio de e-mail com módulo smtplib 3.</p><p>1. As linhas 20 e 21 mostram a criação do servidor e a sua conexão no modo TLS.</p><p>2. A linha 24 mostra o login na conta de origem do e-mail.</p><p>3. A linha 27 representa o envio propriamente dito.</p><p>4. A linha 30 exibe o encerramento do servidor.</p><p>O código referente ao programa para o envio de e-mail a partir do servidor SMTP do Gmail encontra-se no arquivo disponibilizado neste conteúdo</p><p>(código 28).</p><p>Saiba mais</p><p>Para mais informações sobre o módulo smtplib, visite a biblioteca Python.</p><p>Módulo time</p><p>Esse módulo provê diversas funções relacionadas a tempo. Também pode ser útil conhecer os módulos datetime</p><p>e calendar.</p><p>Esta tabela aponta algumas das principais funções disponíveis no módulo time:</p><p>Função Retorno</p><p>time()</p><p>Número de segundos passados desde o início da contagem (epoch). Por padrão, o início é 00:00:00 do dia 1 de</p><p>janeiro de 1970.</p><p>ctime(segundos) Uma string representando o horário local, calculado a partir do número de segundos passado como parâmetro.</p><p>gmtime(segundos) Converte o número de segundos em um objeto struct_time descrito a seguir.</p><p>localtime(segundos) Semelhante à gmtime(), mas converte para o horário local.</p><p>sleep(segundos) A função suspende a execução por determinado número de segundos.</p><p>Principais funções do módulo time</p><p>Elaborada por Humberto Henriques de Arruda</p><p>O código a seguir (código 23 no arquivo disponibilizado) mostra um exemplo de chamada das funções time() e ctime().</p><p>Exercício 15 dTUTORIAL COPIAR</p><p>Python3</p><p>import time</p><p>x = time.time()</p><p>print(f'Local time: {time.ctime(x)}')</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>1</p><p>2</p><p>3</p><p>4</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 32/46</p><p>A variável x recebe o número de segundos desde 00:00:00 de 01/01/1970 pela função time(). Ao executar ctime(x), o número de segundos</p><p>armazenado em x é convertido em uma string com o horário local.</p><p>A classe time.struct_time gera objetos sequenciais com valor de tempo retornado pelas funções gmtime() e localtime(). São objetos com interface</p><p>de tupla nomeada: os valores podem ser acessados pelo índice e pelo nome do atributo.</p><p>Aparecem os seguintes valores :</p><p>Índice Atributo Valores</p><p>0 tm_year Por exemplo, 2020</p><p>1 tm_mon range [1, 12]</p><p>2 tm_mday range [1, 31]</p><p>3 tm_hour range [0, 23]</p><p>4 tm_min range [0, 59]</p><p>5 tm_sec range [0, 61]</p><p>6 tm_wday range [0, 6] Domingo é 0</p><p>7 tm_yday range [1, 366]</p><p>8 tm_isdst 0,1 ou -1</p><p>N/A tm_zone Abreviação do nome da timezone</p><p>Principais funções do módulo time</p><p>Elaborada por Humberto Henriques de Arruda</p><p>Saiba mais</p><p>Para mais informações sobre o módulo time, visite a biblioteca Python.</p><p>Módulo tkinter</p><p>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</p><p>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 a</p><p>entrada de dados e botões, por exemplo.</p><p>O exemplo a seguir vai permitir que você crie a primeira janela com alguns elementos. Para isso, crie um programa novo no seu projeto. O código</p><p>adiante mostra a criação da sua primeira janela, ainda sem qualquer elemento gráfico.</p><p></p><p>null</p><p>null</p><p></p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 33/46</p><p>Python </p><p>Primeira janela com tkinter 1.</p><p>1. A linha 1 mostra a importação de todos os elementos disponíveis em tkinter. O objeto janelaPrincipal é do tipo Tk. Um objeto Tk é um elemento</p><p>que representa a janela GUI. Para que essa janela apareça, é necessário chamar o método mainloop();</p><p>2. Para exibir textos, vamos usar o elemento Label. O próximo código mostra as linhas 4 e 5, com a criação do elemento e o seu posicionamento. O</p><p>tamanho padrão da janela é 200 X 200 pixels, com o canto superior esquerdo de coordenadas (0,0) e o inferior direito de coordenadas (200,200).</p><p>Python </p><p>Primeira janela com tkinter 2.</p><p>Veja o resultado de sua primeira janela, apenas com o texto, na imagem a seguir.</p><p>Exibição da primeira janela com tkinter.</p><p>Vamos agora incrementar um pouco essa janela. Para isso, acrescentaremos uma imagem e um botão. A imagem precisa estar na mesma pasta do</p><p>seu arquivo .py.</p><p>Python </p><p>Segunda janela com tkinter.</p><p>from tkinter import *</p><p>janelaPrincipal = Tk()</p><p>janelaPrincipal.mainloop()</p><p>from tkinter import *</p><p>janelaPrincipal = Tk()</p><p>texto = Label(master = janelaPrincipal, text = "Minha janela exibida")</p><p>texto.place(x = 50 y = 100)</p><p>janelaPrincipal.mainloop()</p><p>from tkinter import *</p><p>def funcClicar():</p><p>print("Botão pressionado")</p><p>janelaPrincipal = Tk()</p><p>1</p><p>2</p><p>3</p><p>4</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 34/46</p><p>1. No código anterior, há a inserção do elemento de imagem e o botão. Nas linhas 10, 11 e 12, é feita a criação do objeto Label para conter a imagem</p><p>e seu posicionamento. Observe que passamos a utilizar o método pack(), que coloca o elemento centralizado e posicionado o mais perto possível</p><p>do topo, depois dos elementos posicionados anteriormente.</p><p>2. O elemento botão é criado na linha 14 com os atributos text e command, os quais são respectivamente o texto exibido no corpo do botão e a</p><p>função a ser executada quando o botão é clicado.</p><p>3. Para o funcionamento correto do botão, é preciso definir a função funcClicar(), nas linhas 3 e 4. Essa função serve apenas para imprimir na tela a</p><p>string “Botão pressionado”.</p><p>Verifique o resultado na imagem seguinte:</p><p>Segunda janela com tkinter exibida.</p><p>Tendo implementado sua janela, clique no botão para ver o resultado no console, como mostra a imagem a seguir:</p><p>Resultado do clique no botão da segunda janela.</p><p>O código referente ao programa gráfico com o uso do módulo Tkinter encontra-se no arquivo disponibilizado neste conteúdo (código 29).</p><p>Saiba mais</p><p>Para mais informações sobre o tkinter, visite a biblioteca Python.</p><p>Pacotes externos</p><p>Usando pacotes externos</p><p>Além dos módulos fornecidos de forma integrada pela biblioteca padrão do Python, a linguagem possui uma grande vantagem: sua característica</p><p>open-source permite que qualquer desenvolvedor, com o conhecimento adequado, desenvolva a própria biblioteca e os próprios módulos, os quais</p><p>chamaremos, a partir de agora, de pacotes.</p><p>Veremos como criar módulos mais adiante neste conteúdo.</p><p>Com um pacote pronto, o desenvolvedor pode disponibilizar esse material na internet de forma que qualquer pessoa possa aproveitar o código</p><p>implementado. Isso foi um dos fatores que fez com que o Python se tornasse uma das linguagens mais utilizadas no mundo atualmente.</p><p>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</p><p>Python package index, ou PyPI, um grande servidor no qual os desenvolvedores podem hospedar os seus pacotes, contendo bibliotecas e/ou</p><p>módulos, para que sejam baixados e instalados por outras pessoas.</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 35/46</p><p>É possível acessar o PyPI por meio do pip, um programa que pode ser instalado com a distribuição do Python. Para isso, certifique-se de que a caixa</p><p>“pip” está marcada durante a instalação, conforme ilustrado a seguir.</p><p>Instalação do pip.</p><p>Atenção!</p><p>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.</p><p>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</p><p>Python sem esquecer de marcar a opção de incluir o pip durante o processo de instalação.</p><p>Além do pip, é necessário ter em mãos o endereço para acessar o pip dentro da variável de ambiente PATH. O processo de instalação do Python</p><p>também permite incluir automaticamente o Python no seu PATH, porém, caso não tenha feito isso, siga os passos abaixo:</p><p>É importante que você se certifique de que a opção Add Python to PATH está marcada durante a instalação, como apontado na imagem a seguir.</p><p>Clique na tecla do Windows e escreva “Editar as variáveis de ambiente para a sua conta”.</p><p>Na janela que abrir, procure pela variável Path, selecione-a e clique no botão “Editar”.</p><p>Clique no botão “Novo” e digite o endereço da sua instalação do Python (por exemplo, D:\Python).</p><p>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,</p><p>D:\Python\Scripts).</p><p>Aperte Ok até fechar todas as janelas.</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html#</p><p>36/46</p><p>Adicionando o Python ao PATH.</p><p>Com essas etapas concluídas, já conseguimos instalar nossos pacotes externos!</p><p>Atenção!</p><p>Quando estiver trabalhando com pacotes externos, é extremamente recomendado o uso de ambientes virtuais (em inglês, virtual environments ou</p><p>simplesmente virtualenvs ). Esses ambientes isolam o projeto em que você está trabalhando.</p><p>Uma das vantagens disso é que você consegue saber exatamente quais pacotes externos estão sendo usados no projeto. É possível usar esses</p><p>pacotes sem o uso de ambientes virtuais, porém isso pode causar uma confusão caso você tenha vários projetos Python no seu computador.</p><p>Pesquise mais sobre ambientes virtuais e configure um em cada projeto. Não é muito difícil - e vai ajudá-lo a deixar o seu código mais profissional!</p><p>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”),</p><p>ativar o seu ambiente virtual (se você estiver usando um) e digitar o seguinte comando: \Projects\exemplo_pacotes>pip install <nome_do_pacote>.</p><p>Instalando um pacote usando pip.</p><p>Substitua <nome_do_pacote> pelo pacote que você deseja usar. Temos inúmeros pacotes prontos à nossa disposição. Cada pacote normalmente</p><p>possui um site que apresenta a sua documentação de forma similar à da documentação oficial do Python.</p><p>Abaixo você encontra uma lista com alguns dos pacotes externos mais comuns e utilizados no mercado:</p><p>Nome do módulo Pra que serve?</p><p>numpy Cálculos, operações matemáticas e simulações</p><p>pandas Manipulaçao de dados</p><p>scikit-learn Modelos de aprendizado de máquina</p><p>matplotlib Visualização de dados</p><p>requests Biblioteca de comandos de comunicação pelo protocolo HTTP</p><p>flask Construção de aplicações web</p><p>Pacotes externos mais comuns e utilizados no mercado.</p><p>Elaborada por Humberto Henriques de Arruda</p><p>Dica</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 37/46</p><p>Antes de começar o próprio módulo, é sempre recomendado pesquisar se o que você quer fazer já existe em algum pacote popular. Se existir,</p><p>procure pela documentação e instale esse pacote.</p><p>O uso de módulos oriundos de pacotes externos é idêntico à utilização daqueles da biblioteca padrão. Basta, para isso, utilizar o import</p><p>nome_do_modulo no seu código.</p><p>Criação do próprio módulo</p><p>Os desenvolvedores podem criar os próprios módulos de forma a reutilizar as funções que já escreveram e organizar melhor seu trabalho. Para isso,</p><p>basta criar um arquivo .py e escrever nele suas funções. O arquivo do módulo precisa estar na mesma pasta do arquivo para onde ele será</p><p>importado.</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>Sabemos que é possível importar módulos e chamar funções desses módulos em Python. Considere o módulo math, que oferece diversas</p><p>funções matemáticas. Uma dessas funções é a ceil(x), que retorna o menor inteiro maior ou igual a x. Suponha que um estudante queira usar</p><p>uma variável n, que recebe o valor 5.9, e, em seguida, imprimir na tela o menor inteiro maior ou igual a ela. O código correto é:</p><p>A</p><p>import math</p><p>n = 5.9</p><p>print(ceil(n))</p><p>B</p><p>import math</p><p>n = 5.9</p><p>math.ceil(n)</p><p>print(n)</p><p>C</p><p>import math</p><p>n = 5.9</p><p>print(ceil.math(n))</p><p>D</p><p>import math</p><p>n = 5.9</p><p>print(math.ceil(n))</p><p>E</p><p>import math</p><p>n = 5.9</p><p>ceil.math(n)</p><p>print(n)</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 38/46</p><p>Parabéns! A alternativa D está correta.</p><p>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</p><p>nomeModulo.nomeFuncao().</p><p>Questão 2</p><p>Sobre a linguagem Python e sua biblioteca padrão, é correto afirmar que Python:</p><p>Parabéns! A alternativa D está correta.</p><p>O módulo math não permite operações com números complexos.</p><p>4 - Eventos em Python</p><p>Ao �nal deste módulo, você será capaz de analisar as formas de tratamento de exceções e eventos em Python.</p><p>A Só permite a utilização dos módulos contidos na biblioteca padrão Python.</p><p>B Tem o módulo de interface gráfica tkinter, que não permite a criação de janelas com botões.</p><p>C Tem módulo de interface de e-mails smtplib, que não permite envio de e-mails por servidores gratuitos.</p><p>D Tem módulo de operações matemáticas math, que não permite operações com números complexos.</p><p>E O módulo math é usado para implementar geradores de números aleatorios.</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 39/46</p><p>Vamos começar!</p><p>Tratamento de exceções na linguagem Python</p><p>Erros em um programa Python</p><p>Erros e exceções</p><p>Até agora consideramos que nossos programas tiveram seu fluxo de execução normal. Neste módulo, vamos analisar o que acontece quando o</p><p>fluxo de execução é interrompido por uma exceção, além de controlar esse fluxo excepcional.</p><p>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</p><p>incorreto de uma instrução. Esses erros são descobertos pelo componente do interpretador Python, que é chamado analisador ou parser.</p><p>Veja exemplos nas duas imagens a seguir:</p><p>Erro de sintaxe 1.</p><p>Erro de sintaxe 2.</p><p>Além deles, existem os erros que ocorrem em tempo de execução do programa, que não se devem a uma instrução escrita errada, e sim ao fato de</p><p>que o programa entrou em um estado indevido.</p><p>Elencamos os seguintes exemplos:</p><p>1. A divisão por 0.</p><p>2. A tentativa de acessar um índice indevido em uma lista.</p><p>3. Um nome de variável não atribuído.</p><p></p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 40/46</p><p>4. Um erro causado por tipos incorretos de operando.</p><p>Em cada caso, quando o programa atinge um estado inválido, é dito que o interpretador Python levanta uma exceção. Isso significa que é criado um</p><p>objeto que contém as informações relevantes sobre o erro.</p><p>A tabela a seguir traz alguns tipos comuns de exceção:</p><p>Exceção Explicação</p><p>KeyboardInterrupt Levantado quando o usuário pressiona CTRL+C, a combinação de interrupção.</p><p>OverflowError Levantado quando uma expressão de ponto flutuante é avaliada como um valor muito grande.</p><p>ZeroDivisionError Levantado quando se tenta dividir por 0.</p><p>IOError Levantado quando uma operação de entrada/saída falha por um motivo relacionado a isso.</p><p>IndexError Levantado quando um índice sequencial está fora do intervalo de índices válidos.</p><p>NameError Levantado quando se tenta avaliar um identificador (nome) não atribuído.</p><p>TypeError Levantado quando uma operação da função é aplicada a um objeto do tipo errado.</p><p>ValueError Levantado quando a operação ou função tem um argumento com o tipo correto, mas valor incorreto.</p><p>Tipos comuns de exceção</p><p>Elaborada por Humberto Henriques de Arruda</p><p>Em Python, as exceções são objetos. A classe Exception é derivada de BaseException, classe base de todas as classes de exceção. BaseException</p><p>fornece alguns serviços úteis para todas as classes de exceção, mas normalmente não se torna uma subclasse diretamente.</p><p>Tratamento de exceções e eventos</p><p>Captura e manipulação de exceções</p><p>Para evitar que os programas sejam interrompidos quando uma exceção é levantada, é possível planejar um comportamento alternativo. Assim, o</p><p>programa não será interrompido e a exceção poderá ser tratada. Chamamos esse processo de captura da exceção.</p><p>Vamos considerar um exemplo de programa que solicita ao usuário, com a função input(), um número inteiro. Embora essa função trate a entrada</p><p>do usuário como string, é possível utilizá-la em conjunto com a função eval() para que os dados inseridos sejam avaliados como números.</p><p>O próximo emulador mostra uma implementação simples desse exemplo:</p><p>Exemplo simples de input dTUTORIAL COPIAR</p><p>Python3</p><p>num = eval(input("Entre com um número inteiro: "))</p><p>print(num)</p><p>1</p><p>2</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 41/46</p><p>Mas o que aconteceria se o usuário</p><p>digitasse uma palavra em vez de números? Faça essa experiência e digite uma palavra, como, por exemplo, dois,</p><p>no emulador anterior e clique em Executar.</p><p>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</p><p>instruções try/except.</p><p>Bloco try</p><p>O bloco try é executado primeiramente. Devem ser inseridas nele as instruções do fluxo normal do programa.</p><p>Bloco except</p><p>O bloco except só será executado se houver o levantamento de alguma exceção.</p><p>Isso permite que o fluxo de execução continue de maneira alternativa. O emulador seguinte mostra uma implementação possível desse exemplo</p><p>(código 25 no arquivo disponibilizado):</p><p>O formato padrão de uso do par try/except é:</p><p>Python </p><p>null</p><p>null</p><p></p><p></p><p>Exemplo simples de input dTUTORIAL COPIAR</p><p>Python3</p><p>null</p><p>null</p><p></p><p>try:</p><p>num = eval(input("Entre com um número inteiro: \n"))</p><p>print(num)</p><p>except:</p><p>print("Entre com o valor numérico e não letras")</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 42/46</p><p>O bloco 1 representa o fluxo normal do programa. Caso uma exceção seja levantada, o bloco 2 será executado, permitindo o tratamento adequado</p><p>dela. Esse bloco 2 é chamado de manipulador de exceção.</p><p>Atenção!</p><p>Em Python, o manipulador de exceção padrão é que executa o trabalho de captura da exceção caso não haja um tratamento explícito feito pelo</p><p>desenvolvedor. É esse manipulador o responsável pela exibição das mensagens de erro no console.</p><p>Captura de exceções de determinado tipo</p><p>Python permite que o bloco relativo ao except só seja executado caso a exceção levantada seja de determinado tipo. Para isso, o except precisa</p><p>trazer o tipo de exceção que se deseja capturar.</p><p>O emulador a seguir traz uma possível variação do exemplo anterior com a captura apenas das exceções do tipo NameError (código 26 do arquivo</p><p>disponibilizado):</p><p>Captura de exceções de múltiplos tipos</p><p>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</p><p>vinculada à mesma cláusula try.</p><p>O emulador seguinte mostra um exemplo de implementação da captura de exceções de múltiplos tipos (no arquivo disponibilizado, trata-se do</p><p>código 27).</p><p>Exercício 17 dTUTORIAL COPIAR</p><p>Python3</p><p>null</p><p>null</p><p></p><p>Exercício 18 dTUTORIAL COPIAR</p><p>Python3</p><p>try:</p><p>Bloco 1</p><p>except:</p><p>Bloco 2</p><p>Instrução fora do try/except</p><p>try:</p><p>num = eval(input("Entre com um número inteiro: \n"))</p><p>print(num)</p><p>except NameError:</p><p>print("Entre com o valor numérico e não letras")</p><p>try:</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>1</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 43/46</p><p>1. A instrução da linha 5 somente será executada se a exceção levantada no bloco try for do tipo ValueError e se, na instrução da linha 7, a exceção</p><p>for do tipo IndexError.</p><p>2. Caso a exceção seja de outro tipo, a linha 9 será executada.</p><p>O tratamento completo das exceções</p><p>A forma geral completa para lidar com as exceções em Python é:</p><p>Python </p><p>As cláusulas else e finally são opcionais, como foi possível perceber nos exemplos iniciais.</p><p>Tratamento de eventos</p><p>O tratamento de eventos é similar ao de exceções. Assim como no caso das exceções ocorridas em tempo de execução, podemos tratar os eventos</p><p>criados por ações externas, como as interações de usuário realizadas por meio de uma interface gráfica de usuário (GUI).</p><p>Um evento é a noti�cação de que alguma coisa aconteceu, como um clique de mouse sobre um elemento botão. O tratador do evento é o segmento</p><p>null</p><p>null</p><p></p><p>num = eval(input("Entre com um número inteiro: \n"))</p><p>print(num)</p><p>except ValueError:</p><p>print("Mensagem 1")</p><p>try:</p><p>Bloco 1</p><p>except Exception1:</p><p>Bloco tratador para Exception1</p><p>except Exception2:</p><p>Bloco tratador para Exception1</p><p>...</p><p>else:</p><p>Bloco 2 – executado caso nenhuma exceção seja levantada</p><p>finally:</p><p>Bloco 3 – executado independente do que ocorrer</p><p>Instrução fora do try/except</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p><p>11</p><p>12</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 44/46</p><p>de código que será executado em resposta à ocorrência do evento.</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>Considere o seguinte trecho de um programa escrito em Python:</p><p>Python </p><p>Uso do try/except.</p><p>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</p><p>dessa ação.</p><p>Parabéns! A alternativa D está correta.</p><p>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</p><p>ser executada é a da linha 8, imprimindo Mensagem 3.</p><p>Questão 2</p><p>A O programa deixará de ser executado.</p><p>B Será impresso na tela Mensagem 1.</p><p>C Será impresso na tela Mensagem 2.</p><p>D Será impresso na tela Mensagem 3.</p><p>E O programa vai imprimir imediatamente o numero digitado.</p><p>try:</p><p>num = eval(input("Entre com um número inteiro: "))</p><p>print(num)</p><p>except ValueError:</p><p>print("Mensagem 1")</p><p>except IndexError:</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 45/46</p><p>Sobre o tratamento de exceções em Python, é incorreto afirmar que:</p><p>Parabéns! A alternativa B está correta.</p><p>A cláusula finally pode ser usada, embora não seja obrigatória.</p><p>Considerações �nais</p><p>Neste conteúdo, você aprendeu a usar as estruturas de controle, sejam elas de decisão ou de repetição. Em seguida, foi apresentado aos conceitos</p><p>de subprogramas em Python e pôde implementar as próprias funções, além de conhecer e utilizar as bibliotecas.</p><p>Por fim, você analisou as formas de tratamento de exceções e eventos. Com tal conteúdo, você certamente terá condições de desenvolver</p><p>aplicações muito mais complexas e com muito mais recursos.</p><p>Podcast</p><p>Abordamos os principais pontos relacionados à programação estruturada em Python e como os recursos apresentados podem auxiliar no</p><p>desenvolvimento dos programas.</p><p>A É possível implementar tratamentos diferentes de acordo com a exceção levantada.</p><p>B Não é possível utilizar a cláusula finally.</p><p>C Não é possível usar a cláusula catch.</p><p>D É possível implementar um tratamento geral para todas as exceções levantadas.</p><p>E As cláusulas else e finally não são opcionais.</p><p></p><p>Referências</p><p>24/11/2022 08:19 Python estruturado</p><p>https://stecine.azureedge.net/repositorio/00212ti/00213/index.html# 46/46</p><p>PERKOVIC, L. Introdução à computação usando Python: um foco no desenvolvimento de aplicações. Rio de Janeiro: LTC, 2016.</p><p>SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. São Paulo: Bookman, 2018.</p><p>Explore +</p><p>Para ter desafios mais complexos e exercícios para treinar, recomendamos uma visita ao website Python Brasil.</p><p>Acesse também o site das bibliotecas apresentadas e busque pela documentação para que você possa conhecer todas as funcionalidades</p><p>disponíveis.</p>

Mais conteúdos dessa disciplina