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