Escolar Documentos
Profissional Documentos
Cultura Documentos
Engenharia de Dados
Bárbara Silveira Fraga
2022
SUMÁRIO
Capítulo 1. Introdução ao Python .......................................................................... 5
2.2. Variáveis.................................................................................................................. 13
2.3. Operadores............................................................................................................... 15
5.4. Herança.................................................................................................................... 62
2
6.1. Numpy ..................................................................................................................... 69
6.2. Pandas...................................................................................................................... 72
Glossário .................................................................................................................. 76
Referência ................................................................................................................ 80
3
1
Capítulo 1. Introdução ao Python
O objetivo deste módulo é capacitar e auxiliar profissionais com programação
em Python, apresentando as principais estruturas de dados e de lógica. O Python é
utilizado por grandes empresas, como Google, Instagram, Spotify, Netflix, Uber,
Dropbox, Pinterest, entre outras [1] e é uma das principais linguagens de programação
para o trabalho com dados.
Possui uma sintaxe simples, tornando os programas que você escreve fáceis de
ler.
– Veja: http://www.opensource.org.
5
Para escrever um código Pythonic (ou seja, um código que se refere às boas
práticas de Python) você deve se acostumar com as regras de estilo de código (PEP).
Abaixo iremos descrever o que são as PEPs.
1.1.PEP
O Python possui PEP’s (Python Enhancement Proposals) ou Propostas para
Melhoramento no Python. PEP é um documento que fornece informações para a
comunidade ou descreve um novo recurso para ou seus processos ou ambiente [4].
Qualquer um pode escrever uma PEP e a comunidade Python testa, avalia e decide se
deve ou não publicá-la.
6
Existem algumas ferramentas que verificam a qualidade do seu seu código,
como o Pythonchecker.
1.3.Como instalar?
Você pode instalar o Python “puro”, do próprio site (https://www.python.org)
ou utilizar o Anaconda, que é um gerenciador de pacotes e de ambiente e uma
distribuição Python que contém uma coleção de muitos pacotes de código aberto
(https://anaconda.org/anaconda/python).
7
Seguem os tutoriais oficiais do Anaconda e do Python que recomendamos para
a instalação do Python:
Instalação Anaconda.
1.4.Ambiente Virtual
Um conceito muito importante para utilizar o Python é o Ambiente Virtual.
Eles são essenciais para que você isole as bibliotecas que você usa para evitar conflitos
entre projetos, reduzindo a quase zero os problemas de incompatibilidades entre as
bibliotecas.
Este link explica detalhadamente como criar um ambiente virtual com conda e
virtualenv.
Modo interativo
Para executar este modo, digite python no terminal, assim que digitar este
comando, é exibido a versão do Python que está instalado. Logo em seguida, aparece o
'>>>' que indica que entramos no modo interativo do Python e basta digitar seu
código. Veja na Figura 2.
8
Figura 2 – Execução Modo Interativo.
Modo script
Este modo é utilizado para execução de códigos maiores. Supondo que você
tenha um código de 500 linhas, você teria que digitar as 500 linhas a cada execução do
programa? A resposta é não! E o modo script nos ajuda nisso.
9
Existem diversas IDEs para desenvolvimento Python. Na documentação oficial
do Python são listadas diversas. As mais utilizadas são: Spyder, PyCharm, Jupyter e VS
code.
Figura 6 – VS Code.
10
2
Capítulo 2. Variáveis, Tipos e Estruturas de Dados
Neste capítulo iremos abordar as principais estruturas de dados que você
precisa conhecer para conseguir programar em Python.
12
2.2. Variáveis
Variáveis são responsáveis por guardar valores de um programa. Esses valores
podem ser números inteiros, números decimais, textos etc. A Figura 8 ilustra as
variáveis idade e nome; “idade” armazena o valor 18 e “nome” o valor “Maria”. Isso
quer dizer que quando chamarmos a variável idade, será retornado o valor 18 e a variável
nome retornará o valor “Maria”.
Essas variáveis possuem diversos tipos. Neste momento iremos falar dos
números, textos e valores booleanos únicos, ou seja, cada variável possui um único valor
(tipos escalares). A Tabela 1 ilustra os principais tipos:
13
Figura 9 – Tipos no Python.
Uma dica importante para trabalhar bem com variáveis e ter códigos
legíveis é dar nomes semânticos as variáveis. Se uma variável vai representar
uma cidade, dê o nome de cidade. A Figura 10 apresenta o bloco 1 um código legível e
com variáveis com nomes claros. Já no bloco 2, não se tem boas definições de variáveis.
14
endereco_trabalho; email_corporativo. Essas boas práticas de nomear variáveis e outras
você encontra no PEP8.
2.3. Operadores
Os operadores são responsáveis pelas operações com os números, como somar
ou subtrair. A Tabela 2 apresenta os principais operadores utilizados na programação
Python.
15
Tabela 2 – Operadores.
16
Ordem dos Operadores
Quando uma expressão contém mais de um operador, a ordem da avaliação
depende da ordem das operações. Para operadores matemáticos, o Python segue a
convenção matemática. A ordem das operações é:
1. Parênteses: têm a precedência mais alta e podem ser usados para forçar a avaliação
de uma expressão na ordem que você quiser.
2. Exponenciação.
17
Figura 13 – Manipulando Strings (Parte 1).
18
Figura 14 – Manipulando Strings (Parte 2).
Sequências
Sequências são containers, um tipo de dado que contém outros dados. Os tipos
básicos de sequências são: listas, tuplas e range, e outro tipo de sequência que vimos
anteriormente é a string.
As sequências podem ser mutáveis, isto é, seus valores podem ser modificados,
que é o caso das listas; e elas também podem ser imutáveis, como é o caso das tuplas,
strings e ranges.
19
A Tabela 3 ilustra as operações que normalmente podemos fazer com todas as
sequências. Sequências do mesmo tipo também suportam comparações.
20
Listas
Listas são sequências mutáveis, normalmente usadas para armazenar coleções
de itens homogêneos. Elas possuem todas as operações apresentadas nas Tabelas 3 e 4.
Além disso, ela possui o método sort, que ordena a lista.
Figura 15 – Listas.
Tuplas
Tuplas são sequências imutáveis, normalmente usadas para armazenar coleções
de dados heterogêneos. As tuplas também são usadas para casos de uma sequência
imutável e dados homogêneos. Enquanto listas utilizam colchetes como delimitadores,
as tuplas usam parênteses. As tuplas possuem os métodos da Tabela 3.
21
A Figura 16 possui exemplos de manipulação da tupla. Observe que os blocos
6, 7 e 8 deram erro pois são operações exclusivas de sequências mutáveis. Além disso,
note no bloco 1 e 2 que quem define uma tupla não são os parênteses.
Figura 16 – Tuplas.
Range
O range é um tipo de sequência imutável. É comumente usado para gerar uma
sequência de números. Ele implementa as operações da Tabela 3.
22
Figura 17 – Range.
Conjuntos (Set)
Conjuntos (set) são uma coleção não ordenada que não admite elementos
duplicados. Os objetos de conjunto suportam operações matemáticas como união,
interseção, diferença e diferença simétrica.
23
Figura 18 – Set.
Dicionários
Um dicionário se parece com uma lista, mas é mais geral. Em uma lista, os
índices devem ser números inteiros; em um dicionário, eles podem ser de (quase)
qualquer tipo.
Dicionários são estruturas de chave valor, onde podemos ter diversas chaves e
cada chave terá um valor, que pode ser qualquer objeto (sequência, dicionário, conjuntos
etc.). Eles são estruturas poderosas pois acessamos os elementos pelo valor das chaves
e as chaves de um dicionário são valores únicos.
24
Figura 19 – Dicionário.
25
3
Capítulo 3. Estruturas de Lógica
Neste capítulo iremos abordar as principais estruturas de lógica para que você
consiga programar em Python.
3.1. Condicionais
Os condicionais são utilizados quando queremos executar um comando
diferente de acordo com uma lógica. Por exemplo: vamos supor que se o usuário digitou
a senha corretamente, iremos liberar o acesso, caso contrário iremos exibir uma
mensagem de erro. A Figura 20 exemplifica a situação explicada anteriormente.
Observe que o que será executado quando a condição for satisfeita está
indentado (linhas 8 e 10), se não tivesse não iria funcionar, pois ocorreria um erro de
sintaxe. Veja na Figura 21, as linhas 8 e 9 com figura, indicando erro e que, ao
executarmos o código no terminal, aparece uma mensagem informando que estávamos
com problemas de indentação. A indentação é essencial na programação Python, fique
atento no uso delas.
27
Figura 21 – Exemplo de Erro de Sintaxe.
Note que o comando if deve ter um resultado True ou False, ou seja, booleano.
Quando escrevemos na linha 7, password == senha, isso retornará True ou False. Caso
a senha digitada senha igual password, essa condição será True e ele exibirá a mensagem
da linha 8, caso contrário será a linha 10. Veja este exemplo na Figura 22.
28
Veja o exemplo na Figura 23. Na linha 7 verificamos se a senha está correta e
se o nome é o ‘admin’, caso seja o sistema será liberado completamente. Na linha 9
apenas conferimos a senha, não nos preocupamos com o nome, porque teremos uma
liberação default se a senha estiver correta. A linha 11 será executada caso não caia nem
no if, nem no elif. Note que ao final das condições temos os “:”, caso você esqueça, dará
erro de sintaxe.
Figura 23 – If/Elif/Else.
29
O for é uma estrutura muito comum e muito utilizada em Python, por sua
simplicidade e versatilidade. Ele nos permite repetir um trecho de código um número
determinado de vezes. A Figura 25 ilustra a estrutura do for.
Na linha 1 temos o trecho de código que declara loop for. Ele começa com o
uso da palavra reservada for, segue para o nome de uma variável (“numero” no nosso
caso), depois tem o uso da palavra reservada in e, por fim, recebe uma lista de elementos
(“range(0,100)” no nosso caso). Essa lista é muito importante, pois a quantidade de
repetições do for será igual ao tamanho da lista. Os elementos da lista são acessados
sequencialmente, a cada loop (ou iteração) e são inseridos dentro da variável informada.
30
É por isso que, na linha 2, imprimimos um número de cada vez. Ou seja: Para cada
elemento dentro de uma lista, execute o trecho de código abaixo.
Como podemos ver no exemplo da Figura 28, o loop while é declarado usando
a palavra reservada while e um teste condicional logo depois. A ideia é que, enquanto
esse teste condicional for verdadeiro, o código dentro do loop será executado. Isso
inclusive pode gerar problemas sérios como, por exemplo, loops infinitos, caso o teste
condicional sempre fique verdadeiro.
Para fazer um código similar ao feito no for, mas agora usando while não
fizemos muitas modificações. Na linha 1, atribuímos zero a uma variável que nos servirá
de contador (ou seja, ela vai aguardar a quantidade de loops já realizados). Na linha 2
declaramos o while e o teste condicional que utiliza a variável contador. Na linha 3
31
temos a execução do print e, por fim, na linha 4 incrementamos o valor da variável
contadora. Assim, após 100 execuções o teste condicional será falso e o while está
encerrado.
Além de for e while, que servem para criar as estruturas de repetição, temos
outras duas palavras reservadas que servem para controlar a repetição: break e continue.
Uma informação importante é que essas palavras só podem ser usadas dentro de um
while ou dentro de um for.
32
Figura 30 – Exemplo Continue.
33
4
Capítulo 4. Estruturas de Python
Neste capítulo iremos abordar as principais estruturas da linguagem para que
você consiga programar em Python.
4.1.Funções
Funções são muito úteis na programação. Uma das grandes vantagens é o fato
de não precisarmos repetir um código que faz a mesma coisa várias vezes. A função
agrupa um conjunto de instruções que podem ser reutilizadas. O Python possui várias
funções que já vimos anteriormente, como o print() e o type().
Nós também podemos criar nossas próprias funções. Por exemplo, imagine que
você precise, constantemente, gerar um gráfico para cada região do país. Para isso teria
que pegar o código que gera este gráfico e replicar 5 vezes, um para cada região. Isso
seria repetitivo e não deixaria o código limpo. Para resolver esse problema existem as
funções. Elas são responsáveis por encapsular um código, por exemplo, de “gerar um
gráfico” e, quando precisássemos de rodar o código para gerá-lo, chamamos apenas o
nome do método e não todo o código.
A Figura 31.1 ilustra a estrutura de uma função que podemos criar no Python.
Uma função no Python é definida com a palavra reservada def. Logo depois do def
temos o nome da função e entre parênteses, os parâmetros. Como essa função não tem
nenhuma ação, colocamos o termo pass, o qual simplesmente informa ao interpretador
que iremos implementar depois. O pass pode ser utilizado em qualquer bloco, por
exemplo, dentro de funções, if, while e for.
35
As funções realizam um conjunto de instruções, e depois elas podem ou não
fazer um retorno. Este retorno pode ser de um simples valor/objeto ou um conjunto de
valores e objetos.
A Figura 31.2 exemplifica uma função que calcula o valor do IMC, dado a
altura e o peso. Temos dois exemplos: Um sem retorno, a função imc e a com retorno,
imc_return. Observe que a função imc recebe o peso e a altura, calcula o IMC e dá um
print do valor com uma mensagem. Já a função imc_return, retorna apenas o valor e
inserimos a mensagem ao imprimirmos o valor retornado pela função. Para esta função
realizar o retorno ela utiliza o return, que é o responsável pelo retorno das funções.
Ambos os métodos calculam o valor do IMC, entretanto eles apresentam o resultado
diferente e o melhor uso vai depender da sua necessidade.
36
variáveis args e kwargs é apenas uma convenção, poderíamos utilizar outro nome, o que
define de fato essas variáveis é o uso dos asteriscos.
O **kwargs permite que passemos não apenas valores, mas também chaves.
Veja o exemplo da Figura 33. Observe que precisamos passar o nome do parâmetro
antes de passarmos o valor. No bloco 4 não foi passado e ele acusa o erro, pois aqui no
**kwargs é obrigatório a chave. Ele trata os parâmetros como um dicionário, então toda
manipulação que podemos fazer o kwargs é idêntica à manipulação e às restrições de
um dicionário.
A diferença entre esses comandos mágicos é que o *args espera uma tupla/lista
de argumentos e o **kwargs um dicionário com argumentos nomeados.
37
Figura 33 – Exemplo do uso do **kwargs.
Funções Lambda
A função lambda, também conhecida por função inline ou anônima, nos
permite criar funções anônimas, isto é, não precisamos usar o def para defini-la. O
código do lambda é uma única instrução, não um bloco de instruções. A estrutura da
lambda é semelhante à instrução de retorno que utilizamos no def. A Figura 34 mostra
a estrutura de uma função lambda.
Ela também pode receber parâmetros ou ser apenas uma expressão. A Figura
35 ilustra como um exemplo de uma função lambda, a função recebe um parâmetro,
38
neste caso o x e adiciona 10 ao valor recebido. Neste caso atribuímos a função lambda
a variável func.
Funções Built-in
O interpretador Python possui várias funções e tipos integrados que estão
sempre disponíveis, são conhecidos como Built-in. Eles estão listados na Figura 36.
Existem vários, iremos destacar com exemplos alguns dos mais utilizados na Seção 4.2
sobre Utilidades da Linguagem.
Para entender o que cada função built-in significa, visite este link com a
documentação do Python.
39
4.2.Utilidades da Linguagem
Nesta seção iremos apresentar alguns conceitos e comandos úteis para você
programar em Python. Algumas funções que apresentaremos são built-ins que vimos na
Figura 36.
Módulos e Pacotes
Um módulo é uma biblioteca de código. Um arquivo contendo um conjunto de
funções que você deseja incluir em seu aplicativo. Para criar um módulo basta salvar o
código desejado em um arquivo com a extensão de arquivo.py, por exemplo. Veja a
Figura 37.
Também podemos criar um apelido para chamarmos os módulos sem ser com
o nome que salvamos no arquivo py. Para isso, usamos o comando as, como pode ser
visto na Figura 39.
40
Figura 39 – Exemplo Uso do Módulo com Apelido.
Com PIP podemos instalar vários pacotes para nos ajudar na construção das
nossas aplicações em Python. Para instalar um pacote, basta abrir o terminal e digitar
pip install <nome do pacote> ou conda install <nome do pacote>. Após a instalação,
basta utilizar a biblioteca.
41
Figura 40 – Criando um ambiente virtual.
Depois que criamos um ambiente virtual, precisamos ativá-lo, vide Figura 41.
42
módulo é responsável por remover os acentos de uma string. Então nosso próximo passo
é instalar o pacote com o PIP.
43
Figura 44 – Removendo o Pacote.
Para listar os pacotes instalados, use o comando list, vide Figura 45.
Datetime
Uma data em Python não é um tipo de dado próprio, mas podemos importar
um módulo chamado datetime para trabalhar com datas como objetos. Ao trabalhar com
esses objetos é importante verificar o fuso horário utilizado. A Figura 46 mostra o uso
do datetime para pegar a data e hora corrente.
O módulo datetime tem vários métodos para manipularmos datas. Entre eles
estão as operações com datas (como somar data, diferença entre datas etc.); extrair
minutos, segundos, horas, dias, meses, anos etc. Todas as operações que podemos fazer
com as datas podem ser consultadas na própria documentação do Python, neste link.
44
Destacamos o método strftime(), que é um método para formatar datas em
strings legíveis. Por exemplo, veja a Figura 47, temos métodos que extrai o mês do ano,
a semana etc.
Map
A função map() é built-in que executa uma função especificada para cada item
em um iterável. O item é enviado para a função como um parâmetro. A sintaxe do map()
pode ser vista na Figura 48.
45
Figura 49 – Exemplo Map.
Reduce
A função reduce() executa a função especificada para cada item em um iterável
(uma lista, por exemplo) diversas vezes até que o resultado da operação seja apenas um
número. A Figura 50 ilustra a sintaxe do reduce().
46
Figura 51 – Exemplo Reduce.
Filter
A função filter() é built-in que aplica o filtro por meio de uma função e retorna
os itens filtrados, ou seja, os itens que dão True para a função. A sintaxe do filter() pode
ser vista na Figura 52.
47
A Figura 53 mostra um exemplo do filter. No bloco 1 temos a definição de uma
função para verificar se um número é par. Note que definimos uma função lambda para
este exemplo, mas não é necessário que seja lambda. No bloco 2 e 3 testamos nossa
função e verificamos que ela está funcionando. No bloco 5 aplicamos o filtro e vemos
que foi retornado um objeto iterador. Para visualizar o resultado, basta transformar para
uma lista, vide bloco 6.
Zip
A função builtin zip() retorna um objeto zip, que é um iterador de tuplas, onde
o primeiro item em cada iterador passado é emparelhado e, em seguida, o segundo item
em cada iterador passado é emparelhado etc. A Figura 54 mostra o que o zip faz com
duas listas. Ele basicamente faz a combinação das duas listas.
48
A sintaxe do zip, mostramos na Figura 55, ele basicamente recebe
sequências/objetos iteradores. Pode receber um ou vários.
49
Enumerate
A função built-in enumerate permite retornar o índice de cada valor em uma
sequência, à medida que você percorre toda sequência. Ele retorna uma tupla no formato
tupla(indice, valor). A sintaxe do enumerate está ilustrada na Figura 57.
List Comprehension
O List Comprehension permite desenvolver listas usando uma notação
diferente. É basicamente uma linha com um loop for construído dentro de []. A Figura
59 ilustra a estrutura do list comprehension.
50
Figura 59 – Estrutura List Comprehension.
4.3.Tratamento de Erros
Durante o desenvolvimento de programas, em muitos momentos nos deparamos com erros que
ocorrem durante sua execução. Isso pode ocorrer por vários motivos, tais como: usamos
uma variável de um tipo inesperado para uma função; usamos métodos de uma variável
51
quando ela ainda não foi declarada; pedimos para abrir um arquivo que não existe ou que
não está no local indicado; tentamos acessar um elemento em uma posição inexistente em
uma lista e muitos outros. A lista de possíveis erros ou exceções é vasta. Quando um trecho
de código é interrompido porque ocorreu um erro de execução, dizemos que o programa “lançou
uma exceção”. A Figura 62 ilustra um exemplo de erro.
Dessa forma, nos casos em que é possível ou até mesmo esperado de ocorrer
um erro, podemos impedir que o programa pare sua execução, tratando o erro, vide
Figura 64.
52
Figura 64 – Exemplo de tratamento de erro.
53
Figura 65 - Analisando uma exceção.
54
Dessa forma, podemos informar ao usuário que ocorreu um erro ao tentar fazer
uma divisão por zero e avisar ao usuário que um dado poderia estar corrompido. Na
linha 8, ao colocar a expressão “except ZeroDivisionError”, indicamos que erros de
divisão por zero serão tratados pelo código na linha 9. Da mesma forma, como a linha
10 indica a captura de erros do tipo “TypeError”, as linhas 11 e 12 serão responsáveis
por esse tratamento. Existe uma lista de erros e exceções prontas em Python, que pode
ser conferida para conhecimento do que pode ser colocado no except.
55
5
Capítulo 5. Orientação Objeto
Até agora, quando falamos de funções, variáveis e módulos, um conceito muito
importante ainda não foi aprofundado: a “Programação Orientada à Objeto” ou somente
“Orientação a Objeto”. Existem várias formas de programar (também chamados de
paradigmas de programação) e, em Python, encontramos as duas mais frequentes: a
forma estruturada e a forma orientada a objeto.
57
Uma conta de um banco tem várias funcionalidades: podemos realizar saque,
depósito, extrato, solicitar um cartão de crédito, solicitar aumento do limite, entre várias
outras operações. Pensando nisso, vamos criar alguns métodos para manipular a conta
do João e da Maria. A Figura 69 ilustra algumas funcionalidades que implementamos.
58
A nossa conta é um dicionário e, por isso, podemos simplesmente alterar o valor da chave saldo,
vide Figura 71. Isso é seguro em ambiente bancário? Veja bem, quando nosso saldo do
banco é alterado é porque realizamos algum saque, recebemos algum depósito ou
pagamos alguma conta. Fora isso, nosso saldo permanece o mesmo. Pensando nisso, essa
ação ilustrada na Figura 71 não é segura e não deveríamos alterar o saldo assim.
Deveríamos alterar apenas por meio dos métodos de sacar e depositar, pois é assim que
funciona na vida real e o nosso código deve refletir esta realidade. Quem vai nos ajudar
a resolver este problema é a Orientação Objeto.
Em Python, TUDO é objeto. O list, tuple, dict, int, float, string que vimos
também são objetos, eles possuem métodos para manipulá-los.
59
Para clarear ainda mais este conceito, trago alguns outros exemplos. O carro
poderia ser uma classe e os objetos seriam seus tipos: Se é uma Mercedes, um Uno, um
Onix etc.; um animal poderia ser uma classe e seus objetos seriam os animais existentes,
como cachorro, gato, pássaro etc.
Diante deste conceito que aprendemos, vamos implementar nossa classe Conta.
A Figura 72 ilustra nosso processo de criação. No bloco 1, linha 1, definimos nossa
classe Conta; as linhas 2 a 6 compõem nosso __init__, este método é responsável por
inicializar a classe com tudo que ela precisa. Ou seja, para eu ter uma conta é preciso
que tenha um número, o titular, saldo e limite. Se eu tentar criar um objeto sem esses
parâmetros ocorrerá erro, vide bloco 2. No bloco 3 conseguimos criar normalmente
nosso objeto. Outro item que merece destaque aqui é o self, que é a referência do objeto
da classe Conta, é a instância do objeto.
Uma vez que esse objeto foi criado, o Python aloca memória para guardar as
informações da conta dentro da memória do programa.
5.2. Método
Agora vamos incluir mais um conceito importante: o método. Métodos são as
ações que aquela classe fará; eles são funções definidas dentro do corpo da classe.
Assim, como utilizamos def para para definir as funções, também utilizamos nos
métodos.
60
Agora vamos incluir as funções definidas anteriormente na nossa classe Conta.
Observe na Figura 73 que todos os métodos possuem o self. Isso é necessário pois o
método precisa saber qual objeto conta ele deve manipular.
5.3. Atributo
Os atributos são as variáveis da classe. Eles podem receber um valor padrão,
como pode ser visto na Figura 74. Observe que informamos um valor default para limite,
limite=500. Isso faz com que o limite não seja um requisito obrigatório para criar um
objeto (veja o bloco 15). Quando criarmos o objeto, o limite terá o valor de 500. Caso
queira alterar, você deve passar o valor desejado na criação da instância, ou apenas
alterar o atributo do objeto, como no bloco 16.
61
Figura 74 - Valores default no parâmetro.
5.4. Herança
Um último conceito importante de entendermos sobre Orientação Objeto é a
herança. No mundo real, todo cachorro é cachorro, mas existem algumas
especializações, certo? Um Pinscher é diferente de um Yorkshire, mas ambos são
cachorros. O mesmo vale para veículos. Carros, caminhões e motos são veículos, mas
carros e caminhões são veículos de 4 rodas, enquanto motos são veículos de 2 rodas.
Carros poderiam ser veículos de 4 rodas para transporte de pessoas, enquanto caminhões
seriam veículos de 4 rodas para transporte de cargas.
62
Figura 75 - Conta Base.
Agora que temos a conta base, vamos pensar nos outros tipos de conta. Uma
Conta Poupança seria uma conta que teria uma aplicação de juros sobre o saldo atual,
aumentando o seu valor. Uma Conta Salário seria uma conta que poderia ter um salário
associado e que teria um depósito desse salário no saldo da conta. Por fim, uma Conta
Corrente seria uma conta que teria um limite especial, permitindo que ficasse no
negativo e que tivesse uma aplicação de juros sobre o saldo negativo. A seguir, vamos
ver como ficam os exemplos (Figuras 77, 78 e 79).
63
Figura 77 - Exemplo de Conta Poupança.
64
Figura 79 - Exemplo de Conta Corrente.
Como podemos ver nos exemplos acima, cada classe conseguiu definir seus
comportamentos (métodos) e características (atributos) próprios, ao mesmo tempo em
que mantiveram as características da classe base. No exemplo da Conta Poupança,
conseguimos usar o atributo “saldo” da conta base mesmo sem defini-lo em nosso
método “__init__”. Isso ocorre por dois motivos: O primeiro, é que na definição Conta
Poupança, que colocamos assim: “class ContaPoupanca (ContaBase):”. Ao colocar o
nome de uma “classe A” entre parênteses na definição de uma outra “classe B”, estamos
65
dizendo que a classe B herda métodos e atributos da classe A. Além disso, na primeira
linha do “__init__” da classe Conta Poupança, fazemos uma chamada para o “__init__”
da classe base, através do seguinte código: “super().__init__(numero, titular, saldo)”.
66
Nessa figura sobrescrevemos os métodos “saca” e “extrato” para terem o
comportamento esperado no caso da classe Conta Corrente. Assim, ao invés de
precisarmos criar métodos novos para um saque usando o limite ou para exibir um
extrato com o limite, podemos usar os métodos que já existiam, substituindo o
comportamento por um que programamos. Para isso, basta escrever um método na
subclasse que tenha o mesmo nome que o método na superclasse.
67
6
Capítulo 6. Principais Bibliotecas
A seguir, iremos apresentar duas bibliotecas muito utilizadas na programação
Python: Numpy e Pandas.
6.1. Numpy
O NumPy abreviatura de Numerical Python (Python Numérico), é um dos
pacotes básicos mais importantes para processamento matemático/numérico em Python.
A maioria dos pacotes de processamento com funcionalidades científicas utiliza objetos
array do NumPy. Ele fornece suporte para arrays e matrizes e funções para operá-los.
69
ndarray: é o principal objeto do numpy, um array multidimensional, de n
dimensões, eficaz e que oferece operações aritméticas rápidas, orientadas a
arrays e com recursos flexíveis.
70
ocorrendo, é claro, apenas “nos bastidores” em código C otimizado e pré-compilado. O
código vetorizado tem muitas vantagens, entre elas:
O Numpy possui várias operações. Para conhecer todas sugerimos que consulte
a documentação do módulo, que é bem completa e com muitos exemplos. A Figura 83
mostra alguns comandos do Numpy para ilustrarmos o uso dessa biblioteca no Python.
71
6.2. Pandas
Pandas é um pacote Python criado para manipular de forma rápida e expressiva,
dados estruturados. Seu objetivo, segundo a documentação, é de se tornar a ferramenta
de análise/manipulação de dados de código aberto mais poderosa e flexível disponível
em qualquer idioma.
72
Figura 84 - Manipulação Series.
73
Figura 85 - DataFrame (Parte 1).
74
Figura 87 - DataFrame (Parte 3).
75
Glossário
Argumento: um valor apresentado a uma função quando a função é chamada.
Classe: tipo definido pelo programador. Uma definição de classe cria um objeto
de classe.
Definição de função: uma instrução que cria uma função nova, especificando
seu nome, parâmetros e as instruções que contém.
76
Erro semântico: um erro que faz com que um programa faça algo diferente do
que o programador pretendia.
77
Linguagem formal: qualquer linguagem que as pessoas criaram com objetivos
específicos, como representar ideias matemáticas ou programas de
computador; todas as linguagens de programação são linguagens formais.
Objeto de classe: objeto que contém a informação sobre um tipo definido pelo
programador.
78
Portabilidade: a propriedade de um programa de poder ser executado em mais
de um tipo de computador.
Prompt: caracteres expostos pelo interpretador para indicar que está pronto
para receber entradas do usuário.
7
Tipo: uma categoria de valores. Os tipos que vimos por enquanto são números
inteiros (tipo int), números de ponto flutuante (tipo float) e strings (tipo str).
Valor: uma das unidades básicas de dados, como um número ou string, que um
programa manipula.
79
Referência
1. CASTIGLIONE, C. 10 Famous Websites Built Using Python. 2022. Disponível em:
<https://learn.onemonth.com/10-famous-websites-built-using-
python/#:~:text=Instagram%2C%20the%20world's%20biggest%20online,is%20
written%20entirely%20in%20Python>. Acesso em: 27 de jul. 2022.
80
10. NUMPY DEVELOPERS. What is NumPy?. 2022. Disponível em:
<https://numpy.org/doc/stable/user/whatisnumpy.html>. Acesso em: 27 de
jul. 2022.
10
9
8
81