Introdução ao Git Sábado, 11/03 a partir das 10:00 na IBM meetup.com/GrupySP rg3915.github.io/fs2w meetup.com/thinkup meetup.com/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 4
> > 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 16
pyenv by @rg3915 https://github.com/rg3915/djangoexperience/wiki/Instalandoopyenv Instalando qualquer versão do Python no Linux/Mac OSX utilizando pyenv by @rafaelhenrique http://blog.abraseucodigo.com.br/instalandoqualquerversaodopythonnolinuxmacosx utilizandopyenv.html meetup.com/thinkup meetup.com/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 23
o Cmder) Editor de texto Vim Nano Gedit Atom Sublime Text Notepad ++ IDE PyCharm meetup.com/thinkup meetup.com/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 24
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 27
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 29
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 32
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 35
_ 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 37
. 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 40
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 42
, 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 43
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 45
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 47
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 48
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 50
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 51
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 52
' 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 55
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 56
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 57
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#maplambda andfilter m a p ( ) , f i l t e r ( ) , r e d u c e ( ) e z i p ( ) meetup.com/thinkup meetup.com/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 58
, ..., 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 59
, ..., 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 61
, 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 62
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 63
, ..., 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 64
( 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 65
, ..., 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 66
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 67
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 68
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 74
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 75
= = ' _ _ 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 76
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 78
= = ' _ _ 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 79
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 80
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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 81
= = ' _ _ 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/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 82
Java Ironpython ports do Python para .NET MicroPython para microcontroladores ESP8266 Raspberry Pi tem SO Debian Python no Processing meetup.com/thinkup meetup.com/grupysp Twitter: @grupysp Telegram: @grupysaopaulo 83