Enviar um café pro programador

Vídeo-Aula 014: IF e ELSE's aninhados

 Neste tutorial em vídeo aula, vamos explicar e mostrar como aplicar a técnica dos testes condicionais aninhados (IF e ELSE's dentro de IF e ELSE's), dando sequência ao vídeo sobre O comando ELSE .

Confira a aula e se inscreva em nosso canal do Youtube:


IF e ELSE em Python

Relembrando nossas aulas sobre o teste condicional IF e ELSE, usamos esses comando quando queremos decidir quais blocos de código devem ser executados e quais não devem, baseado em um teste.

Caso a condição testada no IF seja verdadeira (TRUE), o bloco de código 'dentro' (identado) do IF é executado. Caso a condição seja falsa, o código dentro do bloco do ELSE é que será executado.

Um esboço do teste condicional IF-ELSE é o seguinte:

if (condição): // Se for verdadeiro // esse trecho de // código vai ser // executado else: // Se for falso // esse trecho de // código vai ser // executado

Como o resultado lógico de uma condição é sempre verdadeiro OU falso, apenas o bloco IF ou o bloco ELSE vai ser executado.


Exercícios de IF e ELSE aninhados

  • Problema 01
Na Universidade Federal do Ceará (UFC), para você ser aprovado em uma cadeira da Física, você deve ter média igual ou superior a 7. Se sua média for menor que 4, está reprovado direto. E de 4 até 6.9, você poderá fazer uma avaliação final para tentar ser aprovado. Crie um programa em Python que pede a nota do usuário e avisa se ele foi aprovado, reprovado ou se vai para a final.

  • Problema 02
No sistema eleitoral brasileiro, quem tem menos de 16 anos é proibido de votar. De 16 até antes dos 18, você pode votar caso queira. Também é preferencial votar quem tiver mais de 65 anos. Porém dos 18 aos 65 anos, é obrigatório o voto. Faça um script em Python que pede a ideia do usuário e diz se ele deve votar obrigatoriamente, preferencialmente ou se é opcional.


Como usar IF e ELSE aninhados

Resolução do Problema 01

Inicialmente, pedimos a nota do aluno e armazenamos na variável float nota.

Agora, temos que comparar essa nota com as notas críticas: 4 e 7

No primeiro IF, testamos quem tirou 7 ou mais, e avisar que ele foi aprovado. O ELSE correspondente desse IF vai filtrar quem tirou abaixo de 7.

Porém, há duas categorias de notas abaixo de 7: as que tiraram abaixo de 4 e as que tiraram entre 4 e 7.
Assim, dentro do ELSE, colocamos um IF aninhado, testando quem tirou menos de 4, e avisamos que essa pessoa reprovou.

Já no ELSE desse IF interno, ele vai filtrar quem tirou 4 ou mais...porém, antes de cair nesse ELSE aninhado, o ELSE externo já tinha filtrado quem tinha tirado abaixo de 7.

Ou seja, esse ELSE aninhado vai capturar quem tirou de 4 até 7, e avisamos que essas pessoas vão fazer uma avaliação recuperativa.

nota = float( input("Digite sua nota: ") ) if nota>= 7: print("Parabéns, você foi aprovado") else: if nota<4: print("Você foi reprovado") else: print("Poderá fazer avaliação recuperativa")


Resolução do Problema 02

Inicialmente, solicitamos a idade da pessoa e armazenamos na variável inteira idade.

Temos aqui três valores críticos: 16, 18 e 65

Vamos então, primeiro comparar a idade com o número 16, através de um IF inicial. Se for menor, avisamos que é proibido votar. No ELSE, vai quem tem 16 anos ou mais.

Dentre essas pessoas que tem 16 ou mais, vamos colocar outro IF para filtrar quem tem menos de 18, e avisamos que o voto é facultativo para essas pessoas.

Já o ELSE desse segundo IF (ambos aninhados), vai capturar quem tem 18 anos ou mais. Mas nessa classe de pessoas, tem as que tem até 65 e as que tem 65 anos ou mais.

Então, vamos aninha mais um IF dentre desse outro ELSE. Lá testamos quem tem 65 anos ou menos, e em caso positivo, avisamos que o voto é obrigatório.

Por fim, o ELSE correspondente a esse último IF vai pegar as pessoas que tem mais de 65 anos, e que são facultadas ao voto.

idade = int( input("Digite sua idade: ") ) if idade<16: print("Você não pode votar") else: if idade<18: print("Voto facultativo") else: if idade<=65: print("Voto obrigatório") else: print("Voto facultativo")

Vídeo Aula 13 - O comando ELSE do teste condicional IF-ELSE

 No tutorial anterior, aprendemos a usar o teste condicional IF em Python. Daremos sequencia nesses estudos de testes para aprender o comando ELSE. Mas, antes, vamos relembrar o teste condicional IF.

Assista no Youtube nossa vídeo aula, e nos ajude dando like e se inscrevendo no canal Programação Progressiva:


O Teste Condicional IF em Python

Ele serve para testar uma condição (uma comparação ou mesmo apenas um valor), e caso o retorno desse teste seja verdadeiro (TRUE), ele executa um bloco específico de código. Caso seja falso (FALSE), ele não executa aquele código dentro do IF.

Por exemplo, o seguinte código pede a idade do usuário e avisa se ele é maior de idade ou não:

idade = int( input("Digite sua idade: " ) ) if (idade>=18): print("Você é maior de idade")

Mas veja que ele só avisa se é de maior. E se for de menor? Bem, aí fazemos outro teste condicional abaixo, testando sempre a condição oposta.

Se antes, testamos se tinha 18 ou mais, agora vamos testar se tem menos de 18:


idade = int( input("Digite sua idade: " ) ) if (idade>=18): print("Você é maior de idade") if (idade<18): print("Você é menor de idade")


E aí que vai entrar o ELSE.

O Teste Condicional ELSE em Python

Programador é preguiçoso, mas no bom sentido.

O resultado de uma comparação só pode ser TRUE ou FALSE, e o IF vai verificar e capturar sempre uma comparação verdadeira.

Então, adivinha: o que o ELSE vai fazer ?
Ele vai rodar um determinado trecho de código, caso o resultado do teste condicional seja FALSO.

Veja bem, ele vai usar o teste condicional do IF, logo, ele não vai precisar testar nada mais além daquilo.

Então, nosso código vai ficar assim:


idade = int( input("Digite sua idade: " ) ) if (idade>=18): print("Você é maior de idade") else: print("Você é menor de idade")


Não esqueça dos dois pontos, nem de alinhar o ELSE com seu IF.

Importante:

Cada else pertence somente a um IF, na qual está alinhado (identado)


Exercício

No exemplo anterior, o IF captura se o usuário tem 18 anos ou mais. Como ficaria o código para o IF filtrar quem é de menor, e deixar a mensagem de maioridade para o ELSE ?


Algoritmo: Verificar se um número é par

Em nossa vídeo-aula sobre operadores matemáticos em Python, vimos que o operador % nos fornece o resto da divisão de um número inteiro positivo por outro, e da escolinha, sabemos que os números pares deixam resto 0.

Então, já podemos criar um script de um algoritmo que pede um número inteiro ao usuário e diz se ele é par ou ímpar:

num = int( input("Digite um inteiro positivo: ") ) if (num%2 == 0): print("Par") else: print("Ímpar")

Vídeo aula 11 - Como fazer comparações em Python

Nesta vídeo aula do Curso Python Progressivo, vamos aprender quais são e como usar os operadores de comparação, essenciais para os testes condicionais com IF e ELSE:

  • > maior que
  • < menor
  • >= maior ou igual a 
  • <= menor ou igual a
  • == igualdade
  • != diferença


Gráfico de Densidade em Python - Mapas de Calor (Heat Maps Graphics)

Neste tutorial de nosso curso Python Científico , vamos aprender o que é um gráfico de densidade (density plot), para que serve, quando usar, como funciona e como criar em Python.


Como plotar heat maps em Python


O que é um gráfico de densidade

No tutorial passado, sobre gráficos de dispersão (scatter plots), mostramo seguinte gráfico:

Programação científica em Python

Note que diversos pontos estão um por cima do outro. Muitas vezes é interessante saber quantos pontos desses estão sobrepostos, afinal devem ter regiões onde há maior sobreposição que outras.

Então essas regiões com mais pontos, são mais frequentes e certamente pode ser útil saber disso. Mas como ver isso? Numericamente é possível, mas obviamente é bem trabalhoso, pois estamos lidando com milhares e milhares de dados.

Uma possibilidade é através dos gráficos de densidade. Imagine que os pontos que ocorrem pouco tenham essa cor azulada, porém a medida que vamos sobrepondo um ponto acima do outro, este ponto vai mudando de cor, ficando mais vermelho, por exemplo.

Ou seja, um vermelho bem fraco sinalizaria uma poucas sobreposições, porém um vermelho bem forte nos diria que ali ocorreu uma grande sobreposição de pontos.

Então, através dessa densidade de cores e brilhos, podemos saber que região é ou menos densa. Assim, podemos analisar a distribuição de dados através de um gráfico.


Quando usar um gráfico de densidade

Nós já estudamos um tipo de visualização que é, de certo modo, semelhante aos density plots, que são os gráficos de histograma. Porém, o gráfico de densidade é algo contínuo, diferente do histograma que é algo discretizado (com valores fixos, nas barras).

Talvez você já tenha ouvido falar na expressão 'mapa de calor' (heat maps), onde as coisas menos densas (como temperatura) estão em azul e vão migrando até o vermelho mais 'quente' (regiões mais densas de dados). São gráficos de densidade.

Como plotar heat maps em Python

Quando queremos plotar dados mais contínuos (ao invés dos pontos do scatter, linhas do plot() ou barras de histograma), devemos optar pelos gráficos de densidade para melhor representar e entender as informações que temos que analisar.


Como plotar um gráfico de densidade em Python

Vamos usar os dados do arquivo de texto abaixo (aproveite e nos siga no GitHub):

https://github.com/jarlissonmoreira/PythonProgressivo/blob/main/Grafico-Densidade-Density-Plot-in-Python/densidade.txt

Para carregar esse txt em nosso código Python, usamos a função loadtxt da NumPy. E para interpretar esses dados,vamos usar a função imshow() do Pyplot da Matplotlib. Salve o arquivo de texto acima como densidade.txt e deixe na mesma pasta do script:

import matplotlib.pyplot as plt import numpy as np dados = np.loadtxt("densidade.txt",float) plt.imshow(dados) plt.show()

O resultado será essa bela imagem:

Density plot graphic in Python
A função loadtxt() colocous as informações do arquivo de texto em uma matriz 500 x 500, e passou para a imshow() plotar o gráfico de densidade.

Note que os eixos são diferentes do cartesiano que estamos habituados a ver desde a época da escola. Aqui, o eixo y cresce de cima para baixo. Ou seja, a origem está acima e na esquerda. Esse é um padrão na computação, de um modo geral.

Podemos mudar isso adicionando o argumento origin="lower" na função imshow():

import matplotlib.pyplot as plt import numpy as np dados = np.loadtxt("densidade.txt",float) plt.imshow(dados, origin="lower") plt.show()

E o resultado:

Eixos cartesianos em programação Python

Se quiser usar um mapa de densidade do tipo mapa de calor, chame a função jet() do Matplotlib.Pyplot ou passe o argumento cmap='jet' na função imshow():

import matplotlib.pyplot as plt import numpy as np dados = np.loadtxt("densidade.txt",float) plt.imshow(dados, origin="lower") plt.jet() plt.show()


Como plotar heat maps em Python


É muito comum, principalmente em trabalhos acadêmicos, como em revistas, artigos, teses etc, você usar apenas gráficos em preto e branco. Nesse caso, devemos usar a escola de cor gray():

import matplotlib.pyplot as plt import numpy as np dados = np.loadtxt("densidade.txt",float) plt.imshow(dados, origin="lower") plt.gray() plt.show()

Como plotar heat maps em escala gray no Python

Veja alguns tipos de mapas de cores (colormaps) disponível no Python, através do módulo Pyplot da biblioteca Matplotlib:

Escalas de cor de colormaps do Python

Veja a documentação para saber de todas as possibilidades:

https://matplotlib.org/stable/users/explain/colors/colormaps.html

Gráficos de dispersão: scatter() plots em Python

 No tutorial passado, de nosso curso de programação científica em Python, demos início ao estudo da criação, geração e exibição de gráficos em Python, através da função plot(), da biblioteca Matplotlib e do módulo Pyplot.

Agora, vamos aprender sobre os gráficos de dispersão, o que são, para que serve, quando e como usá-los de maneira de correta em seus artigos, trabalhos e pesquisa.

Gráfico de Dispersão em Python: o que é e para que serve um gráfico de scatter

Nos gráficos anteriores, de linhas, através da função plot(), mostramos a relação do eixo y (vertical) em relação aos valores do eixo x (horizontal), ou seja, uma função, pois os valores de um eixo são dependentes dos valores do outro eixo.

Porém, nem sempre os valores dependem um do outro e precisamos analisar esses dados separadamente, para ver se ambos seguem algum padrão ou tendência.

Nesse tipo de dados, vamos plotar uma coleção de dados, geralmente um conjunto de pares ordenados, e cada par é representado simplesmente por um ponto. Veja, nos tutoriais anteriores também calculamos pontos através das funções, mas ligamos esses pontos com retas, o que gerou curvas aparentemente contínuas. Nos gráficos do tipo scatter, teremos uma dispersão de pontos:

Scatter plot em 2D no Python
Gráfico de dispersão 2D com dados da demora entre erupções de um vulcão e da duração dessas erupções. Note que os pontos se acumularam no início e no fim, ou seja, notamos um padrão

Como plotar gráficos de dispersão 3D em Python
Gráfico em 3D mostrando a energia de moléculas de um gás, em função da temperatura

Função scatter(): como plotar gráfico de dispersão em Python

Vamos usar a função scatter(), do módulo Pyplot da biblioteca Matplotlib, para gerar os gráficos de dispersão. Seu uso é bem semelhante ao da plot() onde, basicamente, devemos fornecer duas coleções de valores, primeiro o do eixo x e depois o do eixo y.

Por exemplo, será que existe uma relação entre a temperatura de uma estrela e seu brilho emitido? Baixe o arquivo 'estrelas.txt' de nosso GitHub:
https://github.com/jarlissonmoreira/PythonProgressivo/blob/main/Grafico-Scatter-Dispersao/estrelas.txt

Nele, há informações de quase 8 mil estrelas, com as informações da temperatura na primeira coluna e do brilho na segunda.

O código para a criação do gráfico de dispersão é:

import matplotlib.pyplot as plt import numpy as np dados = np.loadtxt("estrelas.txt", float) x = dados[:, 0] y = dados[:, 1] plt.xlim(0, 14000) plt.ylim(-3, 20) plt.xlabel("Temperatura") plt.ylabel("Brilho") plt.scatter(x,y, s=10) plt.show()

E o gráfico:
Como plotar um gráfico de dispersão


O valor s=10 é pra definir o tamanho do ponto (dot). Experimente usar o valor 5 e veja como ele diminui, ou não coloque esse argumento e veja o tamanho padrão.

Gráficos em Python - Como ler arquivos, Definir tamanho dos eixos, Rótulos (labels), Cores, Tipos de linha e Legendas

 Neste tutorial de nosso curso de Programação Científica em Python, vamos continuar aprendendo como gerar gráficos em Python usando o módulo Pyplot da biblioteca Matplotlib, ferramentas nativas, gratuitas, flexíveis e extremamente poderosas da linguagem Python.

No tutorial anterior, aprendemos como plotar gráficos simples em Python, usando a função plot(). Agora, vamos aprender mais algumas técnicas e possibilidades, para incrementar nossas figuras.


Como gerar gráficos a partir de arquivos: loadtxt()

Nos exemplos do tutorial anterior, usamos apenas alguns poucos dados, mas o comum em Ciência de Dados é usar centenas, milhares e até milhões de informações, tanto para gerar gráficos como para encontrar padrões.

No exemplo a seguir, vamos usar a função loadtxt(), do NumPy, ideal para ler dados de arquivos txt de uma maneira bem simples. Basicamente, essa função recebe uma string com o endereço do arquivo de texto e o tipo de dado que queremos usar para gerar o array.

Baixe esse arquivo itub.txt e salve na mesma pasta do seu script em Python:
https://github.com/jarlissonmoreira/PythonProgressivo

Esse arquivo tem 250 colunas e duas colunas, representando os últimos 250 preços de fechamento da ação do Itaú (ITUB3), na bolsa de valores, que é minha ação favorita para receber dividendos.

Nosso código fica assim:

import matplotlib.pyplot as plt import numpy as np dados = np.loadtxt("itub.txt", float) x = dados[:, 0] y = dados[:, 1] plt.plot(x,y)

A função loadtxt() colocou esses dados em uma matriz 250 x 2.
Usamos nosso conhecimento de slicing de arrays para pegar a coluna 1 da matriz e usar como eixo x, e a coluna 2 como eixo y, para enfim usar a função plot() para gerar o gráfico de cotações:

Como gerar gráfico de cotações em Python

Definindo os limites dos eixos X e Y: xlim() e ylim()

Veja que, em todos nossos gráficos, o Python automaticamente definiu a faixa de valores que é exibida nos eixos X e Y, de maneira automática.

Porém, como tudo na programação, isso é ajustável. E para tal, vamos usar as funções xlim() e ylim(), do módulo Pyplot.

Vamos gerar um gráfico da função 2*cosseno, no intervalo de 0 até 2pi, e deixar o Pyplot setar automaticamente os valores dos eixos:

import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2*np.pi, 1000) y = 2 * np.cos(x) plt.plot(x,y)

Como plotar gráficos em Python

Agora vamos definir o eixo x de 0 até 4pi e o eixo y de -2.5 até 2.5, veja como fica o código:

import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2*np.pi, 1000) y = 2 * np.cos(x) plt.xlim(0, 4*np.pi) plt.ylim(-2.5, 2.5) plt.plot(x,y)

E o gráfico, como ficou mais 'de longe', pois os eixos agora são maiores:

xlim() e ylim() em gráficos Python

Ou seja, basta fornecer o intervalo de valores nas funções xlim() e ylim()


Rótulos (labels) dos eixos: xlabel() e ylabel()

Se você olhar bem, todos os gráficos em livros, artigos científicos e até na internet, possuem descrições sobre o que representa cada eixo.

São os rótulos, ou labels, e basta usarmos as funções xlabel() e ylabel() do Pyplot, fornecendo a string que você quer que seja exibida nos respectivos eixos.

Veja como fica nosso código do gráfico do cosseno:

import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2*np.pi, 1000) y = 2 * np.cos(x) plt.xlim(0, 4*np.pi) plt.ylim(-2.5, 2.5) plt.xlabel("Ângulo x, em radianos") plt.ylabel("2*cos(x)") plt.plot(x,y) plt.show()

Nosso gráfico ficou:

Labels xlabel() e ylabel() em gráficos do Matplotlib

É sempre interessante você colocar o que é cada eixo, bem como as respectivas unidades que foi utilizado.


Plotando dois gráficos numa mesma imagem

Também é comum plotarmos duas ou mais funções em um mesmo gráfico, algo que é particularmente útil principalmente para compararmos valores, funções e padrões.

Por exemplo, no código abaixo, vamos plotar as funções seno e cosseno, com valores de x indo de 0 até 10pi:

import matplotlib.pyplot as plt import numpy as np x1 = np.linspace(0, 10*np.pi, 1000) x2 = np.linspace(0, 10*np.pi, 1000) y1 = np.cos(x1) y2 = np.sin(x2) plt.xlim(0, 10*np.pi) plt.ylim(-1.5, 1.5) plt.xlabel("Ângulo x, em radianos") plt.ylabel("cos(x) (azul) e sen(x) (em laranja)") plt.plot(x1,y1) plt.plot(x2,y2) plt.show()

Vejamos o resultado:

Como plotar várias coisas no mesmo gráfico em Python

Note que o Pyplot colocou, automaticamente, cada gráfico de uma função com uma cor diferente.

Como alterar Cores e Tipos de linhas dos gráficos

No exemplo anterior, vimos que os gráficos ficaram com as cores azul e laranja. Isso também pode ser alterado conforme seu gosto.

Se desejar que seu gráfico seja vermelho, fornece um argumento adicional na função plot(), com as string 'red' ou 'r': plot(x, y, 'r')

Se desejar que a linha seja pontilhada, ao invés de contínua, forneça a string '--':
plot(x, y, '--')

E se quiser que ela seja vermelha e pontilhada? Simples, use: 'r--'
Veja:

import matplotlib.pyplot as plt import numpy as np x = np.linspace(-2*np.pi, 2*np.pi, 1000) y = np.tan(x) plt.ylim(-2, 2) plt.xlabel("x, em rad") plt.ylabel("$tg(x)$") plt.grid() plt.plot(x,y, 'r--') plt.show()

Veja como ficou o gráfico:

Alterar cor e formato da linha no Matplotlib

Note que usamos a função grid() do Pyplot, para exibir as 'grades' (quadriculado).
As cores principais podem ser:

  • b : blue
  • g : green
  • r : red
  • c : cyan
  • m : magenta
  • y : yellow
  • k : black
  • w : white
Já os estilos de linha são:
linestyle solid dotted dashed dashdot


Você pode fornecer esses argumento da seguinte maneira: color = 'green', linestyle='dotted'
Veja como ficou o código e gráfico:

import matplotlib.pyplot as plt import numpy as np x = np.linspace(-2*np.pi, 2*np.pi, 1000) y = np.tan(x) plt.ylim(-2, 2) plt.xlabel("x, em rad") plt.ylabel("$tg(x)$") plt.grid() plt.plot(x,y, color='green', linestyle='dotted') plt.show()

Como plotar gráficos com o Pyplot

Outras possibilidades são alterar o tamanho das fontes, espessura das linhas, marcadores e estilos etc, veja:

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html


Legendas dos gráficos: legend()

Muitas vezes é interessante fornecer informações sobre os gráficos não apenas nos eixos (labels), mas diretamente dentro do plot.

É especialmente útil quando plotamos várias funções em um imagem só. Para especificar cada gráfico do plot, colocamos o argumento label dentro de cada plot(), com a string que queremos exibir. Depois, chamamos a função legend() do pyplot:

import matplotlib.pyplot as plt import numpy as np x1 = np.linspace(0, 10, 11) x2 = np.linspace(0, 5, 11) y1 = x1 y2 = x2**2 plt.plot(x1,y1, label='Função linear y=x') plt.plot(x2,y2, label='Função quadrática y=x²') plt.legend() plt.show()

Veja o resultado:

Como inserir legendas em Python

Você pode inclusive definir onde quer que essas legendas apareçam. Por exemplo, para aparecer embaixo (lower) e no centro (center), basta colocar essas informações no argumento 'loc' da função legend():

import matplotlib.pyplot as plt import numpy as np x1 = np.linspace(0, 10, 11) x2 = np.linspace(0, 5, 11) y1 = x1 y2 = x2**2 plt.plot(x1,y1) plt.plot(x2,y2) plt.legend(['Função linear y=x', 'Função quadrática y=x²'], loc='lower center') plt.show()

Veja não usamos os argumentos label dentro das funções plot(). Ao invés disso, passamos uma lista com as strings, uma para cada plot, diretamente na função legend, e em seguida usamos o loc para dar a localização desejada da legenda.

Para ver mais variações e possibilidades, acesse:

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html


Exercício de programação científica

Mostramos exemplos de gráficos seno, cosseno e tangente. Porém, o NumPy não tem, nativamente, as funções secante, cossecante e cotagente. Ou seja, você vai ter que implementar elas. Lembra das aulas de trigonometria?

Gere um gráfico, com intervalo de -2pi até +2pi, plotando essas três funções, com as cores vermelhas, verde e azul, respectivamente.