0% acharam este documento útil (0 voto)
88 visualizações

Apostila - Programao em Python

O documento descreve um livro sobre programação em Python aplicada à engenharia química. O livro aborda programação básica, estruturas de controle de fluxo, variáveis compostas, criação de funções e uso de módulos em problemas de engenharia química.

Enviado por

cind azevedo
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
88 visualizações

Apostila - Programao em Python

O documento descreve um livro sobre programação em Python aplicada à engenharia química. O livro aborda programação básica, estruturas de controle de fluxo, variáveis compostas, criação de funções e uso de módulos em problemas de engenharia química.

Enviado por

cind azevedo
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 66

Álvaro Daniel Teles Pinheiro

Eng.
Química

Programação em Python Aplicada


a Engenharia Química

1ª edição
PROGRAMAÇÃO EM PYTHON APLICADA A
ENGENHARIA QUÍMICA

Capítulo 1 – Programação básica


Capítulo 2 – Estruturas de controle de fluxo
Capítulo 3 - Variáveis compostas
Capítulo 4 – Criando funções
Capítulo 5 - Uso de módulos em problemas de engenharia química
SUMÁRIO

PROGRAMAÇÃO BÁSICA 5
1.1. INTRODUÇÃO E CONFIGURAÇÃO DO AMBIENTE DE DESENVOLVIMENTO 5
1.2. APRENDENDO A PROGRAMAR EM PYTHON 8
1.2.1. DECLARANDO VARIÁVEIS 9
1.2.2. EQUACIONAMENTO MATEMÁTICO 15
1.2.3. ESCREVENDO DADOS DE SAÍDA 18
1.3. UTILIZANDO A FUNÇÃO HELP 21

ESTRUTURAS DE CONTROLE DE FLUXO 23


2.1. LÓGICA BOOLEANA 24
2.2. ESTRUTURA CONDICIONAL 26
2.2.1. ESTRUTURA IF/ELIF/ELSE 26
2.3. ESTRUTURA DE REPETIÇÃO 31
2.3.1. ESTRUTURA WHILE 31
2.3.2. ESTRUTURA FOR 33
2.3.3. COMANDO BREAK 36

VARIÁVEIS COMPOSTAS 37
3.1. LISTAS 37
3.1.1. DECLARANDO LISTAS 37
3.1.2. MANIPULANDO LISTAS 39
3.2. TUPLAS 41
3.3. DICIONÁRIOS 42

CRIANDO FUNÇÕES 43
4.1. FUNÇÕES 43

USO DE MÓDULOS EM PROBLEMAS DE ENGENHARIA QUÍMICA 47


5.1. IMPORTANDO MÓDULOS 47
5.2. PLOTANDO GRÁFICOS – BIBLIOTECA MATPLOTLIB 48
5.3. CRIANDO MATRIZES – BIBLIOTECA NUMPY 51
5.3.1. CRIANDO MATRIZES UNIDIMENSIONAIS 51
5.3.2. CRIANDO MATRIZES BIDIMENSIONAIS 53
5.3.3. MANIPULANDO MATRIZES 53
5.4. SOLUÇÃO DE EQUAÇÕES ALGÉBRICAS E DIFERENCIAIS – BIBLIOTECA
SCIPY 56
5.4.1. SOLUÇÃO DE SISTEMAS DE EQUAÇÕES ALGÉBRICAS LINEARES 56
5.4.2. SOLUÇÃO DE SISTEMAS DE EQUAÇÕES ALGÉBRICAS NÃO LINEARES 58
5.4.3. SOLUÇÃO DE SISTEMAS DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS 61
Computadores são incrivelmente rápidos, precisos e
estúpidos. Humanos são incrivelmente lentos, imprecisos e
brilhantes; juntos, eles têm um poder além da imaginação.
(Leo Cherne)
1. Programação básica

Programação básica CAPÍTULO

1
Ao abordar programação básica, irei apresentar os principais
comandos para declarar variáveis, realizar cálculos e apresentar
os resultados. Assim, espera-se que o estudante seja capaz de
resolver problemas de engenharia em bases computacionais.

1.1. INTRODUÇÃO E CONFIGURAÇÃO DO AMBIENTE DE


DESENVOLVIMENTO
O Python é uma linguagem de programação de alto nível (usa linhas
de programação com escrita próxima à falada) criada nos anos 90,
contendo diversas bibliotecas prontas. A linguagem apresenta as
seguintes características:
- Software livre de código aberto (código fonte pode ser acessado
e modificado);
- Sintaxe robusta, simples e ágil de ser executada;
- Linguagem interpretada (como os computadores não entendem
linguagem de alto nível, as linhas do programa devem ser
interpretadas/traduzida para linguagem de máquina, para então
serem executadas. O interpretador é o programa responsável por
essa tarefa);
- Possui uma grande comunidade para ajudar seus desenvolvedores;
- Pode ser utilizada em diferentes plataformas (Windows, Mac,
Linux, Rasberry pi, ...).
Utilizamos linguagem de programação para que, a partir de símbolos
e regras de sintaxe, o programador possa se comunicar com a
máquina. A máquina, por sua vez, irá executar as linhas de
programação e apresentar o resultado.

Instalando o software para desenvolvimento:


Para programar em Python, iremos utilizar um ambiente de
desenvolvimento integrado, ou simplesmente IDE (Integrated
Development Environment), que consistem em um software contendo
ferramentas que irão facilitar o desenvolvimento de um programa.

5
1. Programação básica

Existem vários ambientes de desenvolvimento para se trabalhar em


Python (Jupyter, VS Code, Pycharm, Atom, Wing, IDLE Python, Pydev,
Spyder, dentre outros), o que acaba gerando o seguinte
questionamento: qual IDE devo baixar para desenvolver meus códigos
de programação? Abaixo apresento duas opções:

IDLE Python: Por ser uma linguagem de propósito geral, o ambiente


Python só vem com o básico, sendo necessária a instalação de
bibliotecas adicionais para se trabalhar com processamento de
dados, criação de gráficos, funções de programação científicas,
dentre outras. Disponível em: https://www.python.org/.

Anaconda: software que reúne diferentes ambientes de programação


em Python. Além do Python básico, possui várias bibliotecas de
computação científica já integradas nos ambientes de programação.
Disponível no endereço: https://anaconda.org/.

Por ter um foco em programação para engenharia, o presente curso


irá utilizar o software Anaconda, uma vez que ele é voltado para
programação científica.

Usando o Anaconda Navigator:


Após a instalação, procure e execute o aplicativo de nome Anaconda
Navigation para entrar na interface apresentada abaixo.

6
1. Programação básica

O software apresenta uma série de ferramentas disponíveis, com


diferentes aplicações. Nosso curso irá focar na IDE Spyder para
programar em Python. Para iniciar o Spyder, clique na opção Launch
e o programa será aberto.

Outra forma é acessar o Spyder é clicando direto no ícone do


aplicativo. Para tanto, o usuário poderá digitar seu nome na busca
do Windows.

Ambiente Spyder:
A interface do Spyder pode ser dividida em três janelas
principais, conforme apresentado na figura abaixo.

Janela I: janela de edição de script. Esta é basicamente uma


janela de edição de texto que possibilita ao usuário digitar
linhas de programação com comandos específicos que irão compor o
arquivo de programação (também chamado de script ou código fonte).

Janela II: área contendo 4 abas com diferentes funções. A aba


Explorador de variáveis apresenta o nome, tipo, tamanho e valor
7
1. Programação básica

das variáveis utilizadas durante a execução do programa. A aba


Ajuda, fornece informações acerca de eventuais dúvidas sobre
comandos nativos da linguagem de programação. Para acessar basta
clicar 2x na palavra a qual se está com dúvida e apertar Ctrl+i.
Na aba Figuras, o usuário pode visualizar, copiar ou salvar
figuras e imagens geradas durante a execução do script, enquanto
a aba Arquivos permite que o usuário acesse arquivos salvos
anteriormente.

Janela III: área contendo as abas Console IPython e Histórico. Na


aba Console IPython o usuário pode executar comandos diretamente
no console, além de poder verificar o resultado gerado ao executar
comandos (saída do programa). A aba de Histórico apresenta os
últimos comandos fornecidos ao programa.

Como executar o arquivo criado na janela de edição?


Para executar o arquivo de scrip criado, basta salvar o mesmo e
apertar o botão do play ► (botão verde presente na barra de
ferramentas superior). Outra forma é apertando o atalho F5.

APLICAÇÃO 01: Desenvolva um programa que calcule uma variável


declarada como resultado, a partir da soma entre as seguintes
variáveis: a = 2; b = 3; c = 4,3; d = 7 e mostre o resultado.

1.2. APRENDENDO A PROGRAMAR EM PYTHON


Um programa pode ser definido como uma sequência finita de
comandos a serem executados para se chegar a um objetivo. Os
comandos serão escritos em linhas, que serão executadas de cima
para baixo. No Spyder, as linhas de programação são enumeradas,
onde a primeira linha será enumerada com 1, a segunda com 2, e
assim sucessivamente.

8
1. Programação básica

Ao ser executado, o programa deverá receber as entradas, realizar


as devidas operações e exibir as saídas na tela, conforme
apresentado na figura abaixo.

Podemos definir três etapas principais a serem desenvolvidas


durante o processo de programação científica:

Declarar variáveis Realizar operações Exibir saídas

• Alimentar dados de • Escrever • Definir como os


entrada. equacionamento resultados serão
matemático; exibidos.

• Executar estruturas
de controle de fluxo.

A primeira etapa da programação é declarar todas as variáveis que


serão utilizadas durante a execução do programa. A seguir são
realizados os cálculos ou procedimentos necessários e, por último
a resposta do programa é exibida de forma adequada.

1.2.1. Declarando variáveis


Em linguagem Python, variáveis são definidas como objetos, podendo
assumir a forma de números ou caracteres (palavras, frases ou
textos). Podemos definir variável como um objeto capaz de
armazenar dados que lhe são atribuídos.
Para criar uma variável basta associa-la a um ou mais valores
utilizando uma declaração de atribuição.
Exemplo:

9
1. Programação básica

Em linguagem de programação, o sinal de igualdade (=) é definido


como uma declaração de atribuição. O valor digitado do lado
direito da atribuição será armazenado na variável escrita do lado
esquerdo; assim o número 20 é atribuído à variável declarada por
var e o texto 'Olá mundo' armazenado na variável frase. No exemplo
anterior, foram definidas variáveis do tipo numérica e string,
cada uma com uma forma específica de escrita.

i) Declarando variáveis numéricas


Quando a variável recebe um valor numérico, essa pode ser
classificada como do tipo inteiro, real com casas decimais (ponto
flutuante), lógico (ou booleano) e complexo, sendo representada
por int, float, bool e complex, respectivamente.
Exemplo:

Para confirmar a que tipo pertence a variável declarada basta que,


após rodar o programa, o usuário consulte a aba EXPLORADOR DE
VARIÁVEIS (janela II).

A primeira coluna apresenta o nome dado a variável, a segunda


mostra a qual tipo a variável pertence, a terceira o tamanho da
variável (quantos espaços estão sendo utilizados na memória) e a
quarta coluna apresenta o valor declarado para cada variável.
Perceba que no exemplo anterior, comentários foram escritos na
frente das variáveis. Em programação utiliza-se linhas de
comentários a fim de descrever partes específicas do código,
explicar um cálculo, adicionar unidades, etc. Essas linhas não
serão executadas pelo interpretados, servindo apenas para que o
programador possa entender melhor a estrutura criada.

10
1. Programação básica

Em Python, para adicionarmos uma única linha de comentário (linha


que não será executada) utilizamos o caractere #. Caso várias
linhas sejam necessárias para escrever o comentário, utiliza-se 3
aspas simples (') ou duplas (").
Exemplo:

ii) Declarando variáveis como cadeias de caracteres


Se a variável recebe uma sequência de letras ou caracteres, esse
passa a ser classificado como uma cadeia de caracteres ou uma
string, sendo classificado como uma variável do tipo str.
Exemplo:

Observe que as aspas (simples ou duplas) sempre serão utilizadas


em Python para declarar o começo e fim de um texto. Assim, um
valor numérico escrito entre aspas, é uma variável do tipo str.
Exemplo:

Outra forma de descobrir a que tipo a variável pertence é


utilizando a função type após a variável ser declarada. Sua
sintaxe é:

type(nome_variável)

11
1. Programação básica

Exemplo:

Sempre que utilizarmos uma função em Python, a sintaxe será:


escrever a palavra chave (fica na cor laranja quando digitada no
programa) seguida de parênteses. Dentro dos parênteses existirá
uma expressão chamada de argumento da função.

Palavra chave da função(argumento da função)

O argumento da função será o dado de entrada dela (variável, outra


função, ...).

Regras sobre variáveis:


- São sensíveis à capitalização (letras maiúsculas e minúsculas
criam variáveis distintas);

- Devem primeiramente ser declaradas para depois serem utilizadas


em expressões matemáticas;

- O nome de uma variável deve ser iniciado com letra, seguido por
combinações de letras, números e caracteres.
- Variáveis não podem conter espaços no seu nome. Para separar
palavras, utiliza-se o caractere sublinhado ( _ ).

Dica: escolher nomes com significado para as variáveis torna o


programa mais fácil de ler e ser mantido.

12
1. Programação básica

iii) Declarando variáveis pelo teclado


Outra forma de declarar variáveis é utilizando a função input. A
partir dela, o usuário pode atribuir valor à variável durante a
execução do programa. A função input recebe uma mensagem que será
apresentada ao usuário durante a execução do programa. A sintaxe
da função é:

var=input('texto que será apresentado')

O texto escrito irá orientar o usuário sobre o que deve ser


digitado, enquanto o valor atribuído à variável será do tipo str.
Exemplo:

Caso o usuário tente somar valores do tipo str, o programa não


realizará a operação desejada, ao invés disso, ele irá concatenar
(unir o conteúdo) os valores. Caso o programador queira
multiplicar um str por um número, o programa irá repetir a str a
quantidade de vezes relativa ao número digitado.
Exemplo:

13
1. Programação básica

Exemplo:

Perceba que quando utilizamos a função print para mostrar o


resultado, as aspas da string não são mostradas.
Caso o usuário queira atribuir um valor numérico a uma variável
utilizando a função input, deverá declarar o tipo de variável que
será armazenada utilizando funções de conversão, de acordo com a
seguinte sintaxe:

var=tipo(input('texto que será apresentado'))

onde tipo pode ser: int, float e complex. Estas são funções de
conversão do tipo de variável.
Exemplo:

ATENÇÃO: Algumas palavras não podem ser utilizadas para nomear


variáveis. Estas são ditas palavras reservadas, uma vez que são
utilizadas pelo Python para definir regras de sintaxe ou estrutura
de linguagem. Python apresenta 35 palavras reservadas:

14
1. Programação básica

Conforme a linguagem vai sendo desenvolvida, o número de palavras


reservadas poderá aumentar. Para obter uma lista atualizada das
palavras reservadas, basta executar os seguintes comandos:

Para testes se alguma palavra é reservada do Python, o seguinte


material pode ser acessado no link: https://docs.python.org/pt-
br/3/library/keyword.html.

1.2.2. Equacionamento matemático


O equacionamento matemático é escrito utilizando valores,
variáveis e operadores, os quais são relacionados e especificados
utilizando uma declaração de atribuição.

var=expressão

onde o resultado da expressão será armazenado na variável var. As


expressões são executadas utilizando os seguintes operadores
aritméticos:
+ Adição
- Subtração
* Multiplicação
/ Divisão
% Resto da divisão
** Potenciação

Em uma expressão, os cálculos são realizados da esquerda da


direita do sinal de igualdade, sendo calculada primeiro as
operações de potenciação, seguidas por multiplicação e divisão.
As últimas operações a serem executadas são as adições e
subtrações.

15
1. Programação básica

Caso o usurário deseje que uma certa parte do cálculo seja


executada primeiro, basta fazer uso de parênteses, os quais serão
primeiramente calculados, sempre dos mais internos aos mais
externos.
Exemplo:

Obs1: o operador / sempre retornará o resultado do tipo float.


Caso o usuário deseje o resultado do tipo int, deve usar o operador
//, o qual irá truncar o resultado para o menor inteiro próximo
ao valor obtido.
Obs2: o resto da divisão é mostrado quando utilizamos o operador
% substituindo o operador de divisão.
Obs3: sempre que realizar um cálculo com potenciação, escreva o
mesmo entre parênteses para que o mesmo seja realizado de forma
correta.

i) Uso de módulos
Para realizar diferentes operações, o Python possui módulos
(bibliotecas) contendo instruções executáveis que facilitam a vida
no programador.
Para importar um módulo em Python, basta digitar a função import
seguida do nome do módulo que deseja importar. Assim, caso o
usuário deseje utilizar as diversas funções matemáticas presentes
no módulo math, a sintaxe de chamada seria:

import math

Este comando deve ser digitado na primeira linha executável do


script de forma que, quando solicitado o cálculo, a função já
esteja disponível.

16
1. Programação básica

Exemplo:

Observe que quando queremos utilizar uma função (no exemplo a


função foi o cálculo da raiz quadrada), devemos primeiramente
escrever o nome do módulo seguido de ponto (.) e o nome da função.
Esse comando deve ser entendido como: no módulo math, acesse a
função sqrt.
Caso o usuário não queira importar todas as funções do módulo,
ele pode especificar o nome da função desejada dentro daquele
módulo, de forma que apenas ela estará disponível.
Exemplo:

Caso o usuário queira importar mais de uma função do módulo:

from math import sqrt, floor

Vários módulos estão disponíveis em ordem alfabética no site


https://docs.python.org/3/py-modindex.html onde o usuário poderá
observar todas as funcionalidade dos diversos módulos. Outra forma
de acesso aos módulos disponíveis é a partir do site
https://docs.python.org/3/, onde o usuário deverá escolher a
versão do Python que está utilizando (disponível nas primeiras
linhas do IPython) e, em seguida, clicar em Library Reference. A
vantagem dessa forma de busca de biblioteca está no fato de as
mesmas estarem separadas por tipo de operação. Por exemplo,
bibliotecas numéricas como math, random e statistics, estarão nas
bibliotecas do tipo Numeric and Mathematical Modules).

Obs4: Módulos de todos os usuários do mundo estão disponíveis em


https://www.python.org/ na aba PyPI. Para carregar esses módulos
basta digitar o comando pip install seguido do nome da biblioteca
que se deseja.

17
1. Programação básica

Por exemplo, o comando

pip install emoji

irá instalar o módulo emoji.

1.2.3. Escrevendo dados de saída


Após o equacionamento, a última etapa é apresentar os resultados
ao usuário. Uma forma de executar esta tarefa é através do comando
print. Sua sintaxe é:

print()

O comando print (imprimir, em português) irá exibir o valor que


for escrito dentro dos parênteses (argumento da função).
Exemplo:

Mesmo utilizando uma variável numérica, o comando print irá


converter seu valor em string, para que seja apresentado.
Caso o usuário queira utilizar uma string como argumento da função
print, o texto deverá ser escrito entre aspas, respeitando a
sintaxe de declaração de uma string.

print('texto que será apresentado')

18
1. Programação básica

A função print permite ao usuário mostrar o valor de variáveis


junto a cadeias de caracteres (str). Para tanto, deve-se converter
o tipo da variável para str.
Exemplo:

Retorna:

Perceba que a função print tem o comando f dentro dos parênteses


e antes da cadeia de caracteres ser iniciada. Esse comando é o
conversor que irá transformar variáveis numéricas em string. As
variáveis que serão substituídas no texto escrito dentro da função
print, devem estar envoltas por chaves {}.

Obs1: é possível formatar o espaçamento do texto e o número de


casas decimais que irá apresentado utilizando caracteres
especiais.
Exemplo:

Retorna:

Observando o primeiro par de chave {a:.2f}, a escrita definiu que


o resultado fosse escrito com duas casas decimais (:.2f). Já o
segundo {b:4.2f} padronizou o resultado para ser escrito com
quatro espaçamentos (:4) e duas casas decimais (.2f), enquanto o
último termo {soma:.4f} definiu que o resultado fosse escrito com
quatro casas decimais (:.4f). O caractere : é utilizado pelo
Python para que o programador informa que irá adicionar caracteres
de formatação.

19
1. Programação básica

Obs2: outro caractere especial bastante utilizado é o caractere


de quebra de linha \n. O texto que aparecer após seu uso, será
apresentado na linha seguinte.

i) Colocando cores no Python


Para configurar as cores de uma saída no Python, utiliza-se a
sequência de escape ANSI. A forma padrão para escrita desses
códigos é:
\033[XYZm

Onde XYZ é uma série de parâmetros separadas por ponto e vírgula


(;). Para Python, os principais são:
X Y Z

Exemplo:

20
1. Programação básica

Exemplo:

Resulta em:

APLICAÇÃO 02: Escreva um programa que solicite ao usuário o valor


de duas variáveis (a e b) dois números inteiros e imprima sua
soma.

APLICAÇÃO 03: Escreva um programa que solicite ao usuário a nota


das 3 provas de um aluno e faça a média delas. Ao final do programa
mostre ao usuário a média obtida.

APLICAÇÃO 04: Desenvolva um programa que calcule as raízes de uma


equação de segunda ordem. Para tanto, o programa deve solicitar
ao usuário os coeficientes da equação, os quais devem ser
digitados como: a=1; b=-2; c=-15. Dica: importe a biblioteca math
para calcular as raízes da equação.

APLICAÇÃO 05: Crie um programa que converta uma dada temperatura


de entrada em °C para °F. O programa deve retornar o resultado ao
usuário de forma a compara as duas temperaturas.

1.3. UTILIZANDO A FUNÇÃO HELP


Sempre que o código tiver um erro, o programa irá para a execução
e retornar ao programador uma mensagem avisando qual o tipo de
erro e onde ele está. Caso o usuário esteja com alguma dúvida no
tipo de erro ou acerca da sintaxe de comando nativos do Python,
ele poderá acessar a ajuda iterativa digitando o comando help()
na aba do console IPython.

21
1. Programação básica

Após digitar o comando o help, o pront de comando foi modificado


para help>. A partir desse momento, basta digitar o nome do comando
que o usuário está em dúvida para acessar toda a sintaxe e
funcionalidade. Por exemplo, digitando a função print, o programa
retorna:

Para sair da ajuda, basta digitar o comando quit e o pront de


comando irá voltar para o pront padrão. Outra forma de pedir ajuda
ao Python é já escrever o nome da função dentro dos parênteses do
help. Se o usuário digitar
help(print)

a mesma tela de ajuda mostrada anteriormente irá aparecer.

22
2. Controle de fluxo

Estruturas de controle de fluxo CAPÍTULO

2
Até o momento, todo script criado em Python executava a primeira
linha de comando, em seguida a segunda e assim por diante. As
estruturas de controle permitem modificar o fluxo de execução
dessas instruções, de modo a analisar parâmetros pré-definidos e,
a partir da resposta, escolher um caminho a seguir.
Imagine que você deva escrever um programa que calcule o número
de Reynolds para um líquido escoando em um duto. O programa deverá
ser capaz de classificar o regime de escoamento de acordo com o
número de Reynolds calculado.
𝜌𝑣𝐷
𝑅𝑒 =
µ

Assim, se o número de Reynolds for menor ou igual a 2.000, o


escoamento será classificado como laminar. Se o Reynolds calculado
for maior que 2.000 e menor que 2.400, o escoamento é dito como
de transição. E se o valor de Reynolds for maior ou igual a 2.400,
o regime será turbulento. Podemos estruturar esse problema da
seguinte forma:
# Definindo as variáveis da equação de Reynolds
massa_espec = float(input('Digite o valor da massa específica do fluido: '))
velocidade = float(input('Digite o valor da velocidade do escoamento: '))
diâmetro = float(input('Digite o valor do diâmetro da tubulação: '))
viscosidade = float(input('Digite o valor da viscosidade dinâmica'))

# Calculando o número de Reynolds


Re=(massa_espec*velocidade*diametro)/(viscosidade)

# Avaliando o regime de escoamento


Se Re <= 2000
print('Reynolds = {Re}, logo o regime de escoamento é laminar!')
Se Re > 2000 e Re <2400
print('Reynolds = {Re}, logo o regime de escoamento é de transição!')
Se Re >= 2400
print('Reynolds = {Re}, logo o regime de escoamento é turbulento!')

23
2. Controle de fluxo

A depender do valor obtido para Reynolds, o programa irá executar


o primeiro, segundo ou terceiro bloco. Caso Reynolds seja menor
ou igual a 2.000, o primeiro bloco será executado e os blocos 2 e
3 não serão executados. Caso Reynolds seja maior que 2.000 e menor
que 2.400, o programa pula o primeiro bloco, executa o segundo e
pula o terceiro. Para Reynolds maior ou igual a 2.400, apenas o
bloco 3 será executado. Esse processo de escolher certos blocos
para serem executados é o que chamamos de controle do fluxo de
execução.
Dentre as estruturas de controle de fluxo, temos as ESTRUTURAS DE
DECISÃO (ou estrutura condicional) e as ESTRUTURAS DE REPETIÇÃO
(ou laço). Ambas as estruturas são controladas por lógica
booleana, as quais irão retornar um valor verdadeiro (True) ou
falso (False) para avaliar os blocos.

2.1. LÓGICA BOOLEANA


A expressão de lógica booleana irá comparar variáveis e/ou
expressões e, com o resultado True/False (únicos valores
possíveis), gerenciar as estruturas de controle de fluxo. Caso a
avaliação retorne um valor verdadeiro, o programa seguirá um certo
caminho, caso seja falsa, seguirá um caminho diferente. Dentro da
lógica booleana utilizamos dois tipos de operadores, os
relacionais e os lógicos. Para comparar dois valores podemos
utilizar os operadores relacionais.
Os operadores relacionais são:

Operador relacional Operação


== Igual a
!= Diferente de
> Maior que
>= Maior que ou igual a
< Menor que
<= Menor que ou igual a

Assim, podemos comparar se um valor é maior que o outro, diferente,


maior ou menor. Ao utilizarmos operadores relacionais em uma
expressão booleana, dois valores serão comparados e o resultado
será um valor booleano.
Para resolver o problema de Reynolds proposto anteriormente
utilizamos expressões booleanas com operadores relacionais. Ao
comparar o valor calculado de Reynolds com 2.000 e 2.400,
utilizamos os operadores <=, <, > e >=.

24
2. Controle de fluxo

Assim, a partir do resultado True/False, o programa executará o


primeiro bloco que retornar True.
Exemplo:

Os operadores lógicos são úteis quando queremos comparar mais de


um par de valores. No problema de Reynolds, perceba que o segundo
bloco avalia duas expressões diferentes. Ele será executado se Re
> 2.000 e se Re <2.400. Assim, duas expressões são avaliadas para
que o bloco seja executado. O operador lógico “e” (and) é um dos
operadores lógicos que temos disponíveis, os outros são:

Operador lógico Descrição


Retorna verdadeiro (True) se as duas
and expressões avaliadas forem verdadeiras.
Retorna verdadeiro se uma das duas expressões
or avaliadas for verdadeira.
Retorna o valor contrário (se o valor for
not verdadeiro, retorna falso e vice-versa).

Logo, os operadores relacionais e lógicos são utilizados nas


expressões booleanas com o intuito de retornar um dos valores
booleanos possíveis: True ou False.

25
2. Controle de fluxo

2.2. ESTRUTURA CONDICIONAL


Estruturas condicionais permitem que o programa tome a decisão de
executar certos comandos, condicionada a critérios de avaliação
estabelecidos. Para a condição de o comando avaliado retornar um
valor True, um bloco será executado e, caso retorne False, outros
blocos serão avaliados.

2.2.1. Estrutura if/elif/else


A estrutura if irá executar um determinado bloco de comandos
apenas se a condição avaliada for verdadeira, caso contrário nada
acontece.

Em linguagem Python, podemos escrever o diagrama acima como:

if teste_condicional:
comandos que serão executados caso o teste seja verdadeiro

Onde if representa a palavra chave da estrutura e o


texte_condicional a condição a ser avaliada. O sinal de dois
pontos (:) indica o início do bloco contendo as linhas de comandos
que serão executadas dentro do if. Tais comandos deverão ser
escritos na linha seguinte a do comando if de forma indentada
(iniciando a escrita com uma tabulação – espaço da margem
esquerda).

26
2. Controle de fluxo

O programa inicia a execução normal (linha a linha) até chegar na


estrutura condicional. Nesse ponto, a condição escrita após o if
é avaliada a partir de expressões booleanas, conforme apresentado
no tópico 2.1. Os comandos dentro da estrutura condicional só
serão executados se a condição for verdadeira. Após passar pela
estrutura condicional, o programa segue o fluxo padrão até o final
da rotina (linhas de comando que não estarão indentadas).
Exemplo:

O programa irá retornar apenas a mensagem Fim da estrutura e não


irá executar nenhuma linha dentro da estrutura if, uma vez que
“a” é menor que “b” (condição avaliada será falsa). Perceba que o
último print está fora da estrutura, uma vez que está alinhado
com o if. Assim, ela é executada, pois não pertence à estrutura.
A função print da estrutura só será executada SE a expressão “a >
b” for VERDADEIRA.
Caso os valores das variáveis sejam invertidos:

O programa irá retornar as seguintes mensagens:

Agora imagine um programa que compara dois valores e retorna qual


valor será maior que o outro. Nesse caso a estrutura terá dois
caminhos a serem seguidos. Se o valor de “a” for maior que o de
“b”, e se não for. Para esse problema a estrutura de if pode ser
expandida para:

27
2. Controle de fluxo

Em linguagem Python, podemos escrever o diagrama acima como:

if teste_condicional:
comandos que serão executados caso o teste seja verdadeiro
else:
comandos que serão executados caso o teste seja falso

Esta estrutura possui dois blocos, o dos comandos pertencentes ao


if, e o pertencente ao else. A sequência a ser executada é: se a
condição avaliada for verdadeira, execute os comandos do bloco do
if; caso contrário, execute os comandos do bloco do else. Para
definir a qual estrutura os blocos pertencem, estes devem ser
escritos afastados da margem (com indentação) e sempre abaixo das
estruturas.
O comando else (caso contrário) não deve ser escrito com nenhuma
condição, uma vez que a consequência de o teste ser falso é que o
bloco do else seja executado. Logo, apenas uma condição é avaliada
na estrutura if/else.
Exemplo:

28
2. Controle de fluxo

Retorna:

Ou

Agora considere que os valores digitados sejam iguais, o que


ocorrerá com o programa? Da forma como está escrito irá retornar,
de forma errônea, o print dentro do else. Para que o programa seja
executado da forma correta, devemos adicionar mais um condicional
a ser avaliado, aumentando a estrutura para:

Em linguagem Python, podemos escrever o diagrama acima como:

if teste_condicional 1:
comandos para executar caso o teste 1 seja verdadeiro
elif teste_condicional 2:
comandos para executar caso o teste 2 seja verdadeiro
else:
comandos para executar caso os testes 1 e 2 sejam falsos

29
2. Controle de fluxo

Esta é a estrutura mais completa do condicional if. A estrutura


funciona da seguinte forma: Se (if) a condição 1 for verdadeira,
execute os comandos relativos àquele bloco (comandos1). Se não
(elif), se a condição 2 for verdadeira, execute os comandos2. Caso
contrário (else), ou seja, caso nenhuma das expressões avaliadas
seja verdadeira, execute os comandos3.
Em estruturas assim, apenas um condicional if pode ser escrito. A
estrutura permite que sejam escritos quantos elif forem
necessários e que apenas um else seja escrito. Ainda, a escrita
do elif e/ou do else não é obrigatória.
Exemplo:

De forma alternativa a suprimir o else, podemos reescrever:

A única diferença é a forma com a qual o condicional foi escrito


(sem o else e utilizando duas estruturas elif), o resultado
mostrado será o mesmo em ambas as estruturas.
Perceba que os comandos sempre devem ser escritos com indentação
(tabulado). Os comandos que estão colados no lado esquerdo do
quadro (if/elif/else) sempre serão executados, os que estão
tabulados podem, ou não, ser executados.

30
2. Controle de fluxo

Ainda, podemos aninhar uma condição dentro da outra. O exemplo


anterior poderia ter sido escrito também como:

Aplicação 01: crie um programa em que o computador escolha um


número aleatório entre 0 e 5 e peça que o usuário tente descobrir
qual foi o número escolhido. Dica: pesquise o módulo random.

Aplicação 02: crie um código que solicite ao usuário um número e,


em seguida, retorne uma frase classificando o número como ímpar
ou par.

2.3. ESTRUTURA DE REPETIÇÃO


Estruturas de repetição ou loops (laços em português) possibilitam
que uma sequência de comandos seja executada repetidas vezes, até
que uma dada condição de parada seja satisfeita.
Os dois tipos principais de laços são o FOR e WHILE. A diferença
entre eles está na forma como a repetição será controlada.
Utiliza-se o laço FOR sempre que o usuário souber quantas vezes o
laço será repetido, enquanto o WHILE deve ser utilizado quando
não se tem noção de quantas repetições serão necessárias.

2.3.1. Estrutura while


O laço while irá repetir um bloco de comandos enquanto a condição
avaliada (expressão booleana) for verdadeira. Quando a condição
for falsa, o código para de ser repetido e a primeira linha após
o while será executada.

31
2. Controle de fluxo

Sua sintaxe é:

while teste_condicional:
comandos

A estrutura while é controlada por uma variável de controle que


normalmente é inicializada antes da estrutura. Cada vez que o laço
é executado, essa variável deve ser recalculada, e avaliada
novamente em while. Caso a condição continue verdadeira, uma nova
execução será realizada, caso a condição retorne falso, as
repetições serão finalizadas.
O laço while deve ser utilizado sempre que o usuário não saiba
quantas vezes o código deverá ser repetido.
Exemplo:

Retorna a sequência: 0, 1, 2, 3 e 4.

Aplicação 03: escreva um programa que solicite dois números de 1


a 10, realize a soma e mostre o resultado. O programa deve ser
capaz de solicitar o número novamente enquanto o usuário digitar
um valor fora do intervalo solicitado.

32
2. Controle de fluxo

Aplicação 04: crie um programa em que o computador escolha um


número aleatório entre 0 e 10 e peça que o usuário tente descobrir
qual foi o número escolhido. O jogador deve tentar até adivinhar
e o programa deve dar palpites para ajudar.

2.3.2. Estrutura for


O laço for irá repetir a execução da estrutura um determinado
número de vezes. Assim, quando utilizamos o laço for, já devemos
ter em mente quantas repetições deverão ocorrer.
A estrutura for compreende uma variável que irá receber o valor
de cada iteração, o intervalo das repetições e as linhas de
comandos. Quanto ao intervalo, este pode ser escrito com auxílio
da função range, que irá receber o valor inicial da sequência, o
final e, em alguns casos, o passo entre cada valor.
Sua sintaxe é:

for variável in range(inicio,fim):


comandos

O laço irá parar quando a repetição chegar ao valor final


declarado.
Exemplo: Laço para contar de 0 a 10.

Retorna:

Perceba que um novo comando dentro do print foi utilizado. O


comando end serve para mudar o padrão da nova linha que será
impressa. O padrão do Python é escrever o próximo valor na linha
abaixo. Quando o usuário digita o comando end = ' ', modifica o
padrão para que o programa continue imprimindo o próximo resultado
na mesma linha, deixando apenas um caractere de espaço entre os
valores.
33
2. Controle de fluxo

Exemplo: Laço para contar regressiva de 10 a 0.

Retorna:

Percebe-se que a função print aceita palavras chaves junto com o


argumento, sendo a sintaxe completa da função a seguinte:

print(argumento,palavra_chave)

Onde palavra-chave pode ser: end = ' ', (modifica o valor padrão
de quebra de linha, escrito como \n); sep = ' ', (modifica o valor
padrão do espaçamento entre valores que é o espaçamento em
branco); file = ' ', (modifica o valor padrão de onde será impresso
o argumento da função, o qual tem como padrão o terminal IPython).

Obs1: fique atento ao fato de que o programa não executa o valor


final escrito no intervalo. Por exemplo, se digitarmos o comando
de 1 a 5, o programa irá repetir o laço de 1 a 4, ignorando o
último valor.
Exemplo:

Retorna:

Observe que o valor final (no caso o 6) foi ignorando. Caso o


usuário precise que o intervalo seja todo comtemplado, basta
aumentar o intervalo em fim+1. Para o exemplo, iríamos compreender
o intervalo de 1 a 7.
34
2. Controle de fluxo

Obs2: Caso o início do intervalo seja 0 e o passo 1, é possível


escrever o programa apenas com o valor final desejado dentro de
range.
Exemplo:

Retorna:

A função range retorna um erro para variáveis do tipo float. Para


contornar este problema, podemos importar a biblioteca numpy (tema
do capítulo 05) e utilizar a função arange (inicio,fim,intervalo)
ou linspace(inicio,fim,quantidade de números). A principal
diferença entre elas é que, na função linspace o usuário alimenta
o intervalo que deseja que os números sejam escritos, enquanto
que em linspace o usuário escolhe quantos números deverão ser
escritos.
Exemplo:

Retorna:

Aplicação 05: utilize o comando for para desenvolver um programa


que mostre ao usuário a tabuada de multiplicação do valor
digitado.

35
2. Controle de fluxo

2.3.3. Comando break


Outra forma de parar um laço é utilizando o comando break. Caso
seja executado dentro da estrutura for/while, break irá forçar a
interrupção da repetição e levar o comando para a primeira linha
executável fora do laço.

Assim, o programa irá ser repetido enquanto (while) a sentença


for verdadeira (True). Sempre que o usuário digitar que gostaria
de continuar, o programa irá pedir um novo valor, uma vez que não
altera a expressão booleana True em while. Caso o usuário não
queira mais digitar valores, pode forçar a parada das repetições
utilizando o comando break.
O exemplo anterior utiliza o conceito de estruturas de controle
aninhadas, colocando uma estrutura if dentro de um while.

Aplicação 06: desenvolva um programa que solicite ao usuário


vários números e execute a soma entre eles. A cada número solicita
o programa deverá perguntar se o usuário deseja adicionar um novo
número.

Aplicação 07: repita a aplicação 05 utilizando o comando break


como critério de parada. Para tanto, considere que o teste
condicional do while adota valor fixo e igual a True (while True).

36
3. Variáveis compostas

Variáveis compostas CAPÍTULO

3
Variáveis compostas são variáveis que podem armazenar diversos
valores na memória do programa em uma única variável. Em Python,
as variáveis compostas podem ser do tipo lista, tupla e
dicionário.

3.1. LISTAS
Listas são definidas como variáveis compostas, uma vez que podem
armazenar diversos valores na memória do programa em uma única
variável. Em Python, as variáveis compostas podem ser do tipo
tupla, lista e dicionário.

3.1.1. Declarando listas


Para escrever uma lista basta que os elementos sejam escritos
entre colchetes [], utilizando vírgula para separar os elementos.
var = [1, 2, 3, 4, 5]
alfa = ['a ', 'b ', 'c ', 'd ']

Outra forma de declarar uma lista é utilizar a função list que


pode ser utilizada sozinha ou combinada com outras funções como,
por exemplo, a função range. A função range irá criar uma sequência
de números iniciando em 0 e parando um elemento antes do limite
declarado. Assim, a declaração
valores=list(range(1,10))

irá gerar a lista [1, 2, 3, 4, 5, 6, 7, 8, 9] a ser armazenada na


variável valores. Perceba que o último elemento declarado em range
sempre é eliminado.
Caso o usuário deseje declarar uma lista vazia, basta, após o
operador de atribuição, digitar [] ou utilizar a função list.
número=list()
37
3. Variáveis compostas

Os elementos de uma lista são identificados a partir da posição


que eles irão ocupar dentro da lista. Cada posição é nomeada como
índice da lista, sempre iniciando a contagem dos índices em zero
(0), da esquerda para a direita do sinal de igualdade.
var = ['a ','b ', 'c ','d ']
0 1 2 3

Para acessar um elemento específico da lista, basta escrever o


nome da variável e, entre colchetes, o número do índice relativo
àquele elemento. A sintaxe
nome_lista[i]
irá retornar o elemento que ocupa o índice i da lista nome_lista.
Exemplo:

Obs: A criação de uma lista a partir de pedaços de uma lista maior


é conhecida como fatiamento.

Obs: Os índices da lista também podem ser contados da direita para


a esquerda, onde passarão a assumir índices negativos, começando
de -1, seguido por -2 e assim por diante.
0 1 2 3 4 5 6 7 8 9 10 11 12

a l v a r o d a n i e l
-13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

O tamanho de uma lista é relativo ao número de elementos que


compões as listas. Para retornar seu tamanho, basta utilizar a
função len () e o nome da variável.

38
3. Variáveis compostas

Exemplo:

A função len irá retornar quantos elementos estão dentro da lista.


As listas permitem que seus elementos sejam alterados durante a
execução de um programa, podendo o usuário modificar os elementos
ou adicionar novos elementos, alterando assim o comprimento da
lista.

3.1.2. Manipulando listas


Para adicionar elementos novos a uma lista, basta utilizar o
comando append (acrescentar em português).
Exemplo:

Perceba que o comando append enviou o novo elemento para a posição


final da lista. Caso o usuário queira definir em qual posição o
novo elemento deverá ser adicionado, basta utilizar o comando
insert.
Exemplo:

Com a função insert, os elementos são realocados (posição dentro


da variável é alterada) automaticamente pelo Python. Analisando o
exemplo anterior, o elemento carro estava na posição 0 (linha 10)
da variável, passando para a posição 1 (linha 12) quando ônibus
ocupou a posição 0.
39
3. Variáveis compostas

Obs: os comandos .append e .insert são definidos em Python como


métodos, sendo estes caracterizados pela seguinte estrutura:
texto.método()

Assim como as funções, os métodos recebem argumentos dentro dos


parênteses, indicando como deverão funcionar.
Para modificar um elemento já existente na lista, basta declarar
o novo valor e o índice que ele irá ocupar na lista:
nome_lista[i] = novo_valor
Exemplo:

Quando o operador colchetes aparece do lado esquerdo da atribuição


(linha 18), ele irá identificar o índice da lista no qual o
elemento será atribuído.
Caso o usuário necessite apagar elementos em uma lista, o comando
del ou remove poderá ser utilizado.
Exemplo:

O comando del irá apagar o elemento correspondente à posição


declarada dentro da variável. Ao executar este comando no exemplo
anterior (linha 2), o elemento que ocupa o índice 2 da variável
resultado (elemento 36) será apagado.

40
3. Variáveis compostas

Já o comando remove fará com que o programa busque por um elemento


especifico (aquele declarado ao final do comando entre parênteses)
dentro da variável para ser apagado (linha 5). Ambos os comando
também podem ser aplicados a variáveis do tipo str.
Exemplo:

Ainda, existe o comando pop que também irá apagar a variável


armazenada no índice escrito entre parênteses do comando. A
diferença do comando pop para o del é que ele retorna o valor do
elemento que foi retirado.
Exemplo:

Obs1. Caso o usuário tente apagar um índice ou um elemento que não


existe na variável, o programa irá retornar um erro.
Obs2. Para remover mais de um elemento, pode-se utilizar a função
del com um índice do intervalo que será apagado.

3.2. TUPLAS
As tuplas funcionam de forma semelhante às listas, diferindo
apenas no fato de que as tuplas não permitem que seus elementos
sejam alterados durante a execução de um programa. Para que isso
ocorra, o usuário deverá parar a execução para alterar o elemento.

41
3. Variáveis compostas

São comumente escritas entre parênteses e seus elementos são


separados por vírgulas.
var = (1, 2, 3, 4, 5)
alfa = ('a', 'b', 'c', 'd')

3.3. DICIONÁRIOS
Para escrever dicionários basta que os elementos sejam escritos
entre chaves {} e separados por vírgula. Outra forma de declarar
um dicionário é utilizar a função dict.
A principal diferença entre listas, tuplas e dicionários está no
fato de que os elementos das listas e das tuplas são representados
por índices numéricos (0,1,2....), enquanto que em um dicionário
o usuário poderá identificar os índices da forma que preferir.
dados={'nome': 'João', 'idade': '25'}

João é o valor do primeiro elemento e nome o identificador,


enquanto que o segundo elemento possui valor igual a 25 e é
identificado como idade.
Para adicionar novos elementos em um dicionário, basta digitar o
nome do dicionário, entre colchetes o nome que o índice terá,
utilizar o sinal de atribuição e digitar o valor do elemento.
Exemplo:

Aplicação 01: desenvolva um programa que solicite ao usuário


vários números e execute a soma entre eles. A cada número solicita
o programa deverá perguntar se o usuário deseja adicionar um novo
número. Utilize uma variável composta para resolver o problema.

42
4. Criando funções

Criando funções CAPÍTULO

4
4.1. FUNÇÕES
Funções são códigos preestabelecidos com o objetivo de facilitar
a rotina de trabalho de um programador. Funções como print, input,
int, str são constantemente utilizadas durante a programação.
A sintaxe de uma função compreende a palavra chave que define uma
função no Python (def), seguida do nome da função, do argumento
(entre parênteses) e ao final dois pontos. Considere a função
abaixo

def cumprimento(nome):
print('Olá',nome)

A função é definida pelo comando def e passa a ser nomeada por


cumprimento. Entre parênteses deve ser escrito o(s) argumento(s)
(valor a ser passado para os próximos comandos, também chamado de
parâmetro), sendo a primeira linha finalizada com dois pontos (:)
que irá auxiliar o programa a realizar uma indentação (identifica
que as linhas que serão escritas abaixo fazem parte da função).
A primeira linha de uma função (iniciada com def) é chamada de
cabeçalho (termina com os dois pontos :), enquanto que as linhas
seguintes representam o corpo da função (devem sempre estar
indentadas). Caso a endentação seja quebrada, as linhas que serão
digitadas não farão mais parte da função, passando a compreender
a rotina principal.
Para o exemplo citado, a função tem por objetivo imprimir na tela
a frase “Olá”, acrescida ao nome que será digitado pelo usuário.
Para chamar a função, basta digitar o seu nome e, entre parênteses,
o argumento que o usuário queira que apareça. Assim, o comando
cumprimento('Álvaro')

43
4. Criando funções

irá gerar a resposta: Olá Álvaro.


O usuário pode digitar mais de um argumento, os quais podem ser
do tipo numéricos e/ou cadeias de caracteres, conforme apresentado
nos próximos exemplos.
Exemplo:

Retorna

Exemplo:

Retorna

Python ainda permite que o usuário não defina o tamanho da entrada


(entrada com múltiplos parâmetros). Isso é muito útil para o caso
de a função ser usada para listas com tamanhos diferentes como
argumento. Para tanto, basta o usuário utilizar o comando * junto
ao argumento de entrada.
Exemplo:

Retorna

Perceba que a resposta foi escrita entre parênteses. Nesse caso


não temos uma lista, mas sim uma tupla, a qual possui as mesmas

44
4. Criando funções

funções da lista, com o diferencial que seus valores não podem


ser alterados durante a execução do programa.
Para gerar um manual de ajuda para auxiliar um usuário a utilizar
sua função, o programador deve adicionar linhas de comentário logo
abaixo do comando def. Para tanto, basta abrir três aspas duplas
na linha abaixo do comando def, digitar as informações referentes
a como utilizar a função, e finalizar na linha abaixo com mais
três aspas duplas.
Exemplo:

Analisando o exemplo acima, ao digitar o comando help(contador) o


programa irá retornar a frase que está como comentário.
Para entender o funcionamento de uma função, precisamos definir o
que são variáveis (ou escopo) locais e globais. Quando a variável
é definida dentro da área da função, dizemos que ela é uma variável
local da função, logo, só irá existir dentro da função (não será
acessível na rotina principal). Variáveis definidas no programa
principal (fora da função), são definidas como sendo global, uma
vez que ela irá existir no programa principal e dentro da função.
Exemplo:

A função irá somar as variáveis “a” e “b”. Como essas variáveis


foram escritas no programa principal (não estão indentadas dentro
da função), estas são variáveis globais (podem ser usadas dentro
e fora da função).
Já a variável “s” que irá armazenar a soma entre as variáveis
globais, é uma variável local da função, uma vez que foi escrita

45
4. Criando funções

dentro da função soma. Assim, caso o usuário tente chamar o valor


de s no programa principal, o mesmo não será encontrado.
No exemplo anterior, a função irá somar os dois valores fornecidos
pelo programa principal e armazenar o resultado na variável local
s. Por se tratar de uma variável local, seu valor não poderá ser
usado fora da função, por exemplo, se a função print for escrita
no programa principal, o programa retornará um erro, uma vez que
não irá encontrar a variável s. Para que seja possível o uso do
resultado do cálculo fora da função, deve-se utilizar a função
return.
Exemplo:

A partir da função return, o usuário poderá armazenar o valor do


cálculo da função em uma variável global e utilizar posteriormente
seu valor. Para o exemplo, o valor da variável local “s” irá
retornar para uma variável global.
Exemplo:

Retorna:

Aplicação 01: crie uma função chamada contador em um arquivo em


Python. Essa função deverá receber um valor inicial, final e um
passo a ser definido pelo usuário e, sem seguida, realizar a
contagem (seja progressiva – valor menor par o maior - ou
regressiva – valor maior para um menor).

46
5. Uso de módulos em problemas de engenharia química

Uso de módulos em problemas CAPÍTULO

5
de engenharia química

O Python possui módulos, ou bibliotecas, as quais podem ser


utilizadas para auxiliar na resolução de problemas. Uma das
grandes vantagens do Python está no fato de que existe uma grande
comunidade que cria e compartilha diversos módulos, os quais podem
ser importados durante a execução de um programa.
Neste capitulo, iremos aprender a trabalhar com o módulo
matplotlib para plotar gráficos, com o sympy para resolver
problemas com equações algébricas (lineares e não lineares) e com
os módulos scipy e numpy para resolver problemas com equações
diferenciais ordinárias.

5.1. IMPORTANDO MÓDULOS


Para importar módulos podemos utilizar diferentes sintaxes:
Sintaxe de chamada Descrição
Importa o módulo e todas suas funções.

import nome_modulo Ex:


import math
a=int(input('Digite o valor: ')
raiz=math.sqrt(a)
Importa apenas a função especificada do
módulo.
from modulo import função
Ex:
from math import sqrt
a=int(input('Digite o valor: ')
raiz=sqrt(a)
Importa o módulo e modifica a sintaxe
de chamada.

import modulo as nome Ex:


import math as mt
a=int(input('Digite o valor: ')
raiz=mt.sqrt(a)
from modulo import função as nome Ex:
From math import sqrt as raizquad
a=int(input('Digite o valor: ')
raiz= raizquad(a)

47
5. Uso de módulos em problemas de engenharia química

5.2. PLOTANDO GRÁFICOS – BIBLIOTECA MATPLOTLIB


Para plotar gráficos no Python, o usuário poderá utilizar a
biblioteca matplotlib (https://matplotlib.org/) que já vem
instalada no Spyder. Caso não esteja disponível, a instalação é
executada digitando o seguinte comando no pront IPython:
pip install matplotlib

Após instalar a biblioteca no Python, não será mais necessário


repetir este procedimento.
O primeiro passo para utilizar a biblioteca é importar ela para o
programa a partir da função import:

import matplotlib.pyplot as plt

No comando acima, a função pyplot da biblioteca matplotlib foi


importada (import matplotlib.pyplot). Para facilitar a chamada
durante a programação, o comando matplotlib.pyplot foi nomeada
como plt, ficando mais simples a escrita.
Para criar um gráfico utilizando a função plt, basta declarar os
valores dos eixos “x” e “y” e chamar a função plt.plot(x,y).
Exemplo:

Os comandos irão gerar o seguinte gráfico:

48
5. Uso de módulos em problemas de engenharia química

Podemos também gerar gráficos com mais de uma função na mesma


figura.
Exemplo:

Os comandos irão gerar o seguinte gráfico:

Perceba que ambos os gráficos gerados estão sem nome nos eixos,
sem título e legenda. Para nomear as partes do gráfico, basta
utilizar os seguintes comandos após a função plt.plot() ter sido
chamada:
plt.xlabel('Nome que irá aparecer no eixo X')
plt.ylabel('Nome que irá aparecer no eixo y')
plt.title('Nome que irá aparecer no título do gráfico')
plt.legend(['legenda1', 'legenda2'])

O gráfico plotado com todas as informações irá gerar algo do tipo:

49
5. Uso de módulos em problemas de engenharia química

Ainda, o usuário poderá alterar a cor, o tipo da linha e do


marcador que será utilizado. Para realizar tais mudanças, basta
especificar as palavras chaves (na forma de string) dentro do
comando plt.plot após os dados serem explicitados, conforme
apresentado abaixo:

plt.plot(x,y,'ro--')

O comando irá plotar o par x,y na cor vermelha (r), com marcador
tipo círculo (o) e linhas serrilhadas (--).
Exemplo:

Retorna:

Todas as cores, os tipos de linhas e marcadores disponíveis podem


ser consultados na documentação do matplotlib no seu site
(https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#
matplotlib.pyplot.plot).

50
5. Uso de módulos em problemas de engenharia química

Aplicação 01: Um tanque industrial cilíndrico com 1 m de raio,


preenchido com óleo viscoso, deve ser drenado através de um tubo
com 0,2 m de raio conectado à sua base. O perfil de velocidade do
óleo no tubo de drenagem pode ser descrito pela equação:
v = vmáx [1 – (r/R)2]
onde: v = velocidade do óleo, vmáx = velocidade máxima do óleo, r
= raio do tubo e R = raio do tanque. Plote um gráfico do perfil
de velocidade no duto, sabendo que vmáx = 0,35 m/s. Dica: use uma
estrutura for.

5.3. CRIANDO MATRIZES – BIBLIOTECA NUMPY


A biblioteca numpy é voltada para a escrita e cálculo de operações
com matrizes multidimensionais. Caso o Spyder tenha sido baixado
a partir do Anaconda, o módulo numpy já vem previamente instalado.
Geralmente, a biblioteca numpy é importada e chamada como np:

import numpy as np

Variáveis criadas a partir deste módulo serão do tipo array


(matriz em inglês), nomeadas como ndarray, as quais compreendem
uma tabela de elementos que pode conter n dimensões (aqui
dimensões de uma matriz serão chamadas de eixo).
As principais funções da biblioteca são:
.ndim = retorna o número de eixos (dimensão) da matriz.
.shape = retorna o tamanho da matriz em cada dimensão na forma de
tupla (x,y).
.size = retorna o número total de elementos da matriz.
.dtype = retorna a que classe os elementos pertencem.

5.3.1. Criando matrizes unidimensionais


Para criarmos uma matriz basta utilizar a função array a partir
da seguinte sintaxe:

51
5. Uso de módulos em problemas de engenharia química

nome_var = np.array([elemento1, elemento2, ..., elemento n])

A sintaxe acima irá gerar a matriz nome_var com uma linha.


Exemplo:

Retorna:

1 # Matriz com uma dimensão (vetor linha).


(3,) # Matriz unidimensional com 3 colunas.
3 # Matriz contém 3 elementos (1, 2 e 3).
int32 # Tipo dos elementos da matriz.

Para criar sequência de números com intervalo fixo, podemos


utilizar a função arange:
Exemplo:

Retorna:

Outra função útil para gerar sequências de números é a função


linspace, onde o usuário poderá declarar quantos valores pretende
que sejam escritos no intervalo definido.
Exemplo:

Retorna:

52
5. Uso de módulos em problemas de engenharia química

5.3.2. Criando matrizes bidimensionais


Para criar uma array bidimensional basta utilizar vírgula fora
dos colchetes e abrir um novo par de colchetes.

var = np.array([[elemento1, elemento2],


[elemento3, elemento4],
[elemento5, elemento6]])

Obs1: Todas as técnicas de fatiamento apresentadas no capítulo 1


para string, podem ser utilizadas em matriz. Por exemplo, para
acessar um elemento específico em uma array, basta digitar o nome
da variável e, entre colchetes, o número do índice correspondente
ao elemento.
Exemplo:

Retorna:

5.3.3. Manipulando matrizes


As mesmas operações aritméticas vistas no capítulo 1 podem ser
aplicadas a matrizes, sendo agora aplicadas elemento a elemento.
Assim, poderemos somar, subtrair, multiplicar ou dividir uma
matriz por outro, desde que ambas possuam a mesma dimensão.

53
5. Uso de módulos em problemas de engenharia química

Exemplo:

Retorna:

Caso o usuário necessite realizar uma multiplicação entre matrizes


seguindo as regras da álgebra linear, poderá executar a partir
dos operadores @ ou .dot.
Exemplo:

54
5. Uso de módulos em problemas de engenharia química

Retorna:

Obs2: Para realizar multiplicação matricial, o número de colunas


da primeira matriz deverá ser igual ao número de linhas da segunda
matriz.

Algumas operações podem ser realizadas com o corpo de uma matriz


ou seus elementos, sendo alguns exemplos apresentados abaixo.
Várias funções estão disponíveis para consulta conforme
necessidade do uso (https://docs.scipy.org/doc/).
.sum() # Retorna a soma dos elementos da matriz.
.prod() # Retorna o produto dos elementos da matriz.
.min() ou .max() # Retorna o menor ou o maior valor da matriz.
.T # Retorna a matriz transposta.

Exemplo:

Retorna:

Obs3: Matrizes unidimensionais (vetores) não são transpostos em


Python.

55
5. Uso de módulos em problemas de engenharia química

Exemplo:

Retorna:

Aplicação 02: Repita a aplicação 01 utilizando os conhecimentos


acerca de matriz.

5.4. SOLUÇÃO DE EQUAÇÕES ALGÉBRICAS E DIFERENCIAIS –


BIBLIOTECA SCIPY
O módulo scipy conta com diversos submódulos (bibliotecas do
módulo principal) que auxiliam na resolução dos mais variados
problemas de engenharia. Cada uma das bibliotecas contidas neste
módulo é dedicada a solucionar um tipo de problema específico.
Nosso interesse em utilizar o módulo será na resolução de
problemas de equações algébricas (lineares e não lineares) e
equações diferenciais (ordinárias ou parciais). Um guia de
referência pode ser acessado no site oficial do scipy
(https://docs.scipy.org/doc/).

5.4.1. Solução de sistemas de equações algébricas lineares


Um sistema de equações algébricas é dito linear caso todas as
equações sejam escritas a partir de relações algébricas entre
variáveis de grau um, e cada termo contém não mais que uma
variável.
Sistemas lineares podem ser rescritos da forma matricial
𝐴𝑥 = 𝑏

onde A é a matriz de coeficientes, x é o vetor de incógnitas e b


é o vetor dos termos independentes. A solução do sistema matricial
irá fornecer o valor das incógnitas do problema. A partir da

56
5. Uso de módulos em problemas de engenharia química

biblioteca scipy.linalg podemos obter a solução para o sistema


matricial anterior.

import scipy.linalg as linalg

Da biblioteca linalg, iremos utilizar a função solve, que possui


a seguinte sintaxe:

x = linalg.solve(a,b)

A função solve utiliza o método de fatoração LU para encontrar o


vetor das incógnitas. Podemos definir quatro passos principais na
resolução de sistemas de equações algébricas:

Passo 1: importar as funções numpy (como np) e scipy.linalg (como


linalg);
Passo 2: declarar as matrizes “a” e “b” utilizando a função array;
Passo 3: chamar a função linalg.solve(a,b);
Passo 4: mostrar o resultado de forma adequada.

Exemplo: Resolva o seguinte sistema de equações algébricas:


𝒙𝟏 + 𝟐𝒙𝟐 + 𝟒𝒙𝟑 − 𝟏 = 𝟎
𝒙𝟏 + 𝒙𝟐 + 𝟐𝒙𝟑 − 𝟓 = 𝟎
𝟒𝒙𝟏 + 𝟖𝒙𝟐 − 𝟐𝒙𝟑 + 𝟑 = 𝟎

57
5. Uso de módulos em problemas de engenharia química

Retorna:

5.4.2. Solução de sistemas de equações algébricas não lineares


A resolução de sistemas de equações algébricas não lineares
consiste em determinar simultaneamente as raízes das equações que
compõem o sistema. A solução desse sistema irá gerar um conjunto
de valores de x para os quais as equações são simultaneamente
nulas. Os valores encontrados são denominados raízes da equação
ou zeros da função.
Inicialmente vamos encontrar a raiz de uma equação não linear.
Para tanto, podemos utilizar a biblioteca scipy.optimize
(comumente chamada por opt). Duas funções desta biblioteca merecem
atenção: toms748 e newton.

import scipy.optimize as opt

58
5. Uso de módulos em problemas de engenharia química

A função toms748() deve ser utilizada para calcular a raiz de uma


equação não linear dentro de um intervalo de busca [a,b]. Ela usa
uma mistura do método de interpolação cúbica inversa com o método
de Newton com convergência quadrática e possui a seguinte sintaxe:

sol = opt.toms748(função,a,b)

onde função é a equação não linear que deve ser escrita dentro de
uma função definida pelo usuário (usando def), “a” um escalar
contendo o limite inferior do intervalo de busca e “b” um esalar
com o limite superior do intervalo de busca.
A grande vantagem deste método é que não necessita de uma
estimativa inicial, apenas do espaço de busca. Já o método de
newton(), necessita que uma estimativa inicial seja fornecida para
a busca da solução. Sua sintaxe é:

sol = opt.newton(função,x0)

onde função é a equação não linear que deve ser escrita dentro de
uma função definida pelo usuário (usando def) e x0 um escalar
contendo a estimativa inicial.

Exemplo: Encontre a raiz da função x³=1

Retorna:

59
5. Uso de módulos em problemas de engenharia química

Em ambos os casos, devemos seguir os seguintes passos para a


resolução:

Passo 1: importar o módulo spicy.optimize como opt;


Passo 2: declarar uma função contendo a equação na forma f_x = 0;
Passo 3: chamar a função toms748 ou newton;
Passo 4: mostrar o resultado de forma adequada.

Para a solução de sistemas de equações não lineares, podemos


utilizar a função root() do modulo spicy.otimize para calcular a
raiz do vetor de funções. Assim como no método de Newton, esta
função necessita de uma estimativa inicial. Sua sintaxe é:

sol = opt.root(função,x0)

Onde a função pode ser escrita como um vetor contendo as funções


do sistema como elementos. x0 será um vetor contendo a estimativa
inicial. Perceba que o número de elementos dentro do vetor x0 deve
ser igual ao número de elementos dentro do vetor função. O passo
a passo para resolver problemas não lineares é:

Passo 1: importar o módulo spicy.optimize como opt;


Passo 2: declarar uma função contendo uma matriz com as equações
na forma f_x = 0;
Passo 3: chamar a função root;
Passo 4: mostrar o resultado de forma adequada.

Exemplo: Resolva o sistema de equações algébricas:


𝑥 + 0,5(𝑥 − 𝑦)3 = 1
𝑦 + 0,5(𝑦 − 𝑥)3 = 0

60
5. Uso de módulos em problemas de engenharia química

Retorna:

A equação é escrita em função de um vetor de incógnitas (aqui


nomeado “x” com 2 elementos [x[0], x[1]]). O print da solução
retorna várias informações do método. Caso o usuário queira
retornar apenas algumas informações específicas, poderá declarar
resultados específicos como:
print(f'f(x) = {solution.fun}') #Mostra o valor das funções em x.
print(solution.message) #Informa se o método convergiu.
print(f'As raízes são: ')
print(f'X1 = {solution.x[0]}') #Apresenta a raiz x
print(f'X2 = {solution.x[1]}') #Apresenta a raiz y

5.4.3. Solução de sistemas de equações diferenciais ordinárias


Para resolver problemas de condição inicial para um sistema de
equações diferenciais ordinárias, podemos utilizar a função
solve_ivp do módulo scipy.integrate.

from scipy.integrate import solve_ivp

61
5. Uso de módulos em problemas de engenharia química

Sua sintaxe é:

sol = solve_ivp(função, t_span, y0)

Primeiro iremos exemplificar a resolução de uma equação


diferencial ordinária.

Exemplo: Encontre a solução da equação:


𝑑𝑦
= −𝑦 2 + 1
𝑑𝑡
Para um intervalo de integração entre 0 e 5, sabendo que no tempo
zero, o valor de y é zero (y(0)=0).

Retorna:

62
5. Uso de módulos em problemas de engenharia química

Perceba que a variável t (tempo) retorna como um vetor n_pontos,


enquanto que a variável calculada y (valores calculados) retorna
como uma matriz de dimensão (n, n pontos). Para conseguir plotar
o gráfico de t vs y, precisamos transpor (x.T) a matriz resultado
(y), transformando ela em um vetor linha.
O gráfico impresso pelo programa apresenta poucos pontos, ficando
assim o seu perfil mal desenhado. Para contornar esse problema,
podemos utilizar os parâmetros adicionais da função,
especificamente o parâmetro dense_output. Quando ativado
(dense_output=True) dentro da função solve_ivp, o parâmetro
permite que seja criado um novo vetor para a variável independente
e, a partir dele, calcular um novo vetor resposta.
Para o exemplo anterior, podemos refazer como:

Retorna:

63
5. Uso de módulos em problemas de engenharia química

Assim, ao adicionarmos o parâmetro dense_output=True, deixamos o


caminho aberto para criar uma nova variável t com mais pontos e,
para cada ponto, calcular uma nova variável resposta z a partir
do comando sol().
Para resolver sistemas de equações diferenciais ordinários o
raciocínio é o mesmo, contudo, mais de uma equação deve ser
definida dentro da função def.
Exemplo: Dado o sistema abaixo:
𝑑𝑥 𝑑𝑦 𝑑𝑧
= −𝑥; = 𝑥 − 2𝑦; = 2𝑦
𝑑𝑡 𝑑𝑡 𝑑𝑡

Calcule o perfil de x, y e z ao longo de 8 horas, sabendo que


x(0)=5, y(0)=0 e z(0)=0.

Retorna:

64
5. Uso de módulos em problemas de engenharia química

De forma alternativa:

Retorna:

65
BIBLIOGRAFIA

Siracusa, P. C., Volpatto, D. Programando em Python. Disponível em:


https://pedrosiracusa.com/curso_python_eamc/. Acesso em: novembro de
2020.
Silva, W. Curso de Python para Pesquisadores: Uma Alternativa ao Matlab.
https://www.youtube.com/watch?v=YmcPq485fCs&list=PLg3ZPsW_sghTw40eEdgU
hnMO-uthjcA3g&ab_channel=WalissonSilva. Acesso em: outubro de 2020.

Gustavo Guanabara. Curso em vídeo - Python 3.


https://www.cursoemvideo.com/course/python-3-mundo-1/aulas/tratando-
dados-e-fazendo-contas/modulos/exercicio-8-conversor-de-medidas/.
Acesso em: outubro de 2020.
Instituto de Matemática e Estatística. Universidade de São Paulo.
Material para cursos baseados em Python. Disponível em:
https://panda.ime.usp.br/panda/python/index. Acesso em: outubro de
2020.
Numpy - Quickstart tutorial. Disponível em:
https://numpy.org/doc/stable/user/quickstart.html. Acesso em: novembro
de 2020.
Rubens Prates. Pense em Python. Editora Novatec. Disponível em:
https://pense-python.caravela.club/introducao.html. Acesso em: novembro
2020.
SciPy Reference Guide – Release 1.5.4. Disponível em:
https://docs.scipy.org/doc/. Acesso em: novembro de 2020.

Você também pode gostar