Apresentação utilizada no treinamento com duração de 10 horas para um grupo de colaboradores da Teltec Solutions - http://teltecsolutions.com.br.
O material de apoio contém exemplos, exercícios e soluções, e pode ser encontrado em https://github.com/jweyrich/aprendendo-a-programar-com-python
3. Entender a composição de um programa;
Entender o fluxo de execução de um programa;
Aprender os conceitos básicos da programação;
Compreender as vantagens de cada tipo de variável
(especificamente no Python);
Identificar necessidades de repetição;
Exercitar a lógica;
Objetivos
4. O que é uma linguagem?
Padronização da
comunicação.
A linguagem escrita
é formada por
símbolos/caracteres
e possui regras.
5. História do Python
- Monty Python! Grupo de humoristas ingleses;
- Criada por Guido van Rossum em 1989;
- Publicada em 1991 - versão 0.9.0;
- Criada para substituir a linguagem ABC, usada no Amoeba
OS (SO distribuído criado por Andrew Tanenbaum);
- Baseada na linguagem ABC, com parte da sintaxe derivada
do C, Haskell, Icon, Modula-3, e Perl;
- Linguagem de propósito geral de alto nível (OO,
imperativo, funcional, prodedural);
- Uma das linguagens mais utilizadas no mundo;
6. Por que usar uma linguagem de programação?
Para dizer ao computador ou dispositivo como executar
uma tarefa.
Como fazemos isto?
Através de um programa/software que contém dados e
instruções.
7. Como o computador entende a linguagem?
$ python programa.py
Executa o interpretador Python que lê todas
instruções do arquivo (script) passado por parâmetro,
compila e gera um arquivo .pyc ou .pyo (otimizado), e
executa o programa.
O programa é executado em ordem (fluxo de execução),
de cima para baixo, linha a linha, instrução por
instrução.
8. Acesso ao laboratório
Alunos de 1 a 20:
ssh alunoX@192.168.254.53 Senha: python
Primeiro acesso : screen –S alunoX
Próximos acessos: screen -x
Executando o interpretador interativo do Python 3:
python3
Descobrindo a versão do Python:
import sys; print(sys.version)
9. Python – Hashbang (shebang)
#!/usr/bin/env python3
print('Olá mundo!')
O hashbang é respeitado somente se o programa for
executado sem informar o interpretador explicitamente.
Por exemplo:
./script.py # Ao invés de: python script.py
10. Python – Encoding dos arquivos
No Python 3 o encoding padrão é UTF-8. No Python 2, era
necessário adicionar uma linha chamada magic comment
informando o encoding. O interpretador identifica ela nas
2 primeiras linhas do arquivo. Por exemplo:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print('Olá mundo!')
12. Python – Variáveis
Reserva um espaço na memória para armazenar um
dado/valor de um determinado tipo, e o associa a um
nome.
var1 = 5
var2 = 10
var3 = var1 * var2
13. Python – Variáveis
Restrições de nomenclatura
- Somente letras, números, underscore;
- Não pode iniciar com número;
- Não pode ser uma palavra reservada:
and, as, assert, break, class, continue, def, del,
elif, else, except, exec, finally, for, from,
global, if, import, in, is, lambda, not, or, pass,
print, raise, return, try, while, with, yield
14. Python – Variáveis
Alguns tipos importantes
str (-ing) 'Texto entre aspas', 'palavra'
bool (-ean) True ou False
int (-eger) 1, 2, 10, 5000
float 3.1415, 9.8, 1.61803398875
list [ 'palavra', True, 1, 3.1415 ]
dict { 'prop':'nome', 'tem':True }
tuple ( 'palavra', True, 1, 3.1415 )
type Tipo dos tipos :-)
15. Python – Variáveis
Tipagem dinâmica: O último valor atribuído à variável
indicará o tipo dela.
var1 = "valor" # atribuição de string
var2 = 'valor' # atribuição de string
var1 = 5 # atribuição de inteiro
var2 = 3.1337 # atribuição de float
a, b, c = 1, 2, 'teste' # múltiplas atribuições
16. Python – Variáveis
str – Tipo composto por um conjunto imutável de caracteres,
texto.
fruta = "banana"
marca = """Tesla"""
str1 = 'abc'
str2 = '''teste'''
len(fruta) # retorna o comprimento, 6
fruta[0] # retorna 'b'
fruta[2:5] # retorna 'nan'
fruta.upper() # retorna 'BANANA'
17. Python – Variáveis
bool – Verdadeiro ou falso.
var1 = True # verdadeiro
var2 = False # falso
George Boole?
Matemático Inglês autodidata que definiu o primeiro
sistema de lógica algébrica na metade do século XIX,
nomeado álgebra booliana, ou de Boole.
18. Python – Variáveis
int – Números inteiros - sem limite de bits!
var1 = 1991
var2 = 2016
NOTA: int e long eram diferentes antes do Python 3 –
a PEP 237 unificou.
* PEP: Python Enhancement Proposal
20. Python – Variáveis
constantes – ”Variáveis” não mutáveis.
Não são formalmente definidas pela linguagem, mas a
convenção é nomear variáveis utilizando apenas letras
maiúsculas.
PI = 3.141592
MAX_LENGTH = 255
OBS: Podemos contornar utilizando class properties.
21. Python – Variáveis – Objetos e valores
No exemplo abaixo, a e b apontam para a mesma string?
a = 'banana'
b = 'banana'
No primeiro caso, a e b se referem a duas coisas
diferentes com o mesmo valor.
No segundo caso, elas se referem à mesma coisa.
22. Python – Variáveis – Objetos e valores
Todo objeto possui um identificador único que pode
ser obtido com a função id().
Se 2 objetos possuem o mesmo identificador, significa
que apontam para (referenciam) o mesmo valor.
>>> id(a)
135044008
>>> id(b)
135044008
23. Python – Variáveis – Objetos e valores
Listas se comportam diferente:
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> id(a)
135045528
>>> id(b)
135041704
24. Python – Variáveis – Objetos e valores
Referências, apelidos (aliases)
>>> a = [1, 2, 3]
>>> b = a
25. Python – Escopo
Global
Variáveis criadas fora do escopo de qualquer
função/classe são criadas no escopo global.
O valor das variáveis globais é "esquecido" quando
o programa termina.
26. Python – Escopo
Local
Variáveis criadas dentro do escopo de funções ou
classes tem escopo local.
O valor das variáveis locais é "esquecido”
automaticamente quando a função termina, ou quando o
interpretador identifica que o objeto em questão não
está mais sendo utilizado - neste caso, pode ser
forçado via gc.collect().
27. Python – Indentação
Recuo do texto em relação a margem.
No caso específico do Python, é determinante para a
definição do escopo de um bloco de código.
28. Python – Indentação
def teste():
'''retorna um número'''
my_int = 12
return my_int
print(teste())
Causa o seguinte erro:
IndentationError: expected an indented block
34. Python – Operadores
Operadores são utilizados em expressões. Os tipos são:
- Aritméticos
- Atribuição
- Lógicos
- Bitwise
- Comparação
- Membership (filiação?)
- Identity (identidade)
35. Python – Operadores – Aritméticos
Soma : a + b, a + 2, 100 + 20
Subtração : a – b, a - 2, 100 - 20
Multiplicação : a * b, a * 2, 100 * 20
Divisão : a / b, a / 2, 100 / 20
Módulo* : a % b, a % 2, 100 % 2
Divisão floor*: a // b, a // 2, 100 // 2
Exponenciação : a ** b, a ** 2, 100 ** 3
* Módulo é o resto da divisão. Exemplo: 3 % 2 == 1.
* Divisão floor é o quociente inteiro da divisão, sem
decimais. Exemplo: 9 // 2 == 4
36. Python – Operadores – Aritméticos
Os operadores de soma (+) e ”módulo” (%) podem ser utilizados
com strings também. O operador de módulo para strings tem outro
nome, operador de formatação de string.
var1 = 'abc' + 'def' # soma de 2 strings literais
var2 = var1 + var1 # soma de 2 variáveis do tipo str
var3 = 'Teste ' + var1 # soma de 1 variável do tipo str e
uma string literal.
var3 = 'Teste %d' % 123 # formata a string.
Como o tipo str é imutável, uma nova str é criada em cada
operação.
37. Python – Operadores – Atribuição
Como armazenar um valor em uma variável?
a = b
Atribui o valor do operando da direita ao operando da
esquerda.
O operador de atribuição requer que o operando da
esquerda seja uma variável.
38. Python – Operadores – Atribuição
No Python, especificamente, é possível realizar
múltiplas atribuições utilizando um único operador de
atribuição:
a, b = x, y
(a, b) = x, y
a, b, c = x, y, z
a, (b, c) = [x, [y, z]]
39. Python – Operadores – Atribuição
Existem outros operadores de atribuição:
a = a + b a = a / b a = a // b
a += b a /= b a //= b
a = a – b a = a % b
a -= b a %= b
a = a * b a = a ** b
a *= b a **= b
40. Python – Operadores – Lógicos
Lembram do tipo bool? True e False?
- Tabela verdade (1922);
- Mapa de Karnaugh (1952), utilizado para simplificar
uma equaçao lógica;
- Diagrama de Venn (século XIX), utilizado para
simbolizar graficamente propriedades, axiomas, e
problemas relativos aos conjuntos;
42. Python – Operadores – Lógicos
Tabela verdade
Conjunção
A B A and B
V V V
V F F
F V F
F F F
Disjunção
A B A or B
V V V
V F V
F V V
F F F
Disjunção exclusiva
A B A xor B
V V F
V F V
F V V
F F F
Negação da
disjunção
A B A nor B
V V F
V F F
F V F
F F V
Negação
A not A A
V F
F V
43. Python – Operadores – Bitwise
& binary and
| binary or
^ binary xor
~ binary not
>> binary right shift
<< binary left shift
DICA: bin(numero) = representação binária
44. Python – Operadores – Comparação
< menor que
> maior que
<= menor ou igual a
>= maior ou igual a
== igual a
!= diferente de
45. Python – Operadores – Membership?
in True se o valor está presente numa
sequência, False caso contrário (x in y)
not in False se o valor está presente numa
sequência, True caso contrário
(x not in y)
46. Python – Operadores - Identity
is True se os operandos referenciam o mesmo
objeto, False caso contrário
(x is y, id(x) equals id(y))
is not False se os operandos referenciam o mesmo
objeto, True caso contrário
(x is not y, id(x) not equal id(y))
47. Python – Precedência dos operadores
Ordem na qual os operadores são aplicados aos
operandos, a fim de evitar ambiguidades.
48. Python – Precedência dos operadores
** Exponentiation
~ + - Complement, unary plus and minus
* / % // Multiply, divide, modulo, floor div
+ - Addition and subtraction
>> << Bitwise right shift, and left shift
& Bitwise AND
^ | Bitwise XOR and OR
<= < > >= Comparison
<> == != Equality
= %= /= //= -= += *= **= Assignment
is is not Identify
in not in Membership
not or and Logical
53. Python – Listas
# Criando
# vazia
lista = []
lista = list()
# contendo números de 0 a 29
lista = list(range(30))
# contendo números de 5 a 29
lista = list(range(5, 30))
# contendo números múltiplos de 5 entre 0 e 29
lista = list(range(0, 30, 5))
55. Python – Listas
# Adicionando itens
lista.append(31)
# Removendo itens
lista.remove(5)
lista.pop(i)
del lista[0]
del lista[2:4]
56. Python – Listas
# Acessando itens
lista[0], lista[1], etc.
lista[4-2] # Qual índice será acessado?
lista[-1] # Qual índice será acessado?
lista[-2] # Qual índice será acessado?
# Alterando itens
lista[0] = 1000
57. Python – Listas
# Tamanho, comprimento
len(lista) # retorna o # de itens na lista
# Ordenando
sorted(lista) # retorna uma nova lista ordenada
lista.sort() # muda a própria lista
58. Python – Listas
# Testando existência do item
10 in lista # retorna True ou False
# Repartindo
lista[start:end] # items de start até end-1
lista[start:] # items de start até o fim
lista[:end] # items do início até end-1
lista[:] # uma cópia da lista inteira
61. Python – Dicionários
# Criando
# vazio
d = dict()
d = {}
# contendo propriedades
d = {'name': 'value'}
d = {'x': 1, 'y': 2}
# usando uma lista de tuples
d = dict([('x', 1), ('y', 2)])
64. Python – Dicionários
Outras operações:
len(d) # Retorna tamanho, compimento
d.keys() # Retorna chaves (nome das propriedades)
d.values() # Retorna valores (das propriedades)
d.items() # Retorna lista de tuplas de chave-valor
'nome' in d # A propriedade existe? True ou False
65. Python – Tuplas
Lista de valores separados por vírgula, similar a
lista, porém imutável.
66. Python – Tuplas
# Criando
t = 'a', 'b', 'c', 'd', 'e'
t = ('a', 'b', 'c', 'd', 'e')
t = ('a',) # Note a vírgula no final
Sem a vírgula, o interpretador entenderá que é apenas
uma string entre parênteses.
67. Python – Tuplas
# Imprimindo
print(t)
# Tamanho, comprimento
len(t) # retorna o # de itens na tupla
68. Python – Tuplas
# Alterando elementos
t[0] = 'x'
>>> TypeError: 'tuple' object does not support item
assignment
# Removendo elementos
del t[0]
>>> TypeError: 'tuple' object does not support item
deletion
69. Python – Tuplas
# Testando existência do item
'a' in t # retorna True ou False
# Repartindo
t[start:end] # items de start até end-1
t[start:] # items de start até o fim
t[:end] # items do início até end-1
t[:] # uma cópia da lista inteira
70. Python – Tuplas
# Trocando valores (sem tupla)
temp = a
a = b
b = temp
# Trocando valores usando atribuição de tupla
a, b = b, a
71. Python – Condições e condicionais
Condições podem ser verdadeiras ou falsas. Por
exemplo:
A expressão x > 10 é verdadeira se o valor da
variável x for maior que 10, caso contrário a
expressão é falsa.
72. Python – Condições e condicionais
Condicionais dependem de condições, portanto elas
permitem que você faça uma coisa ou outra, dependendo
do resultado da condição. A condicional mais comum é
a palavra-chave if. Por exemplo:
if x > 10:
print('maior que 10')
73. Python – Condições e condicionais
As vezes você quer fazer uma coisa quando a condição
é verdadeira, e outra coisa quando ela é falsa. A
palavra-chave else permite que você faça isto.
Exemplo:
if x > 10:
print('maior que 10')
else:
print('menor que 10')
74. Python – Condições e condicionais
Condicionais aninhados:
if x == y:
print(x, 'e', y, 'são iguais')
else:
if x < y:
print(x, 'é menor que', y)
else:
print(x, 'é maior que', y)
75. Python – Condições e condicionais
Também é possível testar várias condições, e fazer uma
coisa somente para a primeira condição que for verdadeira.
Para isto usamos a palavra-chave elif (abrev de else if).
Exemplo:
if x == y:
print(x, 'e', y, 'são iguais')
elif x < y:
print(x, 'é menor que', y)
else:
print(x, 'é maior que', y)
76. Python – Condições e condicionais
Operador ternário (desde Python 2.5)
a if cond else b
Testa a condição cond, e retorna a ou b, dependendo
do resultado da condição.
resultado = 'maior' if x > 10 else 'menor'
print('x é %s que 10' % resultado)
77. Python – Condições e condicionais
import time
agora = time.localtime()
hora = agora.tm_hour
if hora < 7: print('dormindo')
elif hora < 8: print('indo trabalhar')
elif hora < 13 and hora > 12: print('almoçando')
elif hora < 18: print('trabalhando')
elif hora < 19: print('voltando pra casa')
elif hora < 20: print('jantando')
elif hora < 22: print('descansando')
else: print('dormindo')
78. Python – Loops (laços)
É comum a necessidade de repetir uma ou mais
instruções um determinado número de vezes. Para isto,
podemos usar a palavra-chave while. Exemplo:
lista = [0,10,20,30,40,50]
indice = 0
while indice < len(lista):
print('num = %d' % lista[indice])
indice += 1
79. Python – Loops (laços)
Utilizar um índice para percorrer um conjunto de valores
é tão comum que o Python oferece uma alternativa
simplificada, as palavras-chave for-in. Exemplo:
lista = [0,10,20,30,40,50]
for num in lista:
print('num = %d' % num)
for i, num in enumerate(lista):
print(’lista[%d] = %d' % (i, num))
80. Python – Loops (laços)
Outro exemplo:
prefixos = 'JKLMNOPQ'
sufixo = 'ython'
for letra in prefixos:
print(letra + sufixo)
81. Python – Funções
Função é uma sequência nomeada de instruções ou comandos
que realizam uma operação desejada.
- Deve ser definida/declarada ANTES de ser utilizada,
chamada, invocada;
- Pode ser chamada repetidamente;
- Pode chamar outra função (composição), inclusive a si
mesma (recursividade);
- Pode receber argumentos (parâmetros) ou não;
- Pode retornar um resultado ou não;
82. Python – Funções
- A definição de uma função não altera o fluxo de execução do
programa;
- Os comandos dentro da função não são executados até a
função ser chamada;
- Chamadas de função são como um desvio no fluxo de execução.
Em vez de ir para o próximo comando, o fluxo salta para a
primeira linha da função chamada, executa todos os comandos
lá e então volta atrás para retomar de onde havia deixado.
83. Python – Funções
Como declarar uma função?
def NOME():
COMANDOS # corpo da função, function’s body
def NOME():
pass # função vazia, sem implementação
85. Python – Funções
Como chamar (invocar, executar) uma função?
OlaMundo()
OlaNovamente()
86. Python – Funções – Pergunta (global1.py)
No programa abaixo, qual valor será mostrado na tela?
texto = 'INICIAL'
def funcao():
texto = 'MUDOU’
funcao()
print(texto)
87. Python – Funções – Pergunta (global1.py)
A resposta é INICIAL.
Mesmo utilizando a mesma nomenclatura, neste caso a
atribuição cria uma variável no escopo local.
De outra forma teríamos problemas inesperados
causados por funções alterando valores de variáveis
globais.
88. Python – global (global2.py)
Para alterarmos variáveis globais, utilizamos a palavra-
chave global. É necessário utilizar global somente se
houver atribuição. Exemplo:
texto = 'INICIAL'
def funcao():
# Referencia global – não será criada localmente
global texto
texto = 'MUDOU’
funcao()
print(texto) # Imprime MUDOU
89. Python – Funções – Pergunta (escopo1.py)
O programa abaixo funciona e mostra 'INICIAL' na
tela?
def funcao():
print(val)
val = 'INICIAL'
funcao()
90. Python – Funções – Pergunta (escopo1.py)
A resposta é SIM.
A função é chamada somente APÓS a inicialização da
variável, portanto o valor dela será mostrado
corretamente.
91. Python – Funções – Pergunta (escopo2.py)
Se a função fosse chamada antes da inicialização da
variável, receberíamos um erro NameError, pois a
variável não existe em nenhum escopo acessível.
Exemplo:
def funcao():
print(val)
funcao()
val = 'INICIAL'
92. Python – Funções – Pergunta (escopo3.py)
E neste caso, o que é mostrado na tela?
def funcao():
print(texto)
texto = 'Eu amo São Paulo!'
print(texto)
texto = 'Eu amo Floripa!'
funcao()
93. Python – Funções – Pergunta (escopo3.py)
Um erro!
UnboundLocalError: local variable 'texto' referenced
before assignment
Um valor é atribuído à variável texto dentro da função,
(sem a palavra-chave global), portanto ela é criada no
escopo local. O erro ocorre pois tentamos imprimir seu
valor antes de atribuí-lo.
94. Python – Funções - Argumentos
Argumentos são valores passados para a função, e
podem influenciar no fluxo de execução, ou
comportamento, da função.
Argumentos tem escopo LOCAL.
95. Python – Funções - Argumentos
Como declarar uma função com argumentos?
def NOME(ARGUMENTOS):
pass
def NOME(arg1, arg2, arg3):
pass
97. Python – Funções - Retorno
O resultado de uma função é chamado de valor de
retorno.
A palavra chave return permite que uma função retorne
valores, e também permite terminar a execução de uma
função antes de ela alcançar seu fim. Um uso comum
para isto é ao detectar uma condição de erro.
98. Python – Funções - Retorno
Exemplo de retorno precoce (antecipado):
def calculaPotencia(num, pot):
if num <= 0 or pot <= 0:
print('Somente números positivos')
return
return num ** pot
106. Python – Módulos
Módulo é um arquivo .py contendo código Python. Ele serve
principalmente para:
- Dividir código extenso;
- Facilitar a manutenção do código;
- Facilitar a reutilização de código entre diferentes
partes do programa;
Para que o módulo A tenha visibilidade sobre as definições
e declarações contidas no módulo B, precisamos importar o
módulo B no módulo A.
107. Python – Módulos
Para fazermos isto utilizamos a palavra-chave import, ou from-
import. O nome do módulo é o nome do arquivo sem a extensão .py.
Exemplos:
import modulo # Importa o módulo
# Importa todas definições/declarações contidas no módulo
from modulo import * # Evite, pois POLUI o namespace!
# Importa só a definição contida no módulo
from modulo import definicao
# Importa o módulo do diretório do script atual
from . import modulo
# Importa o módulo do diretório pai do script atual
from .. import modulo
108. Python – Module Search Path (sys.path)
Quando um módulo (teste1) é importado, o interpretador primeiro
procura por um módulo built-in com este nome. Se ele não
encontrar, então ele procura por um arquivo com este nome
(teste1.py) em uma lista de diretórios presentes na variável
sys.path. Ela é inicializada em ordem por:
- Diretório contendo o script sendo executado, ou o diretório
atual (caso não esteja executando um script);
- Variável de ambiente chamada PYTHONPATH;
- Diretórios padrões da instalação do interpretador;
import sys; print('n'.join(sys.path))
109. Python – Pacotes
Pacotes são uma forma de estruturar os módulos e organizá-los em
namespaces. Exemplo:
import pacote # Importa o pacote inteiro
import pacote.modulo # Importa o módulo
from pacote import modulo # Importa o módulo
# Importa todas definições/declarações contidas no módulo
from pacote.modulo import * # Evite, pois POLUI o namespace!
# Importa só a definição contida no módulo
from pacote.modulo import definicao
110. Python – Pacotes
O nome de módulo A.B indica um sub-módulo com nome B contido
dentro do pacote com nome A. Exemplo:
src/
|-- main.py # Módulo main
|-- A/ # Pacote A
|-- __init__.py # Veremos a seguir
|-- B.py # Sub-módulo B
import A.B # Importando B.py a partir de main.py
111. Python – Pacotes
O que é preciso para criar um pacote?
- Criar um diretório;
- Criar um arquivo __init__.py dentro deste diretório;
A existência desse arquivo é exigida para fazer o Python
tratar o diretório como um pacote.
Se houver código nele, será executado quando o pacote ou
qualquer um dos módulos do pacote for importado.
112. Python – The Python Standard Library
O Python vem com uma biblioteca padrão de tipos, constantes,
exceções, e módulos. Alguns destes são built-in, ou seja,
estão dentro do interpretador.
O conjunto de módulos padrão varia de acordo com a
plataforma. Por exemplo, o módulo winreg só existe em
sistemas Windows.
Podemos ver todos built-ins assim:
import builtins; dir(builtins)
113. Python – The Python Standard Library
Podemos consultar a documentação de qualquer tipo/função/etc
diretamente a partir do interpretador:
help(nome)
Podemos consultar a documentação de toda biblioteca em:
https://docs.python.org/3/library/
114. Dicas
- Syntax-highlight: Ajuda!
- Code-completion : Ajuda! Mas se você está estudando a
linguagem, pode te atrapalhar.
- IDE : Ajuda quem gosta, atrapalha quem não gosta.
- Versionamento: Se você ainda não conhece, fale comigo.
- Indentação : Use apenas tabs ou apenas espaços – Não
misture-os! E não converta a indentação
manualmente - Use um editor que faça isto.
- Nomenclaturas: Utilize nomes que descrevam a propósito.
117. Próximo(s) treinamento(s)?
1. Git – Como versionar meus projetos?
2. Python intermediário: Programação orientada a
objetos
3. Desmistificando os Certificados Digitais
118. Preparação do ambiente - Interpretador
- Python 3.x (3.0 desde 2008)
- Download em https://www.python.org/downloads/
- No Windows, adicionar ao PATH -
https://docs.python.org/3/using/windows.html-
Python 2.x
- 2.7 saiu na metade de 2010, e é o último release
da versão 2;
- Diferenças entre 2.x e 3.x -
https://docs.python.org/3/whatsnew/