0% acharam este documento útil (0 voto)
3 visualizações80 páginas

Python Aula1

O documento é uma introdução à linguagem de programação Python, abordando suas características, tipos de dados, controle de fluxo, programação orientada a objetos, e conceitos fundamentais. Ele também inclui um histórico da linguagem, suas ferramentas e bibliotecas, além de exemplos práticos e exercícios. O conteúdo é dividido em aulas que cobrem desde os fundamentos até aspectos mais avançados da linguagem.

Enviado por

viriatoignacio
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações80 páginas

Python Aula1

O documento é uma introdução à linguagem de programação Python, abordando suas características, tipos de dados, controle de fluxo, programação orientada a objetos, e conceitos fundamentais. Ele também inclui um histórico da linguagem, suas ferramentas e bibliotecas, além de exemplos práticos e exercícios. O conteúdo é dividido em aulas que cobrem desde os fundamentos até aspectos mais avançados da linguagem.

Enviado por

viriatoignacio
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 80

Introdução à linguagem Python

Thiago Martins
Python
Programa (aulas 1 a 5):

1. Características gerais da linguagem, tipos fundamentais, tipos


agregados, introdução a variáveis, mutabilidade.
2. Programas, controle de fluxo. Introdução a funções. Escopo e
visibilidade de variáveis.
3. Exercícios.
4. Objetos e Classes. Métodos e atributos. Construtores. Herança.
Encapsulamento (ou falta de?). Erros e Exceções.
5. Exercícios.

2
Python
Programa (aulas 6 a 13):
6. Aspectos funcionais da linguagem. Funções como objetos. Clausuras.
Geradores. Funções de alta ordem. Exercícios.
7. Módulos e Pacotes. Exercícios.
8. Biblioteca Python: IO de arquivos, urllib.
9. Biblioteca Pyhton: JSON, CSV, Expressões Regulares. Exercícios.
10. Computação científica em Python: Numpy. Exercícios.
11. Computação científica em python Matplotlib. Exercícios.
12. Computação científica em python: Pandas.
13. Aspectos variados: mypy(?) sql(?) I/O assíncrono(?), web(?)

3
Python
Referências
Página da disciplina (em construção…)
How to Think Like a Computer Scientist: Interactive Edition por A. B.
Downey.
https://runestone.academy/runestone/books/published/thinkcspy/index.html
Documentação da versão 3 de python
https://docs.python.org/3/
Google colab
https://colab.research.google.com/

4
Python

Linguagem de alto nível


- Estruturas de controle de fluxo, programação estruturada, memória
gerenciada, etc...
Linguagem “genérica”
- Usada em comunicação, criação de conteúdo, jogos, computação
científica, etc...
Linguagem Interpretada
- Código-fonte é processado no momento de sua execução

5
Python

Linguagem de programação imperativa


… mas com suporte a construtos funcionais.
Orientada a objetos
… mas sem “radicalismos”
Simples
… mas poderosa!

6
Python

Histórico
- Criada por Guido van Rossum no Centrum Wiskunde&Informatica da
Holanda
- Primeira versão pública em 1991
- Versão 1 em 1994
- Desenvolvimento migra para Corporation for National Research Initiatives, EUA

7
Python

Histórico
- 2000: Licença GPL
- Versão 2 em 2000
- Versão 3 em 2008
Transição 2 para 3 ainda dolorosa!

8
Python

Uso

9
Python

Uso
pypl em 2024, Python vs. Java

10
Python

Uso
Escala da IEEE Spectrum em 2019

11
Python

Uso
Github (2022)

12
Python

Uso
Kdnuggets:
Data science

13
Python

Ferramentas:
interpretador CPython

14
Python

Ferramentas:
IDE’s
Spyder
Netbeans
Eclipse
VSCode...

15
Python

Ferramentas:
Jupyter notebook

16
Python

Ferramentas:
Google CoLab

Amazon SageMaker
Microsoft Azure Nobebook
...

17
Conceitos fundamentais

Instruções:
Diretrizes executadas pelo interpretador Python
e. g.: print(2+2)

Expressões:
Trechos de linguagem que possuem um valor
e. g.: 2+2

Variáveis:
Referências para objetos na memória.
e. g.: a = 2

18
Tipos de dados

Simples: Funcionais:
Numéricos: int, float, complex Funções
Boleanos: bool Geradores
Agregados Sequenciais:
string, lista, tupla
Agregados não-
Sequenciais:
Dicionários
Conjuntos
Objetos

19
Boleanos

Constantes: True, False


Operadores:

ou x or y
e x and y
não not x
Obedecem curto-circuito! (mais adiante...)

20
Dados numéricos

Construtores: int(), float(), complex()


int(1) 🡺 1
int(0.5) 🡺 0
int(“1”) 🡺 1
int(“1.4”) 🡺 Erro

21
Dados numéricos

Construtores: int(), float(), complex()


float(1) 🡺 1
float(0.5) 🡺 0.5
float(“1”) 🡺 1
float(“1.4”) 🡺 1.4
float(“j”) 🡺 Erro
complex(“1+j”) 🡺 1+i

22
Dados numéricos
soma x + y
Operadores
Aritméticos subtração x - y

multiplicação x * y
Divisões inteiras
arredondadas divisão (real) x / y
para baixo
divisão (inteira) x // y

resto da divisão x % y

Exponenciação x ** y

23
Dados numéricos

Operadores
AND x & y
bit a bit
OR x | y

NOT ~x

XOR x ^ y

Shift p/ esquerda x << y

Shift p/ direita x >> y

24
Dados numéricos

Operadores
Comparação Estritamente x < y
menor que
Menor ou igual a x <= y

Igualdade x == y

Maior ou igual a x >= y

Estritamente maior x > y


que
Diferente de x != y

25
Strings

Sintaxes para literais:


‘exemplo de cadeia’
“outro exemplo”
‘aspas duplas “dentro” de simples’
“ou simples ‘dentro’ de duplas’
Caracteres especiais:
‘\’’ ’\”’ ‘\n’ ‘\r’ ‘\b’
Múltiplas linhas:
“””a b c d
e f g h”””

26
Strings
Concatenação
‘exemplo ’ + ‘de ’ + ‘cadeia’ => ‘exemplo de cadeia’
Constantes adjacentes são concatenadas
‘exemplo ’ ‘de ’ ‘cadeia’
Acesso indexado (índice baseado em zero)
‘abc’[0] 🡺 ‘a’ ’abc’[2] 🡺 ‘c’
‘abc’[-1] 🡺 ‘c’ ’abc’[-2] 🡺 ‘b’
Slices (fatias)
‘abcdef’[1:2] 🡺 ‘bc’ ‘abcdef’[:3] 🡺 ‘abc’ ‘abcdef’[3:] 🡺
‘def’
Comprimento
len(‘abc’) 🡺 3
27
Strings
Pertencimento
‘bc’ in ‘abcde’ 🡺 True
‘ef’ in ‘abcde’ 🡺 False
Atenção! Complexidade quadrática

Comparação
‘abc’ == ‘abc’ 🡺 True
‘abc’ < ‘abd’ 🡺 True
‘abc’ < ‘baa’ 🡺 True
‘ab’ < ‘abc’ 🡺 True
‘’ < ‘abc’ 🡺 True

28
Listas

Tipo sequencial agregado


[1, 2, 3] [0.5, 0.6, 0.7]
Tipo heterogêneo(!)
[1, 1.5, 2] [1, ‘dois’] [1, [1, 2]]
Endereçável com índice baseado em zero
[1, 1.5, 2][0] 🡺 1 [1, 1.5, 2][1] 🡺 1.5
Esta sintaxe de endereçamento por [] vale para diversos
tipos.

29
Listas

Comprimento
len([1, 2, 3]) 🡺 3
Pertencimento:
1 in [1, 2, 3] 🡺 True 4 in [1, 2, 3] 🡺 False
Concatenação
[1, 2, 3]+[4, 5, 6] 🡺 [1, 2, 3, 4, 5, 6]

30
Tuplas

Tipo sequencial agregado


(1, 2, 3) (0.5, 0.6, 0.7)
Tipo heterogêneo(!)
(1, 1.5, 2) (1, ‘dois’)
Endereçável com índice baseado em zero
(1, 1.5, 2)[0] 🡺 1 (1, 1.5, 2)[1] 🡺 1.5

31
Tuplas

Comprimento
len((1, 2, 3)) 🡺 3
Pertencimento:
1 in (1, 2, 3) 🡺 True4 in (1, 2, 3) 🡺 False
Concatenação
(1, 2, 3)+(4, 5, 6) 🡺 (1, 2, 3, 4, 5, 6)

Qual a diferença para Listas???

32
Variáveis e objetos

Toda variável é uma referência a um objeto do ambiente


a = 1 -Variável a aponta agora para um inteiro na memória
a+1 🡺 2
a = “dois” -Variável a aponta agora para uma string
b = a -Variável b aponta agora para o mesmo objeto apontado
por a.
Nota-se que o significado de “=” é distinto do normalmente usado na
matemática.

a = a + 1 ????
Típico de linguagens imperativas

33
Variáveis e objetos

Toda variável é uma referência a um objeto do ambiente


a = 1 -Variável a aponta agora para um inteiro na memória
a+1 🡺 2
a = “dois” -Variável a aponta agora para uma string
b = a -Variável b aponta agora para o mesmo objeto apontado
por a.
Nota-se que o significado de “=” é distinto do normalmente usado na
matemática.

a = a + 1 ????
Típico de linguagens imperativas

34
Variáveis e objetos

Atribuição composta
a += 1 o mesmo que* a = a + 1
a -= 1 o mesmo que* a = a – 1
a *= 2 o mesmo que* a = a + 2
/= %= //= **=...
Atribuição simultanea
a, b = 1, 2 -a aponta para 1, b para 2
a, b = b, a -Troca as referências

*quase sempre (vide objetos mutáveis adiante)

35
Variáveis e objetos

Variáves em Python têm um tipo: a referência


- Mas esta pode apontar para qualquer tipo de objeto...
Cada elemento de uma lista ou tupla é na verdade uma referência
Operador type: recupera o tipo de um objeto
type(“abc”) 🡺 Class str
a = 1
type(a) 🡺 Class int
a = [1, 2]
type(a) 🡺 Class list

36
Variáveis e objetos

Objetos e identidade
a = 1000
b = a
Operador is: testa se duas referências apontam para o mesmo objeto
a is b 🡺 True
Isso é diferente da comparação
Resultados de
a = 10000
a == b
b = a – 1
a is b
b += 1

37
Objetos e mutabilidade

Se cada objeto tem uma identidade única...


a = 10000
b = a
a = a + 1
b is a 🡺 False
É correto dizer que o inteiro em a foi incrementado?

38
Objetos e mutabilidade

Inteiros em python são imutáveis!!!


a = a + 1
a expressão (a + 1) do lado direito da atribuição cria um novo objeto!
A maioria dos tipos básicos em Python são imutáveis
a = “123”
a[2] = “4” ERRO!
a = (1, 2, 3)
a[2] = 4 ERRO!
Strings, floats, complexos, tuplas são imutáveis.

39
Objetos e mutabilidade

Mas listas não o são! É ESTA a diferença para tuplas!


a = [1, 2, 3]
a[2] = 4
a[2] 🡺 4
Elementos podem ser acrescentados ou removidos de
listas!
a = [1, 2, 3]
del a[1]
a 🡺 [1,3]

40
Listas como pilhas

Adicionando elementos ao final da lista:


a = []
a.append(1)
a.append(2)
a.append(3)
E removendo...
a.pop() 🡺 3
a.pop() 🡺 2
a.pop() 🡺 1

41
Objetos e mutabilidade

Do mesmo modo, cada elemento de uma tupla é uma


referência.
Embora as referências sejam imutáveis, os objetos para os
quais elas apontam podem não sê-lo!
a = [1,2,3]
b = (a, 4)
b 🡺 ([1,2,3],4]
del a[0]
b 🡺 ([2,3],4]

42
Objetos e mutabilidade

ATENÇÃO!!!!!
Variáveis são sempre referências para objetos!
Em se tratando de objetos mutáveis, isso pode levar a
comportamentos não-intuitivos! (aliasing)
a = [1, 2, 3]
b = a
b.append(4)
a 🡺 [1,2,3,4] !!!!!!!
Pois a e b apontam para o mesmo objeto...

43
Objetos e mutabilidade

Vários operadores produzem um novo objeto


a = [1,2,3]
b = a[:]
b is a 🡺 False
a = [1, 2, 3]
b = a
a = a + [4, 5, 6]
b is a 🡺 False

44
Objetos e mutabilidade

Vários operadores produzem um novo objeto


… mas atribuição composta não!
a = [1, 2, 3]
a = [1, 2, 3]
b = a
b = a
a += [4, 5, 6]
a = a + [4, 5, 6]
b is a 🡺 True
b is a 🡺 False

45
Sets (Conjuntos)

Tipo agregado não endereçável


{1, 2, 3} {0.5, 0.6, 0.7}
Tipo heterogêneo (mas...)
{1, 1.5, 2} {1, ‘dois’} {1, (1, 2)}
Só admite tipos com hash imutável
{1, [1, 2]} ERRO!
{1, {1, 2}} ERRO!
Sets são mutáveis (a versão imutável é frozenset)

46
Sets (Conjuntos)

Tamanho
len({1, 2, 3}) 🡺 3
Pertencimento
1 in {1, 2, 3}) 🡺 True 4 in {1, 2, 3}) 🡺 False
Insere novos elementos
a={1, 2, 3}
a.add(4)
a 🡺 {1, 2, 3, 4}

47
Sets (Conjuntos)

Remove elementos (se presentes)


a={1, 2, 3}
a.discard(3)
a 🡺 {1, 2}
a.discard(4)
A 🡺 {1, 2}

48
Sets (Conjuntos)

Copia conjuntos
a = a.copy()
a.discard(3)
a 🡺 {1, 2}
a.discard(4)
A 🡺 {1, 2}

49
Dados numéricos

contém x in y
Operadores
igualdade x == y

subconjunto x <= y

subconjunto estrito x < y

Intersecção x & y

União x | y

diferença x - y

diferença simétrica x ** y

50
Sets (Conjuntos)

Copia conjuntos
b = a.copy()
b is a 🡺 False
Incorpora um conjunto
a = {1, 2, 3}
a.update({0,3,4}
A 🡺 {0,1,2,3}
Remove elementos pertencentes a um conjunto
a = {1, 2, 3}
a.difference_update({0,3,4}
A 🡺 {1,2}
51
Dicionários

Tipo agregado endereçável por valores arbitrários (mas...)


{1:2, 2:3, 3:4}[1] 🡺 2
{“um”:1, “dois”:2, “três”:3}[“dois”] 🡺 2
Sintaxe { chave : variável,... }
Só admite chaves com hash imutável
{[1,2]:3} ERRO!
Mas as variáveis podem ser alteradas!
a={1:2, 2:3, 3:4}
a[1]=0
a 🡺 {1:0, 2:3, 3:4}

52
Dicionários

Tipo agregado endereçável por valores arbitrários (mas...)


{1:2, 2:3, 3:4}[1] 🡺 2
{“um”:1, “dois”:2, “três”:3}[“dois”] 🡺 2
Sintaxe { chave : variável,... }
Só admite chaves com hash imutável
{[1,2]:3} ERRO!
Mas as variáveis podem ser alteradas!
a={1:2, 2:3, 3:4}
a[1]=0
a 🡺 {1:0, 2:3, 3:4}

53
Dicionários

Se uma entrada não existe, a atribuição cria uma nova


a={1:2, 2:3, 3:4}
a[4] = 5
a 🡺 {1:2, 2:3, 3:4, 4:5}
Remoção de uma entrada:
del a[1]
a 🡺 {2:3, 3:4, 4:5}
Tamanho:
len(a) 🡺 3
Verifica a existência de uma chave:
1 in a 🡺 False
4 in a 🡺 True

54
Programação em Python

Um programa é uma sequência de instruções


# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))
# Para este algoritmo é necessário que a>b
if a < b:
a, b = b, a
if b<=0:
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))

55
Programação em Python

Execução:
Inserir o conteúdo em um arquivo .py:

thiago@betelgeuse:~$ cat > programa.py


# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))
# Para este algoritmo é necessário que a>b
if a < b:
a, b = b, a
if b<=0:
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))
thiago@betelgeuse:~$

56
Programação em Python

Execução:
Invocar o interpretador:

thiago@betelgeuse:~$ python3 programa.py


Primeiro número: 125
Segundo número: 75
O máximo divisor comum é:25
thiago@betelgeuse:~$

57
Programação em Python

Execução:
Em ambientes -ux o próprio script pode ser executado diretamente!

58
Programação em Python

Execução:
Em ambientes -ux o próprio script pode ser executado diretamente!

59
Programação em Python

Execução:
Em ambientes -ux o próprio script pode ser executado diretamente!

thiago@betelgeuse:~$ ./programa.py
Primeiro número: 563
Segundo número: 221
O máximo divisor comum é:1
thiago@betelgeuse:~$

60
Programação em Python

Execução:
É possível inserir programas em células do jupyter:

61
Programação em Python

Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))
# Para este algoritmo é necessário que a>b
if a < b:
a, b = b, a
if b<=0:
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))

62
Programação em Python

Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: ")) Comentários
# Para este algoritmo é necessário que a>b
(ignorados pelo
if a < b:
a, b = b, a interpretador)
if b<=0:
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))

63
Programação em Python

Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: ")) Chamadas a funções
# Para este algoritmo é necessário que a>b
(subprogramas)
if a < b:
a, b = b, a
if b<=0:
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))

64
Programação em Python

Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))
# Para este algoritmo é necessário que a>b
if a < b:
Construtores de objetos
a, b = b, a
if b<=0:
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))

65
Programação em Python

Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))
# Para este algoritmo é necessário que a>b
if a < b:
Controle de fluxo
a, b = b, a
if b<=0:
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))

66
Programação em Python

Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))
# Para este algoritmo é necessário que a>b
if a < b:
Blocos delimitados por
a, b = b, a
if b<=0: indentação
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))

67
Programação em Python

Elementos do programa
# Este programa calcula o máximo divisor comum pelo alg. de euclides
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))
# Para este algoritmo é necessário que a>b
if a < b:
Blocos delimitados por
a, b = b, a
if b<=0: indentação
print("Os números devem ser positivos")
else:
while b!=0:
a, b = b, a % b
print("O máximo divisor comum é:" + str(a))

68
Comentários

São marcados pelo caractere # e vão até o final da linha


# Inicializa o valor de a
a = 1
Podem se seguir a instruções
a = 1 # Inicializa o valor de a
Atenção! Docstrings não são comentários
“”” Isso é uma docstring ”””
a = 1

69
Controle de fluxo

if... elif… else


if <condição 1>:
<bloco 1>
elif <condição 2>:
<bloco 2>
elif <condição 3>:
<bloco 3>
else
<bloco alternativo>

70
Controle de fluxo

while
while <condição>
<bloco>

Executa o bloco enquanto a


condição for verdadeira.

71
Controle de fluxo
for
for <variável> in <coleção enumerável>
<bloco>

Executa o bloco atribuindo à variável valores sucessivos da


coleção
ex:
a = 0
for i in [1, 2, 3]
a += i
print(a)

72
Controle de fluxo
for e range
A função range é particularmente apropriada para o
laço for:
a = 0
for i in range(3)
a += i
print(a)

73
Controle de fluxo
for e range
range(n) Enumera os inteiros de 0 a n-1
range(n,m) Enumera os inteiros de n a m-1
range(n,m,s)
Enumera os inteiros de n, n+2s, n+3s… até o maior
valor de n+ks < m

74
Controle de fluxo
for e range
range(n) Enumera os inteiros de 0 a n-1
range(n,m) Enumera os inteiros de n a m-1
range(n,m,s)
Enumera os inteiros de n, n+2s, n+3s… até o maior
valor de n+ks < m

75
Controle de fluxo
break, continue, pass
break força a saída imediata do bloco.

# Procura uma posição em a igual a b


for i in range(len(a)):
if b == a[i]:
break
continue força o encerramento imediato da execução atual do
bloco

76
Chamadas a funções/métodos

“Funções” em python são distintas do conceito


matemático (verdade para toda linguagem imperativa
estruturada)
a = iter([1, 2, 3, 4, 5])
next(a) 🡺 1
next(a) 🡺 2
next(a) 🡺 3
O antigo termo “subprograma” evita esta confusão, mas não é mais usual.

77
Python

Linguagem de programação imperativa


… mas com suporte a construtos funcionais.
class program {
Orientada a objetos Public static main(String args[]) {
System.out.println(“Hello World!”);
… mas sem “radicalismos”
}
}
Simples “Hello World” em Java
… mas poderosa!
print(“Hello World!\n”)
“Hello World” em Python

78
Python
#include <string.h>
#include <memory.h>
Linguagem de programação imperativa
#define ERR_OK 0
… mas
#define com 1suporte
ERR_ARG a construtos funcionais.
Orientada a objetos
int remove_elemento(int **vetor, unsigned *tamanho, unsigned posicao) {
if(posicao >= tamanho) return ERR_ARG;
… mas sem< “radicalismos”
if(posicao tamanho – 1)
memmove(*vetor+posicao, *vetor+posicao+1, tamanho–posicao–1);
Simples
*tamanho--;
*vetor = realloc(*vetor, *tamanho);
return ERR_OK;
}
… mas poderosa!
Eliminar uma posição de vetor em C

def remove_elemento(vetor, posicao):


del vetor[posicao]
Eliminar uma posição de vetor em Python
79
Python

Linguagem
a = 1
de programação imperativa
for i in range(2,10):
a = a * i
… mas com suporte a construtos funcionais.
print(a)

Calcula 10! (estilo imperativo)

from functools import reduce


from operator import mul
print(reduce(mul,range(1,10)))

Calcula 10! (estilo funcional)

80

Você também pode gostar