IEEE Week ‘17
Workshop de
Python
Diogo Gomes dgomes@ua.pt
Porquê Python
 Java: aplicações, serviços, web, mobile
 Desenvolvimento rápido
 Javascript: páginas e serviços web
 Linguagem interpretada
 Não é necessário compilar código
Python
 Python: aplicações, serviços, web, mobile
 Desenvolvimento muito rápido
(prototipagem)
 Linguagem obriga a formatação rígida
 “Hacks” são sempre formatados
corretamente
Python
 Nome: Monty Python’s Flying Circus
 Combina funcionalidades modernas
 Encontradas no Java, C#, Ruby, C++,
etc...
 Com um estilo conciso e simples
Python: Hello World!
# File: hello.py
print(“hello world”)
$> python hello.py
hello world
Ficheiro hello.py
Consola
Ler dados do utilizador
# File: read.py
s = input(‘-> ‘)
print(s)
$> python read.py
-> qualquer coisa
“qualquer coisa”
Ficheiro read.py
Consola
Variáveis
 Declaram-se sem tipo
 Tipo dinâmico
# File: vars.py
a = 3
b = 5.2
print(a * b)
a = “var”
Variáveis String
Tamanho dado por
função len()
a = “hello”
b = “world”
print(a+” “+b)
print(a[1])
print(a[1:4])
print(len(a))
hello world
e
ell
5
Variáveis String
 Concatenação com inteiros NÃO funciona
 Necessário converter inteiros em String
r = 42
s = “A resposta para a vida, o Universo e tudo
mais é: “
print(s + r)
print(s + str(r))
TypeError: cannot concatenate
'str' and 'int' objects
A resposta para a vida, o Universo
e tudo mais é: 42
Funções
def foo(name):
print(“Olá: ”+name)
return True
foo(“Pedro”)
Declaração de função Argumentos
Indentação define bloco
Funções - localidade
def foo(name):
print “Olá: ”+name
def bar():
print “Olá: ”+name
foo(“Pedro”)
bar()
Erro!
Programação ao Estilo Funcional em Python -
2014/2015
- 12 -
Python - Operadores lógicos
 Conjunção: and (∧)
 Disjunção: or (∨)
 Negação: not (~)
 Nota: Na conjunção e na disjunção, o
segundo argumento só é avaliado se for
necessário para determinar o resultado
Programação ao Estilo Funcional em Python -
2014/2015
- 13 -
Python - Operadores de comparação
 Igual: ==
 Diferente: != (ou <>)
 Menor/maior: <, <=, >, >=
 Objectos de tipos diferentes nunca são iguais
 Exceptuam-se os diferentes tipos de números
 Comparação de sequências baseia-se num critério
lexicográfico
Programação ao Estilo Funcional em Python -
2014/2015
- 14 -
Análise condicional:
instrução if-elif-else
 Síntaxe:
if <condição_1> :
<instruções_1>
elif <condição_2> :
<instruções_2>
else :
<instruções_n>
• Notas:
– Pode haver
0 (zero) ou
mais ramos
elif (= else if)
– O ramo elif /
else é
opcional
Modulo Matemático
 Modulo math disponibiliza um conjunto de
funções importantes.
math.ceil(x) #arredonda para o inteiro superior
math.floor(x) #arredonda para o inteiro inferior
math.trunc(x) #trunca o numero real x à sua
parte inteira
math.fabs(x) #valor absoluto
math.exp(x) #potencia nesperiana (ex)
math.log(x)
math.pow(x,y) #potencia xY
Modulo Matemático
math.sqrt(x) #raiz quadrada de x
math.cos(x), math.sin(x), math.tan(x), ...
math.pi # valor de π
math.e # valor de e
Muitas mais!!!
Necessário ler documentação em
https://docs.python.org/3/library/math.html
Módulo Random
 Permite a geração de números aleatórios
random.random() #numero entre 0.0 e 1.0
random.randint(x,y) #numero inteiro entre x e y
Exercicio
 Escreva uma função com o nome bissexto
que determina se um ano é bissexto. Um
ano é bissexto se for divisível por 4 e não for
divisível por 100, a não ser que seja
também divisível por 400. Por exemplo,
1984 é bissexto, 1100 não é, e 2000 é
bissexto.
Iteratividade
 Atribuição múltipla
 Já deve ter reparado. pode atribuir um
novo valor a uma variável já existente:
 X = 1
 X = ‘ieee’
 X = ‘day’
 Actualizar variáveis
 X = X + 1
 X+=1
Iteratividade
 Instrução while
while <condição>:
<instruções>
 Instrução break
while True:
line = input(‘> ‘)
if line == ‘done’:
break
print(line)
print(“done!”)
Strings
 String é uma sequencia de caracteres.
 Podes aceder a cada elemento da
sequencia com o operador []
 Exemplo:
>>> fruta = ‘banana’
>>> print(fruta[1])
a
B A N A N A
0 1 2 3 4 5
Strings
 Comprimento de uma string:
>>> print(len(‘banana’))
6
 Percorrer uma string:
index = 0
while index < len(fruta):
letra = fruta[index]
print(letra)
index = index + 1
Strings
 Partes de uma string
>>> s = ‘Monty Python’
>>> print(s[0:5])
Monty
>>> print(s[6:])
Python
>>> print(s[:3])
‘Mon’
>>> print(s[3:3])
‘’
Pesquisa em strings
 Pode iterar sobre uma string sem recorrer
aos seus indices:
for letter in phrase:
if letter in “ .;,!?”:
print(“n”)
else:
print(letter)
Formatação de Strings
Número Formato Resultado Descrição
3.1415926 {:.2f} 3.14 2 casas décimais
3.1415926 {:+.2f} +3.14 2 casas e sinal
-1 {:+.2f} -1.00 2 casas e sinal
2.71828 {:.0f} 3 Sem casas
5 {:0>2d} 05 “Padding” à esquerda com 0
10 {:x<4d} 10xx “Padding” à direita com x
0.25 {:.2%} 25.00% Percentagem
1000000000 {:.2e} 1.00e+09 Cientifica
13 {:10d} 13 Alinhado à direita (tamanho 10)
13 {:<10d} 13 Alinhado à esquerda (tam 10)
13 {:^10d} 13 Alinhado ao centro (tam 10)
Formatação de Strings
 string.format()
s1 = " {0} melhor que {1} ".format(”fcp", ”slb")
s2 = " {1} melhor que {0} ".format(”fcp", ”slb")
 Argumentos pelo nome
”Eu {nome} vou fazer {disciplina} à {vez}".format(nome=”Anibal",
disciplina=” Programação", vez=”primeira”)
print(" Os {0} são representados como {{0}} ".format(”vazios"))
 Literais
>>> Os vazios são representados como {0}
Listas
 Exemplos de listas:
 [10, 20, 30, 40]
 [‘sapo’, ‘macaco’, ‘porco da índia’]
 [‘coisas’, 2.0, 5, [10, 20]]
 Lista vazia
 []
 Aceder a um elemento de uma lista
 L = [1,2,4,8,16]
>>> print(L[1])
2
Listas são mutáveis
>>> Numeros = [1,2,4,4]
>>> Numeros[2] = 3
>>> print Numeros
[1,2,3,4]
 O operador in pode ser usado nas listas
>>> queijos = [‘serra’, ‘mozarella’, ‘flamengo’]
>>> ‘flamengo’ in queijos
True
>>> ‘brie’ in queijos
False
Atravessar uma lista
for queijo in queijos:
print queijo
 range() devolver uma lista de numeros
 Mesmo que uma lista tenha outras listas
contidas, o for só atravessa os elementos
da lista em questão e não os elementos das
listas internas.
 Uma lista vazia [] não é iteravel, mas
também não constitui um erro
Operações com listas
 Concatenação
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> print a+b
[1,2,3,4,5,6]
>>> [0] * 4
[0,0,0,0]
>>> [1,2,3] * 3
[1,2,3, 1,2,3, 1,2,3]
Operações com listas
 Partição
>>> t = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]
>>> t[1:3]
[‘b’, ‘c’]
>>> t[:4]
[‘a’, ‘b’, ‘c’, ‘d’]
>>> t[3:]
[‘d’, ‘e’, ‘f’]
Operações com listas
 Métodos
 lista.append(elemento)
 lista.extend(outra_lista)
 lista.sort()
 x = lista.pop(posicao)
 del lista[posicao]
 del lista[posicao:posicao2]
 lista.remove(elemento)
Dicionários
 Sintaxe: são como as listas, mas os índices
não precisam de ser inteiros.
 Um dicionário mapeia um índice (chave)
num valor.
 A associação de uma chave a um valor
chama-se de item
>>> en2pt = dict()
>>> print en2pt
{}
Acrescentar itens
 Pode usar []
>>> en2pt[‘one’] = ‘um’
 Pode inicializar com uma estrutura
>>> en2pt = {‘one’: ‘um’, ‘two’: ‘dois’, ‘three’:
‘tres’}
 O operador in indica se algo é uma chave
do dicionário
>>> ‘one’ in en2pt
True
>>> ‘um’ in en2pt
False
Listar
 Pode listar todas as chaves de um dicionário
>>> en2pt.keys()
 Ou listar todos os valores
>>> en2pt.values()
 Ou ainda os pares chave, valor
>>> en2pt.items()
Tuplos
 Tuplos são uma sequencia de valores
>>> t = ‘a’, ‘b’, 1, ‘ola’
 A maioria dos operadores sobre listas
também funcionam com tuplos
>>> t[1:3]
(‘b’, 1)
 Mas não podemos modificar os elementos!
(TypeError)
Leitura de ficheiros de texto
 Como ler os conteúdos de um ficheiro de
texto
>>>fin = open(‘words.txt’)
>>>print fin
 Como ler uma linha
>>>fin.readline()
 Como ler várias linhas
fin = open(‘words.txt’)
for line in fin:
word = line.strip()
print word
Outras coisas...
 OOP
 class
 __init__()
 self
 Batteries Included
 xml
 json
 requests
 ...
Bibliografia
 Think Python
 http://thinkpython.com/
Isto não era um workshop ?!
O que ?!!? Era só isto !?
EDP REDY
Smart Metering & Smart Home
Processar a info da GW
REDY
https://goo.gl/bkDdp1
 Obter o conteudo
 Library: urllib.request
 Processar o HTML
 Library: xml.dom.minidom
 Processar o JSON
 Library: json
 Interpretar as Strings
 datetime
 float

IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python

  • 1.
    IEEE Week ‘17 Workshopde Python Diogo Gomes dgomes@ua.pt
  • 2.
    Porquê Python  Java:aplicações, serviços, web, mobile  Desenvolvimento rápido  Javascript: páginas e serviços web  Linguagem interpretada  Não é necessário compilar código
  • 3.
    Python  Python: aplicações,serviços, web, mobile  Desenvolvimento muito rápido (prototipagem)  Linguagem obriga a formatação rígida  “Hacks” são sempre formatados corretamente
  • 4.
    Python  Nome: MontyPython’s Flying Circus  Combina funcionalidades modernas  Encontradas no Java, C#, Ruby, C++, etc...  Com um estilo conciso e simples
  • 5.
    Python: Hello World! #File: hello.py print(“hello world”) $> python hello.py hello world Ficheiro hello.py Consola
  • 6.
    Ler dados doutilizador # File: read.py s = input(‘-> ‘) print(s) $> python read.py -> qualquer coisa “qualquer coisa” Ficheiro read.py Consola
  • 7.
    Variáveis  Declaram-se semtipo  Tipo dinâmico # File: vars.py a = 3 b = 5.2 print(a * b) a = “var”
  • 8.
    Variáveis String Tamanho dadopor função len() a = “hello” b = “world” print(a+” “+b) print(a[1]) print(a[1:4]) print(len(a)) hello world e ell 5
  • 9.
    Variáveis String  Concatenaçãocom inteiros NÃO funciona  Necessário converter inteiros em String r = 42 s = “A resposta para a vida, o Universo e tudo mais é: “ print(s + r) print(s + str(r)) TypeError: cannot concatenate 'str' and 'int' objects A resposta para a vida, o Universo e tudo mais é: 42
  • 10.
    Funções def foo(name): print(“Olá: ”+name) returnTrue foo(“Pedro”) Declaração de função Argumentos Indentação define bloco
  • 11.
    Funções - localidade deffoo(name): print “Olá: ”+name def bar(): print “Olá: ”+name foo(“Pedro”) bar() Erro!
  • 12.
    Programação ao EstiloFuncional em Python - 2014/2015 - 12 - Python - Operadores lógicos  Conjunção: and (∧)  Disjunção: or (∨)  Negação: not (~)  Nota: Na conjunção e na disjunção, o segundo argumento só é avaliado se for necessário para determinar o resultado
  • 13.
    Programação ao EstiloFuncional em Python - 2014/2015 - 13 - Python - Operadores de comparação  Igual: ==  Diferente: != (ou <>)  Menor/maior: <, <=, >, >=  Objectos de tipos diferentes nunca são iguais  Exceptuam-se os diferentes tipos de números  Comparação de sequências baseia-se num critério lexicográfico
  • 14.
    Programação ao EstiloFuncional em Python - 2014/2015 - 14 - Análise condicional: instrução if-elif-else  Síntaxe: if <condição_1> : <instruções_1> elif <condição_2> : <instruções_2> else : <instruções_n> • Notas: – Pode haver 0 (zero) ou mais ramos elif (= else if) – O ramo elif / else é opcional
  • 15.
    Modulo Matemático  Modulomath disponibiliza um conjunto de funções importantes. math.ceil(x) #arredonda para o inteiro superior math.floor(x) #arredonda para o inteiro inferior math.trunc(x) #trunca o numero real x à sua parte inteira math.fabs(x) #valor absoluto math.exp(x) #potencia nesperiana (ex) math.log(x) math.pow(x,y) #potencia xY
  • 16.
    Modulo Matemático math.sqrt(x) #raizquadrada de x math.cos(x), math.sin(x), math.tan(x), ... math.pi # valor de π math.e # valor de e Muitas mais!!! Necessário ler documentação em https://docs.python.org/3/library/math.html
  • 17.
    Módulo Random  Permitea geração de números aleatórios random.random() #numero entre 0.0 e 1.0 random.randint(x,y) #numero inteiro entre x e y
  • 18.
    Exercicio  Escreva umafunção com o nome bissexto que determina se um ano é bissexto. Um ano é bissexto se for divisível por 4 e não for divisível por 100, a não ser que seja também divisível por 400. Por exemplo, 1984 é bissexto, 1100 não é, e 2000 é bissexto.
  • 19.
    Iteratividade  Atribuição múltipla Já deve ter reparado. pode atribuir um novo valor a uma variável já existente:  X = 1  X = ‘ieee’  X = ‘day’  Actualizar variáveis  X = X + 1  X+=1
  • 20.
    Iteratividade  Instrução while while<condição>: <instruções>  Instrução break while True: line = input(‘> ‘) if line == ‘done’: break print(line) print(“done!”)
  • 21.
    Strings  String éuma sequencia de caracteres.  Podes aceder a cada elemento da sequencia com o operador []  Exemplo: >>> fruta = ‘banana’ >>> print(fruta[1]) a B A N A N A 0 1 2 3 4 5
  • 22.
    Strings  Comprimento deuma string: >>> print(len(‘banana’)) 6  Percorrer uma string: index = 0 while index < len(fruta): letra = fruta[index] print(letra) index = index + 1
  • 23.
    Strings  Partes deuma string >>> s = ‘Monty Python’ >>> print(s[0:5]) Monty >>> print(s[6:]) Python >>> print(s[:3]) ‘Mon’ >>> print(s[3:3]) ‘’
  • 24.
    Pesquisa em strings Pode iterar sobre uma string sem recorrer aos seus indices: for letter in phrase: if letter in “ .;,!?”: print(“n”) else: print(letter)
  • 25.
    Formatação de Strings NúmeroFormato Resultado Descrição 3.1415926 {:.2f} 3.14 2 casas décimais 3.1415926 {:+.2f} +3.14 2 casas e sinal -1 {:+.2f} -1.00 2 casas e sinal 2.71828 {:.0f} 3 Sem casas 5 {:0>2d} 05 “Padding” à esquerda com 0 10 {:x<4d} 10xx “Padding” à direita com x 0.25 {:.2%} 25.00% Percentagem 1000000000 {:.2e} 1.00e+09 Cientifica 13 {:10d} 13 Alinhado à direita (tamanho 10) 13 {:<10d} 13 Alinhado à esquerda (tam 10) 13 {:^10d} 13 Alinhado ao centro (tam 10)
  • 26.
    Formatação de Strings string.format() s1 = " {0} melhor que {1} ".format(”fcp", ”slb") s2 = " {1} melhor que {0} ".format(”fcp", ”slb")  Argumentos pelo nome ”Eu {nome} vou fazer {disciplina} à {vez}".format(nome=”Anibal", disciplina=” Programação", vez=”primeira”) print(" Os {0} são representados como {{0}} ".format(”vazios"))  Literais >>> Os vazios são representados como {0}
  • 27.
    Listas  Exemplos delistas:  [10, 20, 30, 40]  [‘sapo’, ‘macaco’, ‘porco da índia’]  [‘coisas’, 2.0, 5, [10, 20]]  Lista vazia  []  Aceder a um elemento de uma lista  L = [1,2,4,8,16] >>> print(L[1]) 2
  • 28.
    Listas são mutáveis >>>Numeros = [1,2,4,4] >>> Numeros[2] = 3 >>> print Numeros [1,2,3,4]  O operador in pode ser usado nas listas >>> queijos = [‘serra’, ‘mozarella’, ‘flamengo’] >>> ‘flamengo’ in queijos True >>> ‘brie’ in queijos False
  • 29.
    Atravessar uma lista forqueijo in queijos: print queijo  range() devolver uma lista de numeros  Mesmo que uma lista tenha outras listas contidas, o for só atravessa os elementos da lista em questão e não os elementos das listas internas.  Uma lista vazia [] não é iteravel, mas também não constitui um erro
  • 30.
    Operações com listas Concatenação >>> a = [1,2,3] >>> b = [4,5,6] >>> print a+b [1,2,3,4,5,6] >>> [0] * 4 [0,0,0,0] >>> [1,2,3] * 3 [1,2,3, 1,2,3, 1,2,3]
  • 31.
    Operações com listas Partição >>> t = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’] >>> t[1:3] [‘b’, ‘c’] >>> t[:4] [‘a’, ‘b’, ‘c’, ‘d’] >>> t[3:] [‘d’, ‘e’, ‘f’]
  • 32.
    Operações com listas Métodos  lista.append(elemento)  lista.extend(outra_lista)  lista.sort()  x = lista.pop(posicao)  del lista[posicao]  del lista[posicao:posicao2]  lista.remove(elemento)
  • 33.
    Dicionários  Sintaxe: sãocomo as listas, mas os índices não precisam de ser inteiros.  Um dicionário mapeia um índice (chave) num valor.  A associação de uma chave a um valor chama-se de item >>> en2pt = dict() >>> print en2pt {}
  • 34.
    Acrescentar itens  Podeusar [] >>> en2pt[‘one’] = ‘um’  Pode inicializar com uma estrutura >>> en2pt = {‘one’: ‘um’, ‘two’: ‘dois’, ‘three’: ‘tres’}  O operador in indica se algo é uma chave do dicionário >>> ‘one’ in en2pt True >>> ‘um’ in en2pt False
  • 35.
    Listar  Pode listartodas as chaves de um dicionário >>> en2pt.keys()  Ou listar todos os valores >>> en2pt.values()  Ou ainda os pares chave, valor >>> en2pt.items()
  • 36.
    Tuplos  Tuplos sãouma sequencia de valores >>> t = ‘a’, ‘b’, 1, ‘ola’  A maioria dos operadores sobre listas também funcionam com tuplos >>> t[1:3] (‘b’, 1)  Mas não podemos modificar os elementos! (TypeError)
  • 37.
    Leitura de ficheirosde texto  Como ler os conteúdos de um ficheiro de texto >>>fin = open(‘words.txt’) >>>print fin  Como ler uma linha >>>fin.readline()  Como ler várias linhas fin = open(‘words.txt’) for line in fin: word = line.strip() print word
  • 38.
    Outras coisas...  OOP class  __init__()  self  Batteries Included  xml  json  requests  ...
  • 39.
    Bibliografia  Think Python http://thinkpython.com/
  • 40.
    Isto não eraum workshop ?! O que ?!!? Era só isto !?
  • 41.
  • 42.
    Processar a infoda GW REDY https://goo.gl/bkDdp1  Obter o conteudo  Library: urllib.request  Processar o HTML  Library: xml.dom.minidom  Processar o JSON  Library: json  Interpretar as Strings  datetime  float