Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ThinkUP Python

ThinkUP Python

Regis da Silva

March 05, 2017
Tweet

More Decks by Regis da Silva

Other Decks in Technology

Transcript

  1. Grupy­SP apresenta FS2W ­ Full Stack Web Workshops FS2W #5

    Introdução ao Git Sábado, 11/03 a partir das 10:00 na IBM meetup.com/Grupy­SP ­ rg3915.github.io/fs2w meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 4
  2. O que é Python? É uma linguagem interpretada, com tipagem

    dinâmica e forte. meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 12
  3. Python foi criado por Guido van Rossum em 1991. @gvanrossum

    Working at Dropbox. meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 13
  4. Python vem de Monty Python's Flying Circus Grupo humorístico britânico

    meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 14
  5. Vantagens do Python Legível Fácil de aprender Se faz muito

    escrevendo pouco Baterias inclusas Multiplataforma meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 15
  6. Tipagem Dinâmica A identificação do tipo acontece em Runtime. >

    > > n = 4 2 > > > t y p e ( n ) < c l a s s ' i n t ' > > > > p i = 3 . 1 4 > > > t y p e ( p i ) < c l a s s ' f l o a t ' > > > > t = ' T e x t o ' > > > t y p e ( t ) < c l a s s ' s t r ' > > > > b = T r u e > > > t y p e ( b ) < c l a s s ' b o o l ' > meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 16
  7. Tipagem Forte O Python não transforma um tipo em outro

    implicitamente. Exemplo, '1' + 1 dá erro. Em outras linguagens retorna '11'. meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 17
  8. Mac Mac OS X 64­bit/32­bit installer Guia definitivo para organizar

    meu ambiente Python by @henriquebastos https://medium.com/@henriquebastos/guia­definitivo­para­organizar­meu­ambiente­python­ a16e2479b753#.mq4be8r1h meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 22
  9. Linux Simple Python Version Management: pyenv https://github.com/yyuu/pyenv Tutorial Instalando o

    pyenv by @rg3915 https://github.com/rg3915/django­experience/wiki/Instalando­o­pyenv Instalando qualquer versão do Python no Linux/Mac OSX utilizando pyenv by @rafaelhenrique http://blog.abraseucodigo.com.br/instalando­qualquer­versao­do­python­no­linux­macosx­ utilizando­pyenv.html meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 23
  10. O mínimo para usar o Python Terminal (em Windows use

    o Cmder) Editor de texto Vim Nano Gedit Atom Sublime Text Notepad ++ IDE PyCharm meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 24
  11. > > > p r i n t ( '

    H e l l o W o r d ' ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 26
  12. Além do Hello Word f r o m d a

    t e t i m e i m p o r t d a t e t i m e f r o m t i m e i m p o r t s l e e p w h i l e T r u e : h o r a = d a t e t i m e . n o w ( ) p r i n t ( h o r a . s t r f t i m e ( ' % H : % M : % S ' ) ) s l e e p ( 1 ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 27
  13. Vamos para o pythontutor.com l i s t a =

    l i s t ( r a n g e ( 1 , 1 1 ) ) i m p a r e s = [ ] p a r e s = [ ] f o r i i n l i s t a : i f i % 2 : i m p a r e s . a p p e n d ( i ) e l s e : p a r e s . a p p e n d ( i ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 29
  14. Servidor local em Python p y t h o n

    ­ m h t t p . s e r v e r 8 0 8 0 meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 30
  15. i m p o r t s m t p

    l i b i m p o r t g e t p a s s o b j = s m t p l i b . S M T P ( ' s m t p . g m a i l . c o m ' , 5 8 7 ) o b j . e h l o ( ) o b j . s t a r t t l s ( ) m y _ e m a i l = ' r e g i s . s a n t o s . 1 0 0 @ g m a i l . c o m ' p a s s w o r d = g e t p a s s . g e t p a s s ( ) o b j . l o g i n ( m y _ e m a i l , p a s s w o r d ) e m a i l _ f r o m = ' r e g i s . s a n t o s . 1 0 0 @ g m a i l . c o m ' e m a i l _ t o = ' r e g i s . s a n t o s . 1 0 0 @ g m a i l . c o m ' s u b j e c t = ' S u b j e c t : B e m ­ v i n d o a o T h i n k U P ' m e s s a g e = ' B e m ­ v i n d o a o T h i n k U P d e I n t r o d u c a o a o P y t h o n . ' o b j . s e n d m a i l ( e m a i l _ f r o m , e m a i l _ t o , ' % s \ n % s ' % ( s u b j e c t , m e s s a g e ) ) o b j . q u i t ( ) p r i n t ( ' E ­ m a i l e n v i a d o c o m s u c e s s o . ' ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 32
  16. TDD: Test Driven Development github.com/rg3915/test­first Obey the Testing Goat! github.com/hjwp/book­example

    meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 33
  17. # t e m p e r a t u

    r e . p y d e f t e s t _ c e l s i u s _ k e l v i n ( ) : a s s e r t c e l s i u s _ k e l v i n ( 0 ) = = 2 7 3 a s s e r t c e l s i u s _ k e l v i n ( 1 0 ) = = 2 8 3 i f _ _ n a m e _ _ = = ' _ _ m a i n _ _ ' : t e s t _ c e l s i u s _ k e l v i n ( ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 35
  18. d e f c e l s i u s

    _ k e l v i n ( n ) : r e t u r n n + 2 7 3 d e f t e s t _ c e l s i u s _ k e l v i n ( ) : a s s e r t c e l s i u s _ k e l v i n ( 0 ) = = 2 7 3 a s s e r t c e l s i u s _ k e l v i n ( 1 0 ) = = 2 8 3 a s s e r t c e l s i u s _ k e l v i n ( 2 0 ) = = 2 9 3 i f _ _ n a m e _ _ = = ' _ _ m a i n _ _ ' : t e s t _ c e l s i u s _ k e l v i n ( ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 37
  19. Nota final de provas # n o t a s

    . p y i m p o r t u n i t t e s t c l a s s G r a d e T e s t ( u n i t t e s t . T e s t C a s e ) : d e f t e s t _ g r a d e ( s e l f ) : s e l f . a s s e r t E q u a l ( g r a d e ( 1 0 ) , ' A p r o v a d o ' ) s e l f . a s s e r t E q u a l ( g r a d e ( 7 ) , ' A p r o v a d o ' ) s e l f . a s s e r t E q u a l ( g r a d e ( 6 . 9 ) , ' R e c u p e r a ç ã o ' ) s e l f . a s s e r t E q u a l ( g r a d e ( 4 ) , ' R e c u p e r a ç ã o ' ) s e l f . a s s e r t E q u a l ( g r a d e ( 3 . 9 ) , ' R e p r o v a d o ' ) s e l f . a s s e r t E q u a l ( g r a d e ( 0 ) , ' R e p r o v a d o ' ) i f _ _ n a m e _ _ = = ' _ _ m a i n _ _ ' : u n i t t e s t . m a i n ( ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 40
  20. i m p o r t u n i t

    t e s t d e f n o t a ( v a l o r ) : i f v a l o r > = 7 : r e t u r n ' A p r o v a d o ' e l i f v a l o r > = 4 : r e t u r n ' R e c u p e r a ç ã o ' e l s e : r e t u r n ' R e p r o v a d o ' c l a s s G r a d e T e s t ( u n i t t e s t . T e s t C a s e ) : d e f t e s t _ g r a d e ( s e l f ) : s e l f . a s s e r t E q u a l ( n o t a ( 1 0 ) , ' A p r o v a d o ' ) s e l f . a s s e r t E q u a l ( n o t a ( 7 ) , ' A p r o v a d o ' ) s e l f . a s s e r t E q u a l ( n o t a ( 6 . 9 ) , ' R e c u p e r a ç ã o ' ) s e l f . a s s e r t E q u a l ( n o t a ( 4 ) , ' R e c u p e r a ç ã o ' ) s e l f . a s s e r t E q u a l ( n o t a ( 3 . 9 ) , ' R e p r o v a d o ' ) s e l f . a s s e r t E q u a l ( n o t a ( 0 ) , ' R e p r o v a d o ' ) i f _ _ n a m e _ _ = = ' _ _ m a i n _ _ ' : u n i t t e s t . m a i n ( ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 42
  21. Soma de Vetores Definição: Dados dois vetores u = (u

    , u , ..., u ) e v = (v , v , ..., v ) de R , a soma de u e v é o vetor dado por u + v = (u + v , u + v , ..., u + v ) 1 2 n 1 2 n n 1 1 2 2 n n meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 43
  22. ' ' ' > > > v 1 = [

    1 , 2 , 3 ] > > > v 2 = [ 9 , 1 8 , 2 7 ] > > > s u m _ v e c t o r ( v 1 , v 2 ) [ 1 0 , 2 0 , 3 0 ] ' ' ' d e f s u m _ v e c t o r ( v 1 , v 2 ) : v e t o r = [ ] f o r i i n r a n g e ( m i n ( l e n ( v 1 ) , l e n ( v 2 ) ) ) : v e t o r . a p p e n d ( v 1 [ i ] + v 2 [ i ] ) r e t u r n v e t o r i f _ _ n a m e _ _ = = ' _ _ m a i n _ _ ' : v 1 = [ 1 , 2 , 3 ] v 2 = [ 9 , 1 8 , 2 7 ] p r i n t ( s u m _ v e c t o r ( v 1 , v 2 ) ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 45
  23. p y t h o n ­ m d o

    c t e s t v e c t o r . p y meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 46
  24. Multiplicação por Escalar Definição: Dado um vetor v ∈ R

    e um escalar α ∈ R, o produto de α por v é dado por αv = α(v , v , ..., v ) = (αv , αv , ..., αv ) n 1 2 n 1 2 n meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 47
  25. ' ' ' > > > m u l _

    v e c t o r ( 3 , v 1 ) [ 3 , 6 , 9 ] ' ' ' d e f m u l _ v e c t o r ( a , v ) : v e t o r = [ ] f o r i i n v : v e t o r . a p p e n d ( a * i ) r e t u r n v e t o r meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 48
  26. p y t h o n ­ m d o

    c t e s t v e c t o r . p y meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 49
  27. Zen of Python by Tim Peters Beautiful is better than

    ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Bonito é melhor que feio. Explícito é melhor que implícito. Simples é melhor que complexo. Complexo é melhor que complicado. Linear é melhor do que aninhado. Esparso é melhor que denso. Legibilidade conta. meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 50
  28. Special cases aren't special enough to break the rules. Although

    practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one­­ and preferably only one ­­obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Casos especiais não são especiais o bastante para quebrar as regras. Ainda que praticidade vença a pureza. Erros nunca devem passar silenciosamente. A menos que sejam explicitamente silenciados. Diante da ambigüidade, recuse a tentação de adivinhar. Deveria haver um — e preferencialmente só um — modo óbvio para fazer algo. Embora esse modo possa não ser óbvio a princípio a menos que você seja holandês. meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 51
  29. Now is better than never. Although never is often better

    than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea ­­ let's do more of those! Agora é melhor que nunca. Embora nunca freqüentemente seja melhor que *já*. Se a implementação é difícil de explicar, é uma má idéia. Se a implementação é fácil de explicar, pode ser uma boa idéia. Namespaces são uma grande idéia — vamos ter mais dessas! meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 52
  30. List Compreenshions (Abrangência de listas) Soma de vetores p r

    i n t ( [ i + j f o r i , j i n z i p ( v 1 , v 2 ) ] ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 53
  31. Multiplicação por escalar p r i n t ( [

    3 * x f o r x i n v 2 ] ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 54
  32. Dicionários São coleções de valores identificados por chaves únicas. {

    ' c h a v e ' : v a l o r } u f = { ' S P ' : ' S ã o P a u l o ' , ' R J ' : ' R i o d e J a n e i r o ' , ' M G ' : ' M i n a s G e r a i s ' } u f [ ' S P ' ] u f [ ' R J ' ] u f [ ' P R ' ] u f [ ' P R ' ] = ' P a r a n á ' u f [ ' P R ' ] meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 55
  33. Nota final de provas i m p o r t

    u n i t t e s t d e f n o t a ( v a l o r ) : i f v a l o r > = 7 : r e t u r n ' A p r o v a d o ' e l i f v a l o r > = 4 : r e t u r n ' R e c u p e r a ç ã o ' e l s e : r e t u r n ' R e p r o v a d o ' c l a s s G r a d e T e s t ( u n i t t e s t . T e s t C a s e ) : d e f t e s t _ g r a d e ( s e l f ) : s e l f . a s s e r t E q u a l ( n o t a ( 1 0 ) , ' A p r o v a d o ' ) s e l f . a s s e r t E q u a l ( n o t a ( 7 ) , ' A p r o v a d o ' ) s e l f . a s s e r t E q u a l ( n o t a ( 6 . 9 ) , ' R e c u p e r a ç ã o ' ) s e l f . a s s e r t E q u a l ( n o t a ( 4 ) , ' R e c u p e r a ç ã o ' ) s e l f . a s s e r t E q u a l ( n o t a ( 3 . 9 ) , ' R e p r o v a d o ' ) s e l f . a s s e r t E q u a l ( n o t a ( 0 ) , ' R e p r o v a d o ' ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 56
  34. d e f m a i n ( ) :

    a l u n o s = { ' R e g i s ' : 9 , ' M a r c i a ' : 9 . 5 , ' F e r n a n d o ' : 8 , ' P e d r i n h o ' : 2 , ' A n i n h a ' : 4 , } f o r a l u n o , v a l o r i n a l u n o s . i t e m s ( ) : p r i n t ( a l u n o , v a l o r , n o t a ( v a l o r ) ) i f _ _ n a m e _ _ = = ' _ _ m a i n _ _ ' : m a i n ( ) u n i t t e s t . m a i n ( ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 57
  35. Programação Funcional É um paradigma de programação que trata a

    computação como uma avaliação de funções matemáticas e que evita estados ou dados mutáveis. http://www.u.arizona.edu/~erdmann/mse350/topics/list_comprehensions.html#map­lambda­ and­filter m a p ( ) , f i l t e r ( ) , r e d u c e ( ) e z i p ( ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 58
  36. zip Definição: Dados os vetores u = (u , u

    , ..., u ) e v = (v , v , ..., v ) zip(u, v) = ((u , v ), (u , v ), ..., (u , v )) 1 2 n 1 2 n 1 1 2 2 n n meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 59
  37. Exemplo > > > u = ( 1 , 2

    , 3 ) > > > v = ( 1 0 , 2 0 , 3 0 ) > > > w = ( 1 0 0 , 2 0 0 , 3 0 0 ) > > > l i s t ( z i p ( u , v , w ) ) [ ( 1 , 1 0 , 1 0 0 ) , ( 2 , 2 0 , 2 0 0 ) , ( 3 , 3 0 , 3 0 0 ) ] meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 60
  38. map Definição: Dado o vetor v = (v , v

    , ..., v ) e a função y = f(x) map(f(x), v) = (y , y , ..., y ) 1 2 n 1 2 n meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 61
  39. Exemplo > > > v = ( 1 , 2

    , 3 , 4 , 5 ) > > > l i s t ( m a p ( l a m b d a x : x * * 2 , v ) ) [ 1 , 4 , 9 , 1 6 , 2 5 ] meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 62
  40. Soma de vetores > > > v 1 = [

    1 , 2 , 3 ] > > > v 2 = [ 9 , 1 8 , 2 7 ] > > > p r i n t ( l i s t ( m a p ( s u m , z i p ( v 1 , v 2 ) ) ) ) [ 1 0 , 2 0 , 3 0 ] Multiplicação por escalar > > > p r i n t ( l i s t ( m a p ( l a m b d a x : 3 * x , v 1 ) ) ) [ 3 , 6 , 9 ] meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 63
  41. filter Definição: Dado o vetor v = (v , v

    , ..., v ) e a função y = f(x), se f(x) for verdadeiro, então filter(f(x), v) = (y , y , ..., y ), ∀y ∈ T 1 2 n 1 2 n meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 64
  42. Exemplo > > > v = l i s t

    ( r a n g e ( 1 , 1 1 ) ) > > > p r i n t ( v ) [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 1 0 ] > > > p r i n t ( l i s t ( f i l t e r ( l a m b d a x : x % 2 = = 0 , v ) ) ) [ 2 , 4 , 6 , 8 , 1 0 ] > > > p r i n t ( l i s t ( f i l t e r ( l a m b d a x : x % 2 , v ) ) ) [ 1 , 3 , 5 , 7 , 9 ] meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 65
  43. reduce Definição: Dado o vetor v = (v , v

    , ..., v ) e a função y = f(x) reduce(f(x), v) = z Onde z é um único valor. 1 2 n meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 66
  44. Exemplo # P y t h o n 2 .

    7 v = ( ' o t o r r i n o ' , ' l a r i n g o ' , ' l o g i s t a ' ) p r i n t r e d u c e ( l a m b d a x , y : x + y , v ) # P y t h o n 3 . 6 i m p o r t f u n c t o o l s v = ( ' o t o r r i n o ' , ' l a r i n g o ' , ' l o g i s t a ' ) p r i n t ( f u n c t o o l s . r e d u c e ( l a m b d a x , y : x + y , v ) ) functools meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 67
  45. Exemplo # P y t h o n 2 .

    7 p r i n t r e d u c e ( l a m b d a x , y : x + y , r a n g e ( 1 , 1 1 ) ) # P y t h o n 3 . 6 i m p o r t f u n c t o o l s p r i n t ( f u n c t o o l s . r e d u c e ( l a m b d a x , y : x + y , r a n g e ( 1 , 1 1 ) ) ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 68
  46. No interpretador Python: c l a s s T e

    l e v i s a o ( ) : d e f _ _ i n i t _ _ ( s e l f ) : s e l f . l i g a d a = F a l s e s e l f . c a n a l = 2 t v _ q u a r t o = T e l e v i s a o ( ) t v _ s a l a = T e l e v i s a o ( ) t v _ q u a r t o . l i g a d a t v _ q u a r t o . c a n a l t v _ s a l a . l i g a d a = T r u e t v _ s a l a . c a n a l = 5 t v _ s a l a . l i g a d a t v _ s a l a . c a n a l meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 74
  47. # t v . p y c l a s

    s T e l e v i s a o ( ) : d e f _ _ i n i t _ _ ( s e l f ) : s e l f . l i g a d a = F a l s e s e l f . c a n a l = 2 d e f m u d a _ c a n a l _ p a r a _ b a i x o ( s e l f ) : s e l f . c a n a l ­ = 1 d e f m u d a _ c a n a l _ p a r a _ c i m a ( s e l f ) : s e l f . c a n a l + = 1 meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 75
  48. i f _ _ n a m e _ _

    = = ' _ _ m a i n _ _ ' : t v = T e l e v i s a o ( ) p r i n t ( ' C a n a l i n i c i a l : ' , t v . c a n a l ) p r i n t ( ' L i g a d a : ' , t v . l i g a d a ) t v . l i g a d a = T r u e t v . c a n a l = 5 p r i n t ( ' L i g a d a : ' , t v . l i g a d a ) p r i n t ( ' C a n a l i n i c i a l : ' , t v . c a n a l ) t v . m u d a _ c a n a l _ p a r a _ c i m a ( ) p r i n t ( ' C a n a l + ' , t v . c a n a l ) t v . m u d a _ c a n a l _ p a r a _ c i m a ( ) p r i n t ( ' C a n a l + ' , t v . c a n a l ) t v . m u d a _ c a n a l _ p a r a _ b a i x o ( ) p r i n t ( ' C a n a l ­ ' , t v . c a n a l ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 76
  49. Herança de Classes # v e i c u l

    o . p y c l a s s V e i c u l o ( o b j e c t ) : d e f _ _ i n i t _ _ ( s e l f ) : s e l f . p o r t a = 0 s e l f . r o d a = 2 c l a s s V e i c u l o M o t o r i z a d o ( V e i c u l o ) : d e f _ _ i n i t _ _ ( s e l f ) : V e i c u l o . _ _ i n i t _ _ ( s e l f ) s e l f . l i g a d o = F a l s e d e f l i g a r _ m o t o r ( s e l f ) : s e l f . l i g a d o = T r u e meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 78
  50. i f _ _ n a m e _ _

    = = ' _ _ m a i n _ _ ' : b i c i c l e t a = V e i c u l o ( ) p r i n t ( ' B i c i c l e t a : ' ) p r i n t ( ' P o r t a : ' , b i c i c l e t a . p o r t a ) p r i n t ( ' R o d a : ' , b i c i c l e t a . r o d a ) t r i c i c l o = V e i c u l o ( ) p r i n t ( ' T r i c i c l o : ' ) t r i c i c l o . r o d a = 3 p r i n t ( ' P o r t a : ' , t r i c i c l o . p o r t a ) p r i n t ( ' R o d a : ' , t r i c i c l o . r o d a ) m o t o = V e i c u l o M o t o r i z a d o ( ) p r i n t ( ' M o t o : ' ) p r i n t ( ' P o r t a : ' , m o t o . p o r t a ) p r i n t ( ' R o d a : ' , m o t o . r o d a ) p r i n t ( ' M o t o r : ' , m o t o . l i g a d o ) m o t o . l i g a r _ m o t o r ( ) p r i n t ( ' M o t o r : ' , m o t o . l i g a d o ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 79
  51. c a r r o = V e i c

    u l o M o t o r i z a d o ( ) c a r r o . p o r t a = 4 c a r r o . r o d a = 4 c a r r o . l i g a r _ m o t o r ( ) p r i n t ( ' C a r r o : ' ) p r i n t ( ' P o r t a : ' , c a r r o . p o r t a ) p r i n t ( ' R o d a : ' , c a r r o . r o d a ) p r i n t ( ' M o t o r : ' , c a r r o . l i g a d o ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 80
  52. Salas # r o o m s . p y

    c l a s s P e r s o n ( o b j e c t ) : d e f _ _ i n i t _ _ ( s e l f , u s e r n a m e ) : s e l f . u s e r n a m e = u s e r n a m e c l a s s R o o m ( o b j e c t ) : d e f _ _ i n i t _ _ ( s e l f , r o o m ) : s e l f . r o o m = r o o m s e l f . p e r s o n s = [ ] d e f a d d _ p e r s o n ( s e l f , p e r s o n ) : i f i s i n s t a n c e ( p e r s o n , ( l i s t , t u p l e ) ) : s e l f . p e r s o n s . e x t e n d ( p e r s o n ) e l s e : s e l f . p e r s o n s . a p p e n d ( p e r s o n ) d e f c o u n t _ p e r s o n s ( s e l f ) : # C o n t a o s i t e m s d a l i s t a ' p e r s o n s ' . r e t u r n l e n ( s e l f . p e r s o n s ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 81
  53. i f _ _ n a m e _ _

    = = ' _ _ m a i n _ _ ' : s a l a 1 = R o o m ( ' T h i n k L a b ' ) p r i n t ( s a l a 1 . r o o m ) p r i n t ( s a l a 1 . p e r s o n s ) s a l a 1 . a d d _ p e r s o n ( ' R e g i s ' ) s a l a 1 . a d d _ p e r s o n ( ' F e r n a n d o ' ) p r i n t ( s a l a 1 . r o o m , s a l a 1 . c o u n t _ p e r s o n s ( ) , s a l a 1 . p e r s o n s ) s a l a 2 = R o o m ( ' W a t s o n ' ) s a l a 2 . a d d _ p e r s o n ( ' M a r c i a ' ) p r i n t ( s a l a 2 . r o o m , s a l a 2 . c o u n t _ p e r s o n s ( ) , s a l a 2 . p e r s o n s ) s a l a 3 = R o o m ( ' A u d i t ó r i o ' ) p e r s o n s = [ ' A n a ' , ' B e a t r i z ' , ' C a r l o s ' , ' D a n i e l ' , ' E d u a r d o ' , ' F r e d e r i c o ' ] s a l a 3 . a d d _ p e r s o n ( p e r s o n s ) p r i n t ( s a l a 3 . r o o m , s a l a 3 . c o u n t _ p e r s o n s ( ) , s a l a 3 . p e r s o n s ) meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 82
  54. Rodando Python em outros lugares Jython ports do Python para

    Java Ironpython ports do Python para .NET MicroPython para microcontroladores ESP8266 Raspberry Pi tem SO Debian Python no Processing meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 83
  55. Livros Python para Desenvolvedores Luiz Eduardo Borges Ed. Novatec meetup.com/thinkup

    ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 84
  56. Automatize Tarefas Maçantes com Python Al Sweigart Ed. Novatec Automate

    the Boring Stuff https://automatetheboringstuff.com/ meetup.com/thinkup ­ meetup.com/grupy­sp ­ Twitter: @grupysp ­ Telegram: @grupysaopaulo 88