SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
IoT – Primeiros passos utilizando
Python com embarcados
Vinicius J. Leódido Correia | Engº Voluntário
Engenheiros Sem Fronteiras – Núcleo Rio de Janeiro
Agenda
 Dia 1:
 Introdução, usos mais comuns, estrutura de dados em Python, leitura e
escrita de arquivos
 Dia 2:
 Iniciando os passos básicos nas placas, GPIOs, as bibliotecas MRAA /
UPM, ligações seriais USB/TTL.
 Dia 3:
 Lendo os dados dos sensores, encaminhando os dados para a nuvem,
entendendo e adaptando os dados no script Python para gravação via
REST, realizando comunicações via MQTT.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 A linguagem foi criada em 1990 por Guido van Rossum, no
Instituto Nacional de Pesquisa para Matemática e Ciência da
Computação da Holanda (CWI) e tinha originalmente foco em
usuários como físicos e engenheiros. O Python foi concebido
a partir de outra linguagem existente na época, chamada
ABC.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 O nome Python foi tirado por Guido van Rossum do programa
da TV britânica Monty Python Flying Circus, e existem várias
referências ao programa na própria documentação da
linguagem, como, por exemplo, o repositório oficial de
pacotes do Python se chamava Cheese Shop, que era o
nome de um dos quadros do programa.
Atualmente, o nome do repositório é Python Package Index11
(PyPI - pypi.python.org).
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Linguagem de Alto Nível
 Sintaxe Clara e Concisa
 Favorece Legibilidade do Cógido Fonte
 Favorece o uso de estruturas de alto nível
 Diversas bibliotecas prontas para uso
 Portabilidade
 Multiparadigma, funcional, orientada a objetos
 Software Open Source (GPL)
 Utilizada também para Scripts e execução de tarefas, como
Perl e Ruby
 Frameworks Python para Web (Django é o mais conhecido)
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Integração com outras Linguagens
 Implementação official pela PSF é escrita em C – Conhecido
como CPython
 Curiosidades:
 Utilizado para renderização de Vídeos e uso em VFX
 LucasFilm’s, Pixar e outras Grandes companhias utilizam motor de
renderização em Python
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 IDE’s: PyCharm (JetBrains)
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Execução de comandos no Python:
 Obs.: Python opera somente com o código identado!
Lembre-se de manter sempre a identação em seu código
(padronizado com 4 espaços “ “).
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Execução em blocos de códigos
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Execução em blocos de códigos
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Tipagem Dinâmica – Duck Typing
 No momento em que uma variável é criada através de atribuição, o
interpretador define um tipo para a variável, com as operações que
podem ser aplicadas.
 Tipagem Forte
 o interpretador verifica se as operações são válidas e não faz coerções
automáticas entre tipos incompatíveis. Para realizar a operação entre
tipos não compatíveis, é necessário converter explicitamente o tipo da
variável ou variáveis antes da operação.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
>>> s = 5
>>> t = “3”
>>> print 'A soma de %d + %s e %d' %(s, t, (s+int(t)))
A soma de 5 + 3 e 8
Dia 1 – Introdução e Características
 Controle de Fluxo
 A partir da Versão 2.5, deu suporte ao Operador ternário:
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
print 'a é menor' if a < b else 'a não é menor‘ #Uso de Operador Ternário
>>> if a < b: #Uso padrão do controle de fluxo
... print 'a é menor‘
... else:
... print 'a não é menor'
Dia 1 – Introdução e Características
 Laços
 Estruturas de repetição para controle e processamento de coleções de
dados.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Laços
 Uso de Laços com FOR
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
#Soma de 0 a 99
s = 0
for x in range(1, 100):
s = s + x
print s
4950
Dia 1 – Introdução e Características
 Laços
 Uso de Laços com WHILE
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
#Soma de 0 a 99
s = 0
x = 1
while x < 100:
s = s + x
x = x + 1
print s
4950
Dia 1 – Introdução e Características
 Tipos de Dados
 Tipos de Dados pré definidos no Python:
 Números (inteiros, reais, complexos, etc…)
 Texto
 Tipos de Dados que atuam como Coleções:
 Lista
 Tupla
 Dicionário
 Tipos de Dados no Python podem ser:
 Mutáveis – Seu conteúdo pode ser alterado
 Imutáveis – Quando seu conteúdo não se altera
Obs.: No Python, nomes de variáveis são referências, que podem ser
alteradas em tempo de execução!
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Tipos de Dados
 Números – Funções Padrões de builtins:
 Inteiro (int): i=1
 Real de Ponto Flutuante (float): f=3.14
 Complexo (complex): c = 3 + 4j
 Inteiro longo (long) – Python faz gerenciamento automático entre int
e long
 Com essas funções, podemos realizer conversões para outros
tipos:
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Conversões Numéricas
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Operações Aritméticas
 Soma (+).
 Diferença (-).
 Multiplicação (*).
 Divisão (/): entre dois inteiros funciona igual à divisão inteira. Em outros
casos, o resultado é real.
 Divisão inteira (//): o resultado é truncado para o inteiro imediatamente
inferior, mesmo quando aplicado em números reais, porém neste caso
o resultado será real também.
 Módulo (%): retorna o resto da divisão.
 Potência (**): pode ser usada para calcular a raiz, através de expoentes
 fracionários (exemplo: 100 ** 0.5).
 Positivo (+).
 Negativo (-)
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Operações Lógicas
 Menor (<).
 Maior (>).
 Menor ou igual (<=).
 Maior ou igual (>=).
 Igual (==).
 Diferente (!=).
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Tipos de Dados
 Texto:
 As strings por si só, já são uma própria função builtin
 Strings são imutáveis. Para alterar seu conteúdo, somente criando
uma nova String ou adicionando um novo conteúdo
 Tipos de Strings
 String padrão: s = ‘palavras ao vento’
 String Unicode: s = u‘São apenas Palavras’
 Também podem ser convertidas com a função unicode()
 A inicialização de Strings podem ser com aspas simples ou duplas
 Em várias linhas, desde que sejam com 3 aspas simples ou duplas
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Operações com Strings
# -*- coding: latin1 -*-
s = 'Camel‘
# Concatenação
print 'The ' + s + ' run away!‘
# Interpolação
print 'tamanho de %s => %d' % (s, len(s))
# String tratada como sequência
for ch in s:
print ch
# Strings são objetos
if s.startswith('C'):
print s.upper()
# o que acontecerá?
print 3 * s
# 3 * s é consistente com s + s + s
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Interpolação de Strings
 Operador “%” é usado para fazer interpolação de strings. A interpolação
é mais eficiente no uso de memória do que a concatenação
convencional.
 Símbolos usados na interpolação:
 %s: string.
 %d: inteiro.
 %o: octal.
 %x: hexacimal.
 %f: real.
 %e: real exponencial.
 %%: sinal de percentagem.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 “Fatiando” Strings – Trabalhando com Slices
 Fatias de Strings podem ser obtidas, simplesmente colocando índices
entre colchetes após a string.
 Índices podem ser definidos como: [inicio:fim + 1:intervalo]
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Listas
 Listas são coleções heterogêneas de objetos, que podem ser de
qualquer tipo, inclusive outras listas.
 As listas são mutáveis e podem ser “fatiadas” como as Strings
# -*- coding: latin1 -*-
# Uma nova lista: Brit Progs dos anos 70
progs = ['Yes', 'Genesis', 'Pink Floyd', 'ELP']
# Varrendo a lista inteira
for prog in progs:
print prog
# Trocando o último elemento
progs[-1] = 'King Crimson‘
# Incluindo
progs.append('Camel')
# Removendo
progs.remove('Pink Floyd')
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Listas
# Ordena a lista
progs.sort()
# Inverte a lista
progs.reverse()
# Imprime numerado
for i, prog in enumerate(progs):
print i + 1, '=>', prog
# Imprime do segundo item em diante
print progs[1:]
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Listas
 Lista possui método pop(), como opção para uso de filas e pilhas:
# -*- coding: latin1 -*-
lista = ['A', 'B', 'C']
print 'lista:', lista
# A lista vazia é avaliada como falsa
while lista:
# Em filas, o primeiro item é o primeiro a sair
# pop(0) remove e retorna o primeiro item
print 'Saiu', lista.pop(0), ', faltam', len(lista)
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Listas
# Mais itens na lista
lista += ['D', 'E', 'F']
print 'lista:', lista
while lista:
# Em pilhas, o primeiro item é o último a sair
# pop() remove e retorna o último item
print 'Saiu', lista.pop(), ', faltam', len(lista)
 Possuem operações de ordenação (sort) e inversão (reverse)
que são realizadas na própria lista, mas seu conteúdo não é
alterado nessas operações.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Tuplas
 São bastante similar as listas, porém, são imutáveis. Não se pode
acrescentar, apagar ou fazer atribuições aos itens
 Tupla: t = (a, b, c, d, …, n-1)
 Tupla com 1 elemento: t = (1,)
 Tupla vazia: t = ()
 Elementos podem ser referenciados como na lista:
elemento1 = t[0]
 Listas podem ser convertidas em Tuplas e vice-versa:
tupla = tuple(lista) #Conversão para Tupla
lista = list(tupla) #Conversão para Lista
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Tuplas
 Embora a tupla possa conter elementos mutáveis, esses elementos não
podem sofrer atribuição, pois modificaria a referência ao objeto.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
>>> t = ([1,2],4)
>>> t[0].append(3)
>>> t
([1,2,3],4)
>>>> t[0] = [1,2,3]
Traceback (most recent call last):
File "<input>", line 1, in ?
TypeError: object does not support item assignment
>>>
Dia 1 – Introdução e Características
 Tuplas
 As tuplas são mais eficientes do que as listas convencionais, pois
consomem menos recursos de memória do que as listas, por serem
mais simples.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Outras Funções Seqüenciais de Builtins:
 Set – Seqüência mutável sem repetições
 Frozenset – Seqüência imutável sem repetições
 Implementam operações de conjuntos, como União, Intersecção, e
diferença.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
# -*- coding: latin1 -*-
# Conjuntos de dados
s1 = set(range(3))
s2 = set(range(10, 7, -1))
s3 = set(range(2, 10, 2))
# Exibe os dados
print 's1:', s1, 'ns2:', s2, 'ns3:', s3
#Saída
s1: set([0, 1, 2])
s2: set([8, 9, 10])
s3: set([8, 2, 4, 6])
Dia 1 – Introdução e Características
 Outras Funções Seqüenciais de Builtins:
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
# União
s1s2 = s1.union(s2)
print 'União de s1 e s2:n', s1s2
# Diferença
print 'Diferença com s3:n', s1s2.difference(s3)
# Interseção
print 'Interseção com s3:n', s1s2.intersection(s3)
# Testa se um set inclui outro
if s1.issuperset([1, 2]):
print 's1 inclui 1 e 2'
# Testa se não existe elementos em comum
if s1.isdisjoint(s2):
print 's1 e s2 não tem elementos em comum'
#Saída
União de s1 e s2:
set([0, 1, 2, 8, 9, 10])
Diferença com s3:
set([0, 1, 10, 9])
Interseção com s3:
set([8, 2])
s1 inclui 1 e 2
s1 e s2 não tem elementos em
comum
Dia 1 – Introdução e Características
 Outras Funções Seqüenciais de Builtins:
 Obs.: Quando uma lista é convertida para set, as repetições são
descartadas.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Dicionários
 Um dicionário é uma lista de associações compostas por uma chave
única e estruturas correspondentes. Dicionários são mutáveis, tais
como as listas.
 A chave precisa ser de um tipo imutável, geralmente são usadas
strings, mas também podem ser tuplas ou tipos numéricos. Já os itens
dos dicionários podem ser tanto mutáveis quanto imutáveis. O
dicionário do Python não fornece garantia de que as chaves estarão
ordenadas.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
dicionario = {'a': a, 'b': b, ..., 'z': z}
Dia 1 – Introdução e Características
 Dicionários
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Dicionários
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
dic = {'nome': 'Shirley Manson', 'banda': 'Garbage'}
#Acessando Elementos
print dic['nome']
#Adicionando Elementos
dic['album'] = 'Version 2.0'
#Apagando um elemento
del dic['album']
#Obtendo itens, chaves e valores
itens = dic.items()
chaves = dic.keys()
valores = dic.values()
#Saída
Shirley Manson
Dia 1 – Introdução e Características
 Dicionários
 Alguns exemplos de operações com Dicionários:
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
# Progs e seus albuns
progs = {'Yes': ['Close To The Edge', 'Fragile'],
'Genesis': ['Foxtrot', 'The Nursery Crime'],
'ELP': ['Brain Salad Surgery']}
# Mais progs
progs['King Crimson'] = ['Red', 'Discipline']
# items() retorna uma lista de
# tuplas com a chave e o valor
for prog, albuns in progs.items():
print prog, '=>', albuns
# Se tiver 'ELP', deleta
if progs.has_key('ELP'):
del progs['ELP']
#Saída
Yes => ['Close To The Edge', 'Fragile']
ELP => ['Brain Salad Surgery']
Genesis => ['Foxtrot', 'The Nursery
Crime']
King Crimson => ['Red', 'Discipline']
Dia 1 – Introdução e Características
 Verdadeiro, Falso e Nulo
 Em Python, o tipo booleano (bool) é uma especialização do tipo inteiro
(int). O verdadeiro é chamado True e é equivalente a 1, enquanto o
falso é chamado False e é equivalente a 0.
 Os seguintes valores são considerados como falso (False):
• False
• None
• 0 (zero)
• ‘’ ou “” – String vazia
• [ ] lista vazia
• ( ) tupla vazia
• { } dicionário vazio
• Outras estruturas com tamanho igual a zero
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Operadores Booleanos
 Possibilidade de construir condições mais complexas para controlar
desvios condicionais e laços
 São os operadores: And, or, not, is, in
• and: retorna verdadeiro se e somente se receber duas expressões
verdadeiras.
• or: retorna false se e somente se receber duas expressões falsas.
• not: retorna falso se receber uma expressão verdadeira e vice-versa
• is: retorna verdadeiro quando duas referências forem idênticas ao mesmo
objeto e falso em caso contrário
• in: retorna verdadeiro se receber um item e uma lista e o item ocorrer uma
ou mais vezes na lista e falso em caso contrário
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Funções
 São blocos de código identificados por um nome, que podem receber
parâmetros pré-determinados
 Podem retornar ou não objetos
 Aceitam Doc Strings
 Parâmetros opcionais. Caso não receba parâmetros em sua chamada, será igual ao
default definido em na função
 Aceitam parâmetros passados com nome, e para este caso, a ordem em que os
parâmetros foram passados não é relevante.
Obs.: Doc Strings são strings que estão associadas a uma estrutura do Python.
Nas funções, as Doc Strings são colocadas dentro do corpo da função, geralmente
no começo. O objetivo das Doc Strings é servir de documentação para aquela
estrutura.
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
def dobro(x):
""“Doc String: Esta função retorna o dobro do número x"""
return x*2
Dia 1 – Introdução e Características
 Funções
 São blocos de código identificados por um nome, que podem receber
parâmetros pré-determinados
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
def func(parametro1, parametro2=padrao):
"""Doc String"""
<bloco de código>
return valor
def fatorial(num):
"""Fatorial implementado de forma
recursiva""“
if num <= 1:
return 1
else:
return(num * fatorial(num – 1))
# Testando fatorial()
print fatorial(5)
# Saída
120
Dia 1 – Introdução e Características
 Funções
 Exemplo Fatorial sem recursão
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
def fatorial(n):
n = n if n > 1 else 1
j = 1
for i in range(1, n):
j = j * i
return j
# Testando
for i in range(1,6):
print i, ‘->’, fatorial(i)
# Saída
1 -> 1
2 -> 2
3 -> 6
4 -> 24
5 -> 120
Dia 1 – Introdução e Características
 Funções
 Método Principal: podemos referenciar o nome de uma função ou
chamá-la como método principal
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
def func1(param1, param2):
return value_func1
def func2(param):
return value_func2
if __name__== “__main__” :
func1(p1, p2)
func2(p)
# Saída
value_func1
value_func2
Dia 1 – Introdução e Características
 Funções
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
def rgb_html(r=0, g=0, b=0):
""“Converte RGB em #RRGGBB"""
return “#%02x%02x%02x“, %(r, g, b)
def html_rgb(color=“#000000"):
""“Converte #RRGGBB em RGB"""
if color.startswitch(‘#’): color = color [1:]
r = int(color[:2], 16)
g = int(color[2:4], 16)
b = int(color[4:], 16)
return r, g, b
if __name__== “__main__” :
print rgb_html(200, 200, 255)
print rgb_html(b=200, g=200, r=255)
print html_rgb('#c8c8ff')
# Saída
#c8c8ff
#ffc8c8
(200, 200, 255)
Dia 1 – Introdução e Características
 Funções
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
def rgb_html(r=0, g=0, b=0):
""“Converte RGB em #RRGGBB"""
return “#%02x%02x%02x“, %(r, g, b)
def html_rgb(color=“#000000"):
""“Converte #RRGGBB em RGB"""
if color.startswitch(‘#’): color = color [1:]
r = int(color[:2], 16)
g = int(color[2:4], 16)
b = int(color[4:], 16)
return r, g, b
if __name__== “__main__” :
print rgb_html(200, 200, 255)
print rgb_html(b=200, g=200, r=255)
print html_rgb('#c8c8ff')
# Saída
#c8c8ff
#ffc8c8
(200, 200, 255)
Dia 1 – Introdução e Características
 Estrutura de Dados
 Abordaremos aqui alguns dos pontos falados anteriormente, citados em
usos com Listas, porém, descreveremos alguns métodos adicionais.
 list.append(x): Adiciona um elemento ao fim da lista.
 list.extend(L): Prolonga a lista, adicionando ao fim da lista atual os
demais elementos da lista L.
 list.insert(i, x): Insere um item em uma posição especificada, onde i =
índice do elemento antes da inserção e x = o valor a ser inserido.
 list.remove(x):Remove o primeiro item encontrado na lista cujo valor é
igual a X
 list.pop([i]): Remove o item na posição dada e o devolve. Se nenhum
índice for especificado, list.pop() remove e devolve o último item na
lista.
 list.index(x): Devolve o índice do primeiro item cujo valor é igual a x,
gerando ValueError se este valor não existe
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
 Estrutura de Dados
 list.count(x): Devolve o número de vezes que o valor x aparece na lista.
 list.sort(): Ordena os itens na própria lista.
 list.reverse(): Inverte a ordem dos elementos na lista (sem gerar uma
nova lista).
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
>>> a = [66.25, 333, 333, 1, 1234.5]
>>> print a.count(333), a.count(66.25), a.count('x')
2 1 0
>>> a.insert(2, -1)
>>> a.append(333)
>>> a [66.25, 333, -1, 333, 1, 1234.5, 333]
>>> a.index(333)
1
>>> a.remove(333)
>>> a
[66.25, -1, 333, 1, 1234.5, 333]
>>> a.reverse()
>>> a
[333, 1234.5, 1, 333, -1, 66.25]
>>> a.sort()
>>> a
[-1, 1, 66.25, 333, 333, 1234.5]
Dia 1 – Introdução e Características
 Estrutura de Dados
 Usando Lista como Pilha (LIFO – Last In, First Out).
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
>>> pilha = [3, 4, 5]
>>> pilha.append(6)
>>> pilha.append(7)
>>> pilha
[3, 4, 5, 6, 7]
>>> pilha.pop()
7
>>> pilha
[3, 4, 5, 6]
>>> pilha.pop()
6
>>> pilha.pop()
5
>>> pilha
[3, 4]
Dia 1 – Introdução e Características
 Estrutura de Dados
 Usando Lista como Fila (FIFO – First In, First Out).
 Devemos fazer o uso da Classe collections.deque
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
>>> from collections import deque
>>> fila = deque(["Eric", "John", "Michael"])
>>> fila.append("Terry") # Terry chega
>>> fila.append("Graham") # Graham chega
>>> fila.popleft() # O primeiro a chegar parte
'Eric'
>>> fila.popleft() # O segundo a chegar parte
'John'
>>> fila # O resto da fila, em ordem de chegada
deque(['Michael', 'Terry', 'Graham'])
Dia 1 – Introdução e Características
 Arquivos e I/O
 Os arquivos no Python são representados por objetos do tipo file Arquivos
podem ser abertos para leitura ('r'), gravação ('w') ou adição ('a'), em modo texto
ou binário('b').
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
import sys
# Criando um objeto do tipo file
temp = open('temp.txt', 'w')
# Escrevendo no arquivo
for i in range(100):
temp.write('%03dn' % i)
# Fechando
temp.close()
temp = open('temp.txt')
# Escrevendo no terminal
for x in temp:
# Escrever em sys.stdout envia
# o texto para a saída padrão
sys.stdout.write(x)
temp.close()
Exemplo de Escrita:
Dia 1 – Introdução e Características
 Arquivos e I/O
 Os arquivos no Python são representados por objetos do tipo file Arquivos
podem ser abertos para leitura ('r'), gravação ('w') ou adição ('a'), em modo texto
ou binário('b').
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
import sys
import os.path
# raw_input() retorna a string digitada
fn = raw_input('Nome do arquivo: ').strip()
if not os.path.exists(fn):
print 'Tente outra vez...'
sys.exit()
# Numerando as linhas
for i, s in enumerate(open(fn)):
print i + 1, s,
# Imprime uma lista contendo linhas do arquivo
print open('temp.txt').readlines()
Exemplo de leitura:
Dia 1 – Introdução e Características
 Sistemas de Arquivos
 Algumas funções para manipular Diretórios de Arquivos (fyle systems):
 Muitas destas funcionalidades estão implementadas no módulo os.path:
 os.path.basename(): retorna o componente final de um caminho
 os.path.dirname(): retorna um caminho sem o componente final
 os.path.exists(): verifica se um caminho existe (True), caso contrário
acusa como inexistente (False).
 os.path.getsize(): retorna o tamanho do arquivo em bytes
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Dia 1 – Introdução e Características
Exercícios!
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
OBRIGADO
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Vinícius J. L. Correia
E-mail: vini.leodido@gmail.com
br.linkedin.com/in/vinileodido
www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
Realização
Organização
Apoio

Mais conteúdo relacionado

Mais procurados

Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 
Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Pythonantonio sérgio nogueira
 
Introdução aos Kits Lego NXT
Introdução aos Kits Lego NXTIntrodução aos Kits Lego NXT
Introdução aos Kits Lego NXTFernando Passold
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alvesGrupython Ufla
 

Mais procurados (6)

Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 
Postgresql +python
Postgresql +pythonPostgresql +python
Postgresql +python
 
Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Python
 
Introdução aos Kits Lego NXT
Introdução aos Kits Lego NXTIntrodução aos Kits Lego NXT
Introdução aos Kits Lego NXT
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Canivete python
Canivete pythonCanivete python
Canivete python
 

Semelhante a IoT Python embarcados

Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamenteRodrigo Amaral
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialFabio Spanhol
 
Tutorial Python ed. #2
Tutorial Python ed. #2Tutorial Python ed. #2
Tutorial Python ed. #2Fabio Spanhol
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Marcelo Barros de Almeida
 
Python_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdfPython_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdfValter moreira
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webAlvaro Oliveira
 
Aula 02 - Análise de Dados - Introdução ao Python.pdf
Aula 02 - Análise de Dados - Introdução ao Python.pdfAula 02 - Análise de Dados - Introdução ao Python.pdf
Aula 02 - Análise de Dados - Introdução ao Python.pdfAcauan Ribeiro
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução PythonGleison Rodrigues
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6 Fabio Spanhol
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cMaicon Rodrigues
 
Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?Marcel Caraciolo
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6Fabio Spanhol
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Python Training #1 - ed5
Python Training #1 - ed5Python Training #1 - ed5
Python Training #1 - ed5Fabio Spanhol
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsHelio Colombe
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem CVê Rodrigues
 

Semelhante a IoT Python embarcados (20)

Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamente
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
 
Tutorial Python ed. #2
Tutorial Python ed. #2Tutorial Python ed. #2
Tutorial Python ed. #2
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)
 
Python_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdfPython_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdf
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
 
Aula 02 - Análise de Dados - Introdução ao Python.pdf
Aula 02 - Análise de Dados - Introdução ao Python.pdfAula 02 - Análise de Dados - Introdução ao Python.pdf
Aula 02 - Análise de Dados - Introdução ao Python.pdf
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução Python
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 
Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Python Training #1 - ed5
Python Training #1 - ed5Python Training #1 - ed5
Python Training #1 - ed5
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Python tutorial-ed3
Python tutorial-ed3Python tutorial-ed3
Python tutorial-ed3
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Mini Curso Python
Mini Curso PythonMini Curso Python
Mini Curso Python
 

IoT Python embarcados

  • 1. IoT – Primeiros passos utilizando Python com embarcados Vinicius J. Leódido Correia | Engº Voluntário Engenheiros Sem Fronteiras – Núcleo Rio de Janeiro
  • 2. Agenda  Dia 1:  Introdução, usos mais comuns, estrutura de dados em Python, leitura e escrita de arquivos  Dia 2:  Iniciando os passos básicos nas placas, GPIOs, as bibliotecas MRAA / UPM, ligações seriais USB/TTL.  Dia 3:  Lendo os dados dos sensores, encaminhando os dados para a nuvem, entendendo e adaptando os dados no script Python para gravação via REST, realizando comunicações via MQTT. www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 3. Dia 1 – Introdução e Características  A linguagem foi criada em 1990 por Guido van Rossum, no Instituto Nacional de Pesquisa para Matemática e Ciência da Computação da Holanda (CWI) e tinha originalmente foco em usuários como físicos e engenheiros. O Python foi concebido a partir de outra linguagem existente na época, chamada ABC. www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 4. Dia 1 – Introdução e Características  O nome Python foi tirado por Guido van Rossum do programa da TV britânica Monty Python Flying Circus, e existem várias referências ao programa na própria documentação da linguagem, como, por exemplo, o repositório oficial de pacotes do Python se chamava Cheese Shop, que era o nome de um dos quadros do programa. Atualmente, o nome do repositório é Python Package Index11 (PyPI - pypi.python.org). www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 5. Dia 1 – Introdução e Características  Linguagem de Alto Nível  Sintaxe Clara e Concisa  Favorece Legibilidade do Cógido Fonte  Favorece o uso de estruturas de alto nível  Diversas bibliotecas prontas para uso  Portabilidade  Multiparadigma, funcional, orientada a objetos  Software Open Source (GPL)  Utilizada também para Scripts e execução de tarefas, como Perl e Ruby  Frameworks Python para Web (Django é o mais conhecido) www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 6. Dia 1 – Introdução e Características  Integração com outras Linguagens  Implementação official pela PSF é escrita em C – Conhecido como CPython  Curiosidades:  Utilizado para renderização de Vídeos e uso em VFX  LucasFilm’s, Pixar e outras Grandes companhias utilizam motor de renderização em Python www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 7. Dia 1 – Introdução e Características  IDE’s: PyCharm (JetBrains) www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 8. Dia 1 – Introdução e Características  Execução de comandos no Python:  Obs.: Python opera somente com o código identado! Lembre-se de manter sempre a identação em seu código (padronizado com 4 espaços “ “). www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 9. Dia 1 – Introdução e Características  Execução em blocos de códigos www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 10. Dia 1 – Introdução e Características  Execução em blocos de códigos www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 11. Dia 1 – Introdução e Características  Tipagem Dinâmica – Duck Typing  No momento em que uma variável é criada através de atribuição, o interpretador define um tipo para a variável, com as operações que podem ser aplicadas.  Tipagem Forte  o interpretador verifica se as operações são válidas e não faz coerções automáticas entre tipos incompatíveis. Para realizar a operação entre tipos não compatíveis, é necessário converter explicitamente o tipo da variável ou variáveis antes da operação. www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br >>> s = 5 >>> t = “3” >>> print 'A soma de %d + %s e %d' %(s, t, (s+int(t))) A soma de 5 + 3 e 8
  • 12. Dia 1 – Introdução e Características  Controle de Fluxo  A partir da Versão 2.5, deu suporte ao Operador ternário: www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br print 'a é menor' if a < b else 'a não é menor‘ #Uso de Operador Ternário >>> if a < b: #Uso padrão do controle de fluxo ... print 'a é menor‘ ... else: ... print 'a não é menor'
  • 13. Dia 1 – Introdução e Características  Laços  Estruturas de repetição para controle e processamento de coleções de dados. www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 14. Dia 1 – Introdução e Características  Laços  Uso de Laços com FOR www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br #Soma de 0 a 99 s = 0 for x in range(1, 100): s = s + x print s 4950
  • 15. Dia 1 – Introdução e Características  Laços  Uso de Laços com WHILE www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br #Soma de 0 a 99 s = 0 x = 1 while x < 100: s = s + x x = x + 1 print s 4950
  • 16. Dia 1 – Introdução e Características  Tipos de Dados  Tipos de Dados pré definidos no Python:  Números (inteiros, reais, complexos, etc…)  Texto  Tipos de Dados que atuam como Coleções:  Lista  Tupla  Dicionário  Tipos de Dados no Python podem ser:  Mutáveis – Seu conteúdo pode ser alterado  Imutáveis – Quando seu conteúdo não se altera Obs.: No Python, nomes de variáveis são referências, que podem ser alteradas em tempo de execução! www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 17. Dia 1 – Introdução e Características  Tipos de Dados  Números – Funções Padrões de builtins:  Inteiro (int): i=1  Real de Ponto Flutuante (float): f=3.14  Complexo (complex): c = 3 + 4j  Inteiro longo (long) – Python faz gerenciamento automático entre int e long  Com essas funções, podemos realizer conversões para outros tipos: www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 18. Dia 1 – Introdução e Características  Conversões Numéricas www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 19. Dia 1 – Introdução e Características  Operações Aritméticas  Soma (+).  Diferença (-).  Multiplicação (*).  Divisão (/): entre dois inteiros funciona igual à divisão inteira. Em outros casos, o resultado é real.  Divisão inteira (//): o resultado é truncado para o inteiro imediatamente inferior, mesmo quando aplicado em números reais, porém neste caso o resultado será real também.  Módulo (%): retorna o resto da divisão.  Potência (**): pode ser usada para calcular a raiz, através de expoentes  fracionários (exemplo: 100 ** 0.5).  Positivo (+).  Negativo (-) www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 20. Dia 1 – Introdução e Características  Operações Lógicas  Menor (<).  Maior (>).  Menor ou igual (<=).  Maior ou igual (>=).  Igual (==).  Diferente (!=). www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 21. Dia 1 – Introdução e Características  Tipos de Dados  Texto:  As strings por si só, já são uma própria função builtin  Strings são imutáveis. Para alterar seu conteúdo, somente criando uma nova String ou adicionando um novo conteúdo  Tipos de Strings  String padrão: s = ‘palavras ao vento’  String Unicode: s = u‘São apenas Palavras’  Também podem ser convertidas com a função unicode()  A inicialização de Strings podem ser com aspas simples ou duplas  Em várias linhas, desde que sejam com 3 aspas simples ou duplas www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 22. Dia 1 – Introdução e Características  Operações com Strings # -*- coding: latin1 -*- s = 'Camel‘ # Concatenação print 'The ' + s + ' run away!‘ # Interpolação print 'tamanho de %s => %d' % (s, len(s)) # String tratada como sequência for ch in s: print ch # Strings são objetos if s.startswith('C'): print s.upper() # o que acontecerá? print 3 * s # 3 * s é consistente com s + s + s www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 23. Dia 1 – Introdução e Características  Interpolação de Strings  Operador “%” é usado para fazer interpolação de strings. A interpolação é mais eficiente no uso de memória do que a concatenação convencional.  Símbolos usados na interpolação:  %s: string.  %d: inteiro.  %o: octal.  %x: hexacimal.  %f: real.  %e: real exponencial.  %%: sinal de percentagem. www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 24. Dia 1 – Introdução e Características  “Fatiando” Strings – Trabalhando com Slices  Fatias de Strings podem ser obtidas, simplesmente colocando índices entre colchetes após a string.  Índices podem ser definidos como: [inicio:fim + 1:intervalo] www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 25. Dia 1 – Introdução e Características  Listas  Listas são coleções heterogêneas de objetos, que podem ser de qualquer tipo, inclusive outras listas.  As listas são mutáveis e podem ser “fatiadas” como as Strings # -*- coding: latin1 -*- # Uma nova lista: Brit Progs dos anos 70 progs = ['Yes', 'Genesis', 'Pink Floyd', 'ELP'] # Varrendo a lista inteira for prog in progs: print prog # Trocando o último elemento progs[-1] = 'King Crimson‘ # Incluindo progs.append('Camel') # Removendo progs.remove('Pink Floyd') www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 26. Dia 1 – Introdução e Características  Listas # Ordena a lista progs.sort() # Inverte a lista progs.reverse() # Imprime numerado for i, prog in enumerate(progs): print i + 1, '=>', prog # Imprime do segundo item em diante print progs[1:] www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 27. Dia 1 – Introdução e Características  Listas  Lista possui método pop(), como opção para uso de filas e pilhas: # -*- coding: latin1 -*- lista = ['A', 'B', 'C'] print 'lista:', lista # A lista vazia é avaliada como falsa while lista: # Em filas, o primeiro item é o primeiro a sair # pop(0) remove e retorna o primeiro item print 'Saiu', lista.pop(0), ', faltam', len(lista) www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 28. Dia 1 – Introdução e Características  Listas # Mais itens na lista lista += ['D', 'E', 'F'] print 'lista:', lista while lista: # Em pilhas, o primeiro item é o último a sair # pop() remove e retorna o último item print 'Saiu', lista.pop(), ', faltam', len(lista)  Possuem operações de ordenação (sort) e inversão (reverse) que são realizadas na própria lista, mas seu conteúdo não é alterado nessas operações. www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 29. Dia 1 – Introdução e Características  Tuplas  São bastante similar as listas, porém, são imutáveis. Não se pode acrescentar, apagar ou fazer atribuições aos itens  Tupla: t = (a, b, c, d, …, n-1)  Tupla com 1 elemento: t = (1,)  Tupla vazia: t = ()  Elementos podem ser referenciados como na lista: elemento1 = t[0]  Listas podem ser convertidas em Tuplas e vice-versa: tupla = tuple(lista) #Conversão para Tupla lista = list(tupla) #Conversão para Lista www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 30. Dia 1 – Introdução e Características  Tuplas  Embora a tupla possa conter elementos mutáveis, esses elementos não podem sofrer atribuição, pois modificaria a referência ao objeto. www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br >>> t = ([1,2],4) >>> t[0].append(3) >>> t ([1,2,3],4) >>>> t[0] = [1,2,3] Traceback (most recent call last): File "<input>", line 1, in ? TypeError: object does not support item assignment >>>
  • 31. Dia 1 – Introdução e Características  Tuplas  As tuplas são mais eficientes do que as listas convencionais, pois consomem menos recursos de memória do que as listas, por serem mais simples. www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 32. Dia 1 – Introdução e Características  Outras Funções Seqüenciais de Builtins:  Set – Seqüência mutável sem repetições  Frozenset – Seqüência imutável sem repetições  Implementam operações de conjuntos, como União, Intersecção, e diferença. www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br # -*- coding: latin1 -*- # Conjuntos de dados s1 = set(range(3)) s2 = set(range(10, 7, -1)) s3 = set(range(2, 10, 2)) # Exibe os dados print 's1:', s1, 'ns2:', s2, 'ns3:', s3 #Saída s1: set([0, 1, 2]) s2: set([8, 9, 10]) s3: set([8, 2, 4, 6])
  • 33. Dia 1 – Introdução e Características  Outras Funções Seqüenciais de Builtins: www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br # União s1s2 = s1.union(s2) print 'União de s1 e s2:n', s1s2 # Diferença print 'Diferença com s3:n', s1s2.difference(s3) # Interseção print 'Interseção com s3:n', s1s2.intersection(s3) # Testa se um set inclui outro if s1.issuperset([1, 2]): print 's1 inclui 1 e 2' # Testa se não existe elementos em comum if s1.isdisjoint(s2): print 's1 e s2 não tem elementos em comum' #Saída União de s1 e s2: set([0, 1, 2, 8, 9, 10]) Diferença com s3: set([0, 1, 10, 9]) Interseção com s3: set([8, 2]) s1 inclui 1 e 2 s1 e s2 não tem elementos em comum
  • 34. Dia 1 – Introdução e Características  Outras Funções Seqüenciais de Builtins:  Obs.: Quando uma lista é convertida para set, as repetições são descartadas. www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 35. Dia 1 – Introdução e Características  Dicionários  Um dicionário é uma lista de associações compostas por uma chave única e estruturas correspondentes. Dicionários são mutáveis, tais como as listas.  A chave precisa ser de um tipo imutável, geralmente são usadas strings, mas também podem ser tuplas ou tipos numéricos. Já os itens dos dicionários podem ser tanto mutáveis quanto imutáveis. O dicionário do Python não fornece garantia de que as chaves estarão ordenadas. www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br dicionario = {'a': a, 'b': b, ..., 'z': z}
  • 36. Dia 1 – Introdução e Características  Dicionários www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 37. Dia 1 – Introdução e Características  Dicionários www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br dic = {'nome': 'Shirley Manson', 'banda': 'Garbage'} #Acessando Elementos print dic['nome'] #Adicionando Elementos dic['album'] = 'Version 2.0' #Apagando um elemento del dic['album'] #Obtendo itens, chaves e valores itens = dic.items() chaves = dic.keys() valores = dic.values() #Saída Shirley Manson
  • 38. Dia 1 – Introdução e Características  Dicionários  Alguns exemplos de operações com Dicionários: www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br # Progs e seus albuns progs = {'Yes': ['Close To The Edge', 'Fragile'], 'Genesis': ['Foxtrot', 'The Nursery Crime'], 'ELP': ['Brain Salad Surgery']} # Mais progs progs['King Crimson'] = ['Red', 'Discipline'] # items() retorna uma lista de # tuplas com a chave e o valor for prog, albuns in progs.items(): print prog, '=>', albuns # Se tiver 'ELP', deleta if progs.has_key('ELP'): del progs['ELP'] #Saída Yes => ['Close To The Edge', 'Fragile'] ELP => ['Brain Salad Surgery'] Genesis => ['Foxtrot', 'The Nursery Crime'] King Crimson => ['Red', 'Discipline']
  • 39. Dia 1 – Introdução e Características  Verdadeiro, Falso e Nulo  Em Python, o tipo booleano (bool) é uma especialização do tipo inteiro (int). O verdadeiro é chamado True e é equivalente a 1, enquanto o falso é chamado False e é equivalente a 0.  Os seguintes valores são considerados como falso (False): • False • None • 0 (zero) • ‘’ ou “” – String vazia • [ ] lista vazia • ( ) tupla vazia • { } dicionário vazio • Outras estruturas com tamanho igual a zero www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 40. Dia 1 – Introdução e Características  Operadores Booleanos  Possibilidade de construir condições mais complexas para controlar desvios condicionais e laços  São os operadores: And, or, not, is, in • and: retorna verdadeiro se e somente se receber duas expressões verdadeiras. • or: retorna false se e somente se receber duas expressões falsas. • not: retorna falso se receber uma expressão verdadeira e vice-versa • is: retorna verdadeiro quando duas referências forem idênticas ao mesmo objeto e falso em caso contrário • in: retorna verdadeiro se receber um item e uma lista e o item ocorrer uma ou mais vezes na lista e falso em caso contrário www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 41. Dia 1 – Introdução e Características  Funções  São blocos de código identificados por um nome, que podem receber parâmetros pré-determinados  Podem retornar ou não objetos  Aceitam Doc Strings  Parâmetros opcionais. Caso não receba parâmetros em sua chamada, será igual ao default definido em na função  Aceitam parâmetros passados com nome, e para este caso, a ordem em que os parâmetros foram passados não é relevante. Obs.: Doc Strings são strings que estão associadas a uma estrutura do Python. Nas funções, as Doc Strings são colocadas dentro do corpo da função, geralmente no começo. O objetivo das Doc Strings é servir de documentação para aquela estrutura. www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br def dobro(x): ""“Doc String: Esta função retorna o dobro do número x""" return x*2
  • 42. Dia 1 – Introdução e Características  Funções  São blocos de código identificados por um nome, que podem receber parâmetros pré-determinados www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br def func(parametro1, parametro2=padrao): """Doc String""" <bloco de código> return valor def fatorial(num): """Fatorial implementado de forma recursiva""“ if num <= 1: return 1 else: return(num * fatorial(num – 1)) # Testando fatorial() print fatorial(5) # Saída 120
  • 43. Dia 1 – Introdução e Características  Funções  Exemplo Fatorial sem recursão www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br def fatorial(n): n = n if n > 1 else 1 j = 1 for i in range(1, n): j = j * i return j # Testando for i in range(1,6): print i, ‘->’, fatorial(i) # Saída 1 -> 1 2 -> 2 3 -> 6 4 -> 24 5 -> 120
  • 44. Dia 1 – Introdução e Características  Funções  Método Principal: podemos referenciar o nome de uma função ou chamá-la como método principal www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br def func1(param1, param2): return value_func1 def func2(param): return value_func2 if __name__== “__main__” : func1(p1, p2) func2(p) # Saída value_func1 value_func2
  • 45. Dia 1 – Introdução e Características  Funções www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br def rgb_html(r=0, g=0, b=0): ""“Converte RGB em #RRGGBB""" return “#%02x%02x%02x“, %(r, g, b) def html_rgb(color=“#000000"): ""“Converte #RRGGBB em RGB""" if color.startswitch(‘#’): color = color [1:] r = int(color[:2], 16) g = int(color[2:4], 16) b = int(color[4:], 16) return r, g, b if __name__== “__main__” : print rgb_html(200, 200, 255) print rgb_html(b=200, g=200, r=255) print html_rgb('#c8c8ff') # Saída #c8c8ff #ffc8c8 (200, 200, 255)
  • 46. Dia 1 – Introdução e Características  Funções www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br def rgb_html(r=0, g=0, b=0): ""“Converte RGB em #RRGGBB""" return “#%02x%02x%02x“, %(r, g, b) def html_rgb(color=“#000000"): ""“Converte #RRGGBB em RGB""" if color.startswitch(‘#’): color = color [1:] r = int(color[:2], 16) g = int(color[2:4], 16) b = int(color[4:], 16) return r, g, b if __name__== “__main__” : print rgb_html(200, 200, 255) print rgb_html(b=200, g=200, r=255) print html_rgb('#c8c8ff') # Saída #c8c8ff #ffc8c8 (200, 200, 255)
  • 47. Dia 1 – Introdução e Características  Estrutura de Dados  Abordaremos aqui alguns dos pontos falados anteriormente, citados em usos com Listas, porém, descreveremos alguns métodos adicionais.  list.append(x): Adiciona um elemento ao fim da lista.  list.extend(L): Prolonga a lista, adicionando ao fim da lista atual os demais elementos da lista L.  list.insert(i, x): Insere um item em uma posição especificada, onde i = índice do elemento antes da inserção e x = o valor a ser inserido.  list.remove(x):Remove o primeiro item encontrado na lista cujo valor é igual a X  list.pop([i]): Remove o item na posição dada e o devolve. Se nenhum índice for especificado, list.pop() remove e devolve o último item na lista.  list.index(x): Devolve o índice do primeiro item cujo valor é igual a x, gerando ValueError se este valor não existe www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 48. Dia 1 – Introdução e Características  Estrutura de Dados  list.count(x): Devolve o número de vezes que o valor x aparece na lista.  list.sort(): Ordena os itens na própria lista.  list.reverse(): Inverte a ordem dos elementos na lista (sem gerar uma nova lista). www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br >>> a = [66.25, 333, 333, 1, 1234.5] >>> print a.count(333), a.count(66.25), a.count('x') 2 1 0 >>> a.insert(2, -1) >>> a.append(333) >>> a [66.25, 333, -1, 333, 1, 1234.5, 333] >>> a.index(333) 1 >>> a.remove(333) >>> a [66.25, -1, 333, 1, 1234.5, 333] >>> a.reverse() >>> a [333, 1234.5, 1, 333, -1, 66.25] >>> a.sort() >>> a [-1, 1, 66.25, 333, 333, 1234.5]
  • 49. Dia 1 – Introdução e Características  Estrutura de Dados  Usando Lista como Pilha (LIFO – Last In, First Out). www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br >>> pilha = [3, 4, 5] >>> pilha.append(6) >>> pilha.append(7) >>> pilha [3, 4, 5, 6, 7] >>> pilha.pop() 7 >>> pilha [3, 4, 5, 6] >>> pilha.pop() 6 >>> pilha.pop() 5 >>> pilha [3, 4]
  • 50. Dia 1 – Introdução e Características  Estrutura de Dados  Usando Lista como Fila (FIFO – First In, First Out).  Devemos fazer o uso da Classe collections.deque www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br >>> from collections import deque >>> fila = deque(["Eric", "John", "Michael"]) >>> fila.append("Terry") # Terry chega >>> fila.append("Graham") # Graham chega >>> fila.popleft() # O primeiro a chegar parte 'Eric' >>> fila.popleft() # O segundo a chegar parte 'John' >>> fila # O resto da fila, em ordem de chegada deque(['Michael', 'Terry', 'Graham'])
  • 51. Dia 1 – Introdução e Características  Arquivos e I/O  Os arquivos no Python são representados por objetos do tipo file Arquivos podem ser abertos para leitura ('r'), gravação ('w') ou adição ('a'), em modo texto ou binário('b'). www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br import sys # Criando um objeto do tipo file temp = open('temp.txt', 'w') # Escrevendo no arquivo for i in range(100): temp.write('%03dn' % i) # Fechando temp.close() temp = open('temp.txt') # Escrevendo no terminal for x in temp: # Escrever em sys.stdout envia # o texto para a saída padrão sys.stdout.write(x) temp.close() Exemplo de Escrita:
  • 52. Dia 1 – Introdução e Características  Arquivos e I/O  Os arquivos no Python são representados por objetos do tipo file Arquivos podem ser abertos para leitura ('r'), gravação ('w') ou adição ('a'), em modo texto ou binário('b'). www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br import sys import os.path # raw_input() retorna a string digitada fn = raw_input('Nome do arquivo: ').strip() if not os.path.exists(fn): print 'Tente outra vez...' sys.exit() # Numerando as linhas for i, s in enumerate(open(fn)): print i + 1, s, # Imprime uma lista contendo linhas do arquivo print open('temp.txt').readlines() Exemplo de leitura:
  • 53. Dia 1 – Introdução e Características  Sistemas de Arquivos  Algumas funções para manipular Diretórios de Arquivos (fyle systems):  Muitas destas funcionalidades estão implementadas no módulo os.path:  os.path.basename(): retorna o componente final de um caminho  os.path.dirname(): retorna um caminho sem o componente final  os.path.exists(): verifica se um caminho existe (True), caso contrário acusa como inexistente (False).  os.path.getsize(): retorna o tamanho do arquivo em bytes www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 54. Dia 1 – Introdução e Características Exercícios! www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br
  • 55. OBRIGADO www.sieng.ctc.puc-rio.brwww.sieng.ctc.puc-rio.br Vinícius J. L. Correia E-mail: vini.leodido@gmail.com br.linkedin.com/in/vinileodido