1. M A R C E L O R O D R I G U E S
F U N C E M E – J U N H O 2 0 1 6
INTRODUÇÃO A LÓGICA
DE PROGRAMAÇÃO
2. LÓGICA DE PROGRAMAÇÃO?
• PROGRAMA → PROBLEMA
• PROBLEMA
• ANÁLISE
• ALGORITMO
• PROGRAMA
Lógica de Programação é a técnica de desenvolver sequências
lógicas para atingir um determinado objetivo. Essas sequências
lógicas são adaptadas para linguagem de computador pelo
programador a fim de produzir software. Uma sequência lógica
é denominada algoritmo.
3. ALGORITMO - PASSO A PASSO
① DEFINIR O PROBLEMA
② ANÁLISE:
① Entrada
② Saída
③ Objetivos
③ ALGORITMO:
① Sequência de Instruções
④ INSTRUÇÕES:
① Sequência de comandos
② Seleção condicional
③ Iteração
⑤ LINGUAGEM DE PROGRAMAÇÃO:
① PYTHON, C++, JAVA, etc.
4. POR QUÊ PYTHON?
• Python é uma linguagem livre;
• Python é multiplataforma;
• Python tem uma biblioteca padrão imensa;
• Pequena curva de aprendizado;
• Simplicidade;
5. EXEMPLO ALGORITMO
NOME DO ALGORITMO: SOMA
INICIO
LER VALOR1
LER VALOR2
SOMA ← VALOR1 + VALOR2
ESCREVER SOMA
FIM
Arquivo: soma.py
val1 = float(raw_input(‘digite um numero: ’))
val2 = float(raw_input(‘digite um numero: ’))
soma = val1 + val2
print soma
6. VARIÁVEIS
• São nomes dados a áreas de memória
• Nomes podem ser compostos de algarismos, letras ou _;
• O primeiro caractere não pode ser um algarismo;
• Palavras reservadas (if, while, etc) são proibidas;
• Servem para:
• Guardar valores intermediários;
• Construir estruturas de dados;
• Uma variável é modificada usando o comando de atribuição:
• var = expressão
8. LÓGICA PROPOSICIONAL
Sistema lógico que busca formalizar a noção de proposição, e
de como um conjunto de proposições pode ser criado pela
combinação de proposições de forma a gerar um resultado
consistente que possa ser aplicado para determinar se este
conjunto é verdadeiro ou falso. É essencial aprender os
conceitos básicos da Lógica Proposicional, pois é baseado
nesta lógica que as instruções das linguagens de programação
são construídas.
Proposição é uma afirmação qualquer que fazemos, que pode
assumir o valor de Verdadeiro (V) ou Falso (F). Por exemplo:
"Hoje está chovendo."
"O Sol é amarelo."
"Você está doente."
10. TABELA VERDADE
Tabela verdade é um tipo de tabela matemática usada em
lógica para determinar se uma fórmula é válida.
P=“ESTAMOS EM 2014”
NEGAÇÃO (NOT)
P NOT(P)
V F
F V
11. TABELA VERDADE
P=“HOJE É SEGUNDA”
Q=“ESTÁ CHOVENDO”
CONJUNÇÃO (AND)
P Q P AND Q
V V V
V F F
F V F
F F F
12. TABELA VERDADE
P=“HOJE É SEGUNDA”
Q=“ESTÁ CHOVENDO”
DISJUNÇÃO (OR)
P Q P AND Q
V V V
V F V
F V V
F F F
15. ORDEM DOS OPERADORES
ARITMÉTICOS
• P: Parênteses têm a mais alta precedência e podem ser
usados para forçar uma expressão a ser avaliada na ordem
que você quiser. Já que expressões entre parênteses são
avaliadas primeiro, 2 * (3-1) é 4, e (1+1)**(5-2) é 8. Você
também pode usar parênteses para tornar uma expressão
mais fácil de ler, como em (minuto * 100) / 60, ainda que isso
não altere o resultado.
• E: Exponenciação ou potenciação tem a próxima precedência
mais alta, assim 2**1+1 é 3 e não 4, e 3*1**3 é 3 e não 27.
• MDAS: Multiplicação e Divisão têm a mesma precedência,
que é mais alta do que a da Adição e da Subtração, que
também têm a mesma precedência. Assim 2*3-1 dá 5 em vez
de 4, e 2/3-1 é -1, não 1 (lembre-se de que na divisão inteira,
2/3=0).
18. ESTRUTURAS DE CONTROLES
• Para poder escrever programas úteis, quase sempre
precisamos da habilidade de checar condições e mudar o
comportamento do programa de acordo com elas. As
instruções condicionais nos dão essa habilidade. A forma
mais simples é a instrução SE (IF):
if x > 0:
print "x é positivo”
• A expressão booleana depois da instrução if é chamada de
condição. Se ela é verdadeira (true), então a instrução
identada é executada. Se não, nada acontece.
19. ESTRUTURAS DE CONTROLES
• Um segundo formato da instrução if é a execução
alternativa, na qual existem duas possibilidades e a condição
determina qual delas será executada.
if x % 2 == 0:
print x, “par”
else:
print x, “impar”
• Se o resto da divisão de x por 2 for 0, então sabemos que x é
par, e o programa exibe a mensagem para esta condição. Se
a condição é falsa, o segundo grupo de instruções é
executado. Desde que a condição deva ser verdadeira (True)
ou falsa (False), precisamente uma das alternativas vai ser
executada.
20. ESTRUTURAS DE CONTROLES
• Às vezes existem mais de duas possibilidades e
precisamos de mais que dois ramos. Uma condicional
encadeada é uma maneira de expressar uma operação
dessas:
if x < y:
print x, "é menor que", y
elif x > y:
print x, "é maior que", y
else:
print x, "e", y, "são iguais”
21. ESTRUTURAS DE CONTROLES
• elif é uma abreviação de “else if” (“senão se”). De novo,
precisamente um ramo será executado. Não existe limite para
o número de instruções elif, mas se existir uma instrução
else ela tem que vir por último:
if escolha == ’A’:
funcaoA()
elif escolha == ’B’:
funcaoB()
elif escolha == ’C’:
funcaoC()
else:
print "Escolha inválida.”
22. ESTRUTURAS DE CONTROLES
• Um condicional também pode ser aninhado dentro de outra.
Poderíamos ter escrito o exemplo tricotômico (dividido em três)
como segue:
if x == y:
print x, "e", y, "são iguais”
else:
if x < y:
print x, "é menor que", y
else:
print x, "é maior que", y
• O condicional mais externo tem dois ramos. O primeiro ramo
contém uma única instrução de saída. O segundo ramo contém
outra instrução if, que por sua vez tem dois ramos. Os dois ramos
são ambos instruções de saída, embora pudessem conter
instruções condicionais também.
23. ESTRUTURAS DE REPETIÇÃO (WHILE)
• O loop while tem como função repetir determinado bloco de
comando, até que uma determinada condição seja verdadeira. Para
que o bloco seja executado no momento correto, devemos manter
uma rígida endentação, ou seja, tudo que pertencer ao bloco do
while, deve estar quatro espaços a frente, isto ajuda a deixar o
código legível e organizado.
• O while é um comando muito útil, mas pode ser perigoso, pois se
não tratarmos corretamente o critério de parada, o laço pode não ter
fim, e o programa não faz o que deveria.
x = 100
while x > 0:
print x, “x > 0”
x = x – 1
24. ESTRUTURAS DE REPETIÇÃO (WHILE)
• Aqui temos um laço que seria executado eternamente (while
True:). Porém, dentro dele, fazemos uma verificação, e quando a
variável i estiver guardando um valor maior que 100, será
executado o comando break.
• O comando break literalmente quebra o laço, então, naquele
instante, o programa sai do laço.
i = 0
while True:
print “Não vou parar nunca!”
i = i + 1
if i > 100:
break
• Assim, juntamente ao comando while, vimos agora o comando
break que pode ser muito útil para quebrar laços fora da
comparação padrão.
25. ESTRUTURAS DE REPETIÇÃO (WHILE)
• No exemplo abaixo, inicialmente i recebe o valor 0, e é comparado com 100.
Como 0 é menor que 100, o laço começa. Logo em seguida, temos uma
comparação: if 1 % 2 == 0:, aqui verificamos se i é par. Caso i seja múltiplo de
dois, há um comando continue. continue faz com que esta iteração do laço
termine e o programa passe para a próxima iteração.
• Desta forma, o programa ignora tudo o que está após o if. No caso de i não ser
par, o programa não executa o continue, e imprime o valor de i na tela.
• Se um continue estivesse fora do if, sempre o programa executaria este
continue, e nunca seria executado o que há após ele. Assim, o continue
controla a execução do laço sem quebrá-lo.
i=0
while i < 100:
if i % 2 == 0:
i = i + 1
continue
print i
i = i + 1
26. ESTRUTURAS DE REPETIÇÃO (FOR)
• O comando for, em Python, difere do que normalmente
se vê em outras linguagens de programação, onde esse
comando tem a finalidade de realizar uma iteração
baseada numa progressão aritmética, percorrendo os
números definido pelo usuário, enquanto em Python a
iteração é feita percorrendo os itens de uma sequência,
seja ela uma lista ou até mesmo uma string. Vamos
analisar o código abaixo:
for i in range(10):
print i
27. ESTRUTURAS DE REPETIÇÃO (FOR)
• A estrutura anterior utiliza uma variável criada, no caso i, para
percorrer cada elemento da lista criada com o comando
range(10), com isso, cada repetição feita pelo loop for fará
com que a variável i aponte para um diferente valor dentro da
lista formada pela função range e logo em seguida imprima
esse valor.
• Nota: Quando fazemos range(10), teremos uma lista de
inteiros de 0 a 9.
• A função for também pode ser aplicada com o uso de listas,
observemos o caso abaixo:
lista = ['vida', 42, 'o universo', 6, 'e', 7, 'tudo’]
for item in lista:
print “O item atual é:”, item
29. FUNÇÃO
• Imagina que temos a seguinte situação num programa
qualquer:
Instrução1
Bloco1
Instrução2
Bloco1
30. FUNÇÃO
• Uma função normalmente contém instruções para
realizar uma operação específica e devolver o resultado.
• Os parâmetros de entrada são os valores que são
passados para serem processados pela função.
• A função usa os valores de entrada para determinar os
resultados das suas instruções.
• Uma função pode ter vários valores de entrada, assim
como pode não ter nenhum.
• Quando a função contém mais de um parâmetro, eles
são separados por vírgulas.
31. FUNÇÃO
• O valor de retorno de uma função é o valor que a função
irá devolver.
• Assim como parâmetros, a função pode não ter nenhum
valor de retorno ou ter vários.
• Quando há mais de um valor de retorno, a função
devolve uma lista de valores de retorno.
• Ter vários valores de retorno é algo meio exclusivo de
Python.
33. FUNÇÃO
• Diferentemente de outras linguagens como o caso do
Pascal, as funções em Python podem ser declaradas
em qualquer parte do programa, mas só podem ser
usadas depois de declaradas.
• Isto quer dizer que qualquer referência a uma função
antes da linha de declaração da mesma resultará num
erro.
35. MÓDULOS
• Módulos são programas feitos para serem
reaproveitados em outros programas.
• Eles tipicamente contêm funções, variáveis, classes e
objetos que provêm alguma funcionalidade comum.
• Por exemplo, o módulo math contém funções
matemáticas como sin, exp, etc, além da constante pi.
36. MÓDULOS
• Qualquer programa que você escreva e salve num
arquivo pode ser importado como um módulo;
• Por exemplo, se você salva um programa com o nome
prog.py, ele pode ser importado usando o comando:
import prog
• Entretanto, a “importação” só ocorre uma vez;
• Python assume que variáveis e funções não são
mudados e que o código do módulo serve meramente
para inicializar esses elementos
37. MÓDULOS
• Após a importação de um módulo, este é compilado,
gerando um arquivo .pyc correspondente;
• No exemplo, um arquivo prog.pyc será criado;
• Python só recompila um programa se o arquivo .py for
mais recente que o arquivo .pyc;
39. LEITURA E ESCRITA DE ARQUIVOS
• Python proporciona funções (veremos mais à frente o
que é isso) que permitem solicitar ao sistema operativo
acesso ao disco a fim de ler ou gravar algum conjunto
de dados.
• De forma genérica as operações que podemos realizar
sobre os arquivos no disco são: Abertura, Leitura,
Escritura e Fechamento.
40. ABRINDO ARQUIVOS
• O formato básico para abertura de arquivos é:
arq = open('nome_arq', 'modo’)
• O primeiro argumento da função open é uma string que
contem o nome do arquivo ('nome_arq') com o qual vamos
trabalhar.
• O segundo argumento é outra string que é o modo com que
desejamos tratar o arquivo:
• "r" modo de leitura: abre o arquivo só para ser lido.
• "w" modo de escrita: cria um novo arquivo. Se já existe, apaga seu
conteúdo.
• "a" modo de continuação: abre (se existe) ou cria (caso não exista)
o arquivo a fim de poder escrever no final dele.
41. ABRINDO ARQUIVOS
Para ler uma linha do arquivo utilizamos o método
readline.
# -*- coding: utf-8 -*- #
arq = open(‘file.txt’, ‘r’)
linha = arq.readline()
print linha
linha = arq.readline(5)
print linha
arq.close()
42. ESCREVENDO ARQUIVOS
O Python permite escrever usando a função write():
# -*- coding: utf-8 -*- #
arq = open(‘texto.txt’, ‘w’)
arq.write(‘ola n‘)
arq.write(‘mundo!n’)
arq.close()
44. NUMPY – SALVANDO ARQUIVOS
# -*- coding: utf-8 -*- #
import numpy as np.
x = np.arange(0.0, 5.0, 1.0)
np.savetxt('test1.txt', x)
np.savetxt('test2.txt', x, fmt='%1.2f')
45. ABRINDO ARQUIVOS NETCDF
# -*- coding: utf-8 -*- #
from netCDF4 import Dataset
data = Dataset(‘file.nc’, ‘r’)
pcp = data.variables[‘pcp’][:]
lat = data.variables[‘latitude’][:]
lon = data.variables[‘longitude’][:]
data.close()
print pcp.shape
print lat
print lon
46. GRÁFICOS EM PYTHON
• matplotlib (http://matplotlib.org/) é uma biblioteca do
Python para criação de gráficos em 2D, bastante
utilizada para visualização de dados e que apresenta
uma série de possibilidades gráficas, como gráficos de
barra, linha, pizza, histogramas, entre muitos outros.
• O matplotlib já está incluso na distribuição Anaconda (e
em praticamente todas as distribuições de Python
focadas em Análise de Dados e programação
científica).
47. GRÁFICOS EM PYTHON
# -*- coding: utf-8 -*- #
import numpy as np
import matplotlib.pyplot as plt
plt.plot([0,10,20,30])
plt.show()
48. GRÁFICOS EM PYTHON
# -*- coding: utf-8 -*- #
import numpy as np
import matplotlib.pyplot as plt
y = [20,50,30]
x = range(len(y))
width_n = 0.4
bar_color = 'yellow'
plt.bar(x, y, width=width_n,
color=bar_color)
plt.show()