Buscar

Programação python economistas tutorial

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 49 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 49 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 49 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Introduc¸a˜o a` Programac¸a˜o Python Para Na˜o
Programadores
Iannic Dos Santos Matos
26 de abril de 2018
1
Suma´rio
1 Por queˆ economistas precisam aprender programac¸a˜o? 2
2 Primeiros passos em programac¸a˜o Python 3
2.1 Entrada e sa´ıda de dados do teclado, varia´veis e operac¸o˜es
matema´ticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.1 Entrada e Sa´ıda de Dados . . . . . . . . . . . . . . . . 9
2.1.2 Operac¸o˜es matema´ticas . . . . . . . . . . . . . . . . . . 12
2.2 Operadores Lo´gicos e Estruturas de Decisa˜o . . . . . . . . . . 13
2.3 Strings e listas . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3.1 Como python mapeia uma string? . . . . . . . . . . . . 20
2.3.2 Outros me´todos para manipulac¸a˜o de strings . . . . . . 20
2.3.3 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4 Estruturas de repetic¸a˜o . . . . . . . . . . . . . . . . . . . . . . 25
2.4.1 Estrutura de repetic¸a˜o for . . . . . . . . . . . . . . . . 25
2.4.2 Estrutura de repetic¸a˜o while . . . . . . . . . . . . . . . 27
2.5 Estrutura de Dados . . . . . . . . . . . . . . . . . . . . . . . . 29
2.5.1 Tuplas (Tuples) . . . . . . . . . . . . . . . . . . . . . . 29
2.5.2 Conjuntos (Sets) . . . . . . . . . . . . . . . . . . . . . 30
2.5.3 Diciona´rios (Dicts) . . . . . . . . . . . . . . . . . . . . 35
2.6 Me´todos e Func¸o˜es . . . . . . . . . . . . . . . . . . . . . . . . 36
2.7 Python Orientado a Objetos . . . . . . . . . . . . . . . . . . . 38
2.7.1 Sintaxe Ba´sica, Construtor e Me´todos . . . . . . . . . . 38
2.7.2 Heranc¸a, Super e Polimorfismo . . . . . . . . . . . . . 41
2.7.3 Atributo/Me´todos Esta´ticos e Encapsulamento . . . . . 44
3 Refereˆncias 48
1
1 Por queˆ economistas precisam aprender pro-
gramac¸a˜o?
O trabalho de natureza emp´ırica de um economista necessita de acesso
e controle de uma grande quantidade de dados. Dados esses que precisam
ser manipulados com ferramentas apropriadas, muitas vezes pagas e cara. A
programac¸a˜o permite ter esse controle sobre a criac¸a˜o de modelos adequados
a` pesquisa, as ferramentas que sera˜o utilizadas e os dados. Ale´m disso, os
computadores tem poder de calculo superior e quase ilimitado, permitindo
a um cientista de dados ter flexibilidade e confianc¸a nos resultados obtidos,
mas pra isso, e´ necessa´rio que o economista saiba utilizar a programac¸a˜o.
Conhecer e dominar a programac¸a˜o ja´ da uma enorme habilidade ao ci-
entista. Sozinho ele pode criar um laborato´rio de testes com seus pro´prios
modelos personalizados. Modelos feitos sob medida para os seus propo´sitos,
que se encaixam perfeitamente na sua pesquisa. Tais modelos que neces-
sitam de soluc¸o˜es lo´gico-nume´ricas sa˜o facilmente manipula´veis atrave´s de
uma linguagem de programac¸a˜o adequada.
Com o aumento do poder da computac¸a˜o de maneira exponencial surgem
novas ferramentas de explorac¸a˜o de dados que so´ esta˜o ao alcance de quem
dete´m algum conhecimento em programac¸a˜o. Aprendizado de ma´quina, Deep
learning, redes complexas, etc, so´ podem ser usadas por economistas que com
capacidade de entender e implementar esse conhecimento. Os dados, apesar
de volumosos, esta˜o dispersos e precisam ser organizados de alguma forma,
com o uso de alguma ferramenta e algum expertise, e a grande maioria desses
dados que esta˜o soltos nas redes esta˜o desorganizados.
A capacidade de resposta de um algoritmo e´ outro ponto importante
nessa questa˜o. A checagem dos resultados sa˜o agilizadas pelo poder compu-
tacional dispon´ıvel, assim como a compreensa˜o tambe´m e´ mais ra´pido e dar
respostas a sociedade com eficieˆncia e´ proposito de todos os profissionais e
principalmente de um economista.
2
2 Primeiros passos em programac¸a˜o Python
O primeiro passo para se comec¸ar a programar em python e´ instalar o
IDLE, que e´ a janela de edic¸a˜o oficial python mais o interpretador python.
Para fazer isso, basta entrar no site https://www.python.org/ e fazer o down-
load. (Isso so´ e´ necessa´rio em ma´quinas com sistema operacional Windows,
ja´ que no MACOs e no Linux o interpretador python e´ nativo).
O segundo passo para se comec¸ar a programa e´ baixar e instalar o IDE
(Integrated Development Environment) adequado. Um IDE e´ um ambiente
de desenvolvimento preparado para otimizar a programac¸a˜o, que por con-
seguinte facilita o aprendizado de iniciantes, deixando a programac¸a˜o mais
intuitiva. No momento existem va´rias, seja pra desenvolvimento profissional
ou cient´ıfico. Nesse tutorial sera´ recomendada usar a distribuic¸a˜o PyCharm,
dispon´ıvel em https://www.jetbrains.com/pycharm/download.
Ao baixar e instalar o PyCharm, o usua´rio estara´ diante da sua janela
inicial.
Figura 1: Janela de inicializac¸a˜o do PyCharm
Nela, ira´ selecionar “Create New Project”. Feito isso, outra janela sera´
aberta:
3
Figura 2: Janela de Criac¸a˜o de projeto
Aqui, o usua´rio selecionara´ o nome do seu projeto, e depois clicar em
“Create”. O PyCharm carregara´ os paraˆmetros e abrira´ a janela de desen-
volvimento para o novo projeto.
Figura 3: Janela de script do PyCharm
4
Nessa janela, na aba de opc¸o˜es, o usua´rio clicara´ em “file”, depois em “New
Scratch File”. Ao fazer isso, uma nova janela com va´rias opc¸o˜es de tipos de
arquivo sera´ aberta, escolha Python.
(a) (b)
Figura 4:
Tudo isso feito se abrira´ a janela de script Python onde pode - se comec¸ar
a codificar.
5
Figura 5: Janela de codificac¸a˜o python
Observe que o script Python tem extensa˜o .py pois essa e´ a extensa˜o dos
arquivos escritos em linguagem Python.
Figura 6: Arquivo inicial python com extensa˜o .py
Passado toda essa etapa de preparac¸a˜o e´ hora de comec¸ar a entender as
estruturas ba´sicas de Python, que esta˜o presentes em todas as linguagens
de programac¸a˜o. Pra comec¸ar, a mais importante para um programador
iniciante: A func¸a˜o Print. Toda linguagem tem uma func¸a˜o print, que
serve pra imprimir na tela alguma informac¸a˜o requerida pelo programador.
Figura 7: Primeiro co´digo em python
6
Aqui, foi pedido pra Python: “Python, imprima ‘Ola´’”. Pra testar esse
primeiro co´digo, vamos em “Run”, na aba de opc¸o˜es, e depois em “Run”:
Figura 8: Barra de ferramentas do PyCharm
O que acontecera´ no rodape´ do PyCharm ...
Figura 9: Execuc¸a˜o no PyCharm
... O primeiro comando em Python foi executado. Um adendo: quando
for passar Strings literais para a func¸a˜o print, use aspas simples ‘ ’. Isso
quer dizer que se quisermos pedir pra Python imprimir na tela um nome,
passamos para a func¸a˜o print esse nome entre aspas simples. Do contra´rio,
se tivermos uma varia´vel que contenha um nome, apenas precisamos passar
pra func¸a˜o print essa varia´vel, sem as aspas simples. Exemplo:
Figura 10: Script no PyCharm
7
Se voceˆ clicar em “Run” vai perceber que o resultado foi o mesmo. Nesse
caso, o que se fez foi pedir a` Python pra imprimir o que essa varia´vel continha,
que aqui e´ uma mensagem de ‘Ola´’.
Aqui da´ pra perceber outra propriedade da linguagem: a atribuic¸a˜o de
valores a` varia´veis. E Isso se faz com o sinal de igual ( = ) da aritme´tica.
Quando colocamos ¡mensagem = ‘Ola´’¿ falamos pra Python: “Python, atri-
bua a varia´vel mensagem o valor ‘Ola´’”. Automaticamente Python entendeu
que a varia´vel mensagem era uma String, que em linguagem de programac¸a˜o
quer dizer basicamente um vetor de caracteres, e atribuiu o vetor de ca-
racteres ‘Ola´’ a varia´vel mensagem.
2.1 Entrada e sa´ıda de dados do teclado, varia´veis e
operac¸o˜es matema´ticas
Python conte´m dois tipos de dados nume´ricos: Int e Float. Os dados de
tipo int sa˜o aqueles formados por nu´meros inteiros. Ex.: 1, 2, -1, -200, 70,
etc. Pra declara´-lo, basta atribuir no script python a` alguma varia´vel um
numero inteiro. Os de tipo Float sa˜o os nu´meros reais epara declara´-los
basta chamar a func¸a˜o float() e atribuir ela a uma varia´vel qualquer.
Ex.:
numInt = int() # aqui, a func¸~ao int() retorna zero e torna
# a varia´vel numInt um numero inteiro
numFloat = float() # aqui, a func¸~ao float() retorna 0.0 e torna
# a varia´vel numFloat um numero real
Python e´ uma linguagem de tipagem fraca, o que significa dizer que
se atribuirmos um nu´mero real a uma varia´vel que anteriormente t´ınhamos
declarado como inteiro essa varia´vel se tornara´ real.
Ex.:
>>>a = 2 # atribuı´mos o nu´mero inteiro 2 a varia´vel ’a’
>>>print(a) # pedimos para python imprimir na tela o que a
2 # conte´m, python imprimiu 2
>>> a = 2.5 # em seguida atribuı´mos pra mesma a o valor 2.5
>>> print(a) # pedimos pra python pra mostrar o que a conte´m
2.5 # python exibe 2.5
>>> a = ’Ola´, mundo!’ # atribuı´mos a varia´vel ’a’ a String ‘Ola´,mundo!’
>>> print(a) # pedimos pra python imprimir o que ’a’ conte´m
>>>Ola´, mundo! # python imprime ‘Ola´, Mundo!’
8
No PyCharm escrever´ıamos:
Figura 11: Script no IDE PyCharm
Depois de Executarmos o script :
Figura 12: Execuc¸a˜o no PyCharm
Em todos os casos, a varia´vel aceitou o tipo de dado diferente sem proble-
mas.
2.1.1 Entrada e Sa´ıda de Dados
A sa´ıda de dados em python e´ feito com a func¸a˜o print. A func¸a˜o print()
pega tudo que e´ colocado dentro dos pareˆnteses e transforma em uma String
para ser exibida, como ja´ vimos. Quando formos passar textos literais, basta
coloca-los entre aspas simples (’ ’) ou aspas duplas (), mas sempre coinci-
dindo.
print(‘Ola´, Mundo!’) # String literal
mensagem = ‘Ola´, Mundo’
print(mensagem) # conteu´do de uma varia´vel
9
Uma u´nica func¸a˜o print() pode conter va´rios argumentos dentro dos
pareˆnteses, contanto que estejam separados por v´ırgula.
1 NumInt = 2
2 NumFloat = 2.5
3 Mensagem = ‘Ola´, mundo!’
4 print(NumInt, NumFloat, Mensagem)
#linha 1: Criamos um inteiro e atribuı´mos 2 como valor
#linha 2: Criamos um real e atribuı´mos 2.5 como valor
#linha 3: Criamos uma String e atribuı´mos ‘Ola, Mundo!’ como valor
#linha 4: pedimos a` python para imprimir seus valores na tela
Observac¸a˜o: Colocar cerquilha, sustenido ou jogo-da-velha (#) na frente
de instruc¸o˜es em python o transforma em um mero comenta´rio dentro do
co´digo, sem nenhum peso na execuc¸a˜o. O interpretador python ignora as
linhas de co´digo.
No Pycharm:
Figura 13: Script no Pycharm
Executando:
Figura 14: Resultado da execuc¸a˜o do Script
print() imprimiu cada paraˆmetro na mesma linha separado apenas por
um espac¸o. Outra possibilidade em python e´ ao inve´s de colocarmos o valor
10
no co´digo, pedimos para ele ser entrado via teclado com a func¸a˜o input(). A
func¸a˜o input deixa o prompt em espera de um dado vindo do teclado.
Ex.:
Nome = input(’digite seu nome: ’)
A instruc¸a˜o acima e´ uma linha de co´digo simples onde Nome e´ uma
varia´vel que vai receber/guardar o valor que sera´ inserido do teclado. Dentro
dos pareˆnteses do input() sera´ passado a mensagem a ser exibida para o
usua´rio no momento da espera pela entrada do dado.
Figura 15: Script no PyCharm
Figura 16: Execuc¸a˜o no Pycharm
Assim que o usua´rio digitar qualquer palavra, python guardara´ na varia´vel
referenciada no co´digo, que nesse co´digo e´ Nome. Python tratara´ qualquer
tipo de dado como String, a na˜o ser que se especifique no co´digo que o
que se espera e´ um inteiro, ou um numero real. E e´ o que deve ser feito
sempre, mesmo quando se esperar uma String, por motivos de boa pra´tica
de programac¸a˜o.
Assim, a linha de co´digo ficaria:
Nome = str(input(’digite seu nome: ’))
NumeroInteiro = int(input(’Digite um numero Inteiro’))
NumeroReal = float(input(’Digite um numero Real’))
11
No primeiro exemplo, colocamos a func¸a˜o input() com seus paraˆmetros
dentro duma func¸a˜o str() que em python serve para especificar que o dado a
ser alocado na varia´vel sera´ uma cadeia de caracteres, ou seja, uma String;
No segundo exemplo, passamos a func¸a˜o input() com seus paraˆmetros para
uma func¸a˜o int(), isso serve para evitar erros de tipagem, se por exemplo,
nosso co´digo servir para fazer ca´culos; O ultimo exemplo e´ bem parecido com
o a func¸a˜o int(), pore´m e´ uma func¸a˜o float(), que converte a entrada do
teclado e passa para a varia´vel um numero real.
Figura 17: Script no PyCharm
Figura 18: Execuc¸a˜o no Pycharm
2.1.2 Operac¸o˜es matema´ticas
O interpretador python ja´ e´ pre-configurado como uma calculadora de
operac¸o˜es ba´sicas. Soma (+), subtrair ( - ), multiplicar ( * ), dividir ( / ),
e potenciac¸a˜o ( ** ) podem ser escritos normalmente que python realiza os
ca´lculos e retorna o valor.
12
Figura 19: Script python
Figura 20: Execuc¸a˜o do Script
2.2 Operadores Lo´gicos e Estruturas de Decisa˜o
Em python existe outro tipo de dado interessante: o booleano. O dado
booleano tem a caracter´ıstica de possuir apenas dois atributos: verdadeiro e
falso. Ou, em linguagem pyhton: True e False.
13
(a) (b)
Figura 21: Varia´veis booleanas
Os operadores lo´gicos booleanos servem em principio para entendermos a
estrutura de decisa˜o if, uma das estruturas mais importantes de uma lingua-
gem de programac¸a˜o. A estrutura if checa as possibilidades de um bloco de
co´digo.
Ex.:
1 var_VERDADE = True
2 var_FALSO = False
3
4 if var_VERDADE == True:
5 print(’A varia´vel carrega o valor True’)
6 else:
7 print(’A varia´vel carrega o valor False’)
Linha 1 e 2 : Criamos duas varia´veis e definimos o seu valor booleano: True
para a varia´vel var_VERDADE e False para a varia´vel var_falso.
Linha 4 : Criou-se um bloco if. Esse bloco pergunta se o valor da varia´vel
var_VERDADE e´ True. If vai retornar True se essa comparac¸a˜o se concretizar
e executara´ o primeiro comando identado. Mas se essa comparac¸a˜o for falsa,
o comando a ser executado por python sera´ o subordinado ao else.
Nota 1: O uso do duplo sinal de igualdade ( == ) em python significa com-
parac¸a˜o. Retorna True ou False para o co´digo que o chamar.
Nota 2: Um if na˜o precisa necessariamente de um else, mas todo else
precisa de um if, ou um elif.
14
Figura 22: Execuc¸a˜o no PyCharm
A varia´vel var_VERDADE carrega o valor True enta˜o nosso co´digo entrou
no primeiro print subordinado ao if.
O bloco if pode ser resumido simplificadamente assim: ou o co´digo exe-
cuta essa instruc¸a˜o, ou executa a outra.
Exemplo pra´tico:
Pede-se um programa que pec¸a ao usua´rio para entrar com sua idade e
checar se ele e´ maior de idade.
1 idade = int(input(’Digite sua idade: ’))
2
3 if idade >= 18:
4 maiorDeIdade = True
5 else:
6 maiorDeIdade = False
7
8 if maiorDeIdade:
9 print(’Usua´rio maior de idade’)
10 else:
11 print(’Usua´rio menor de idade’)
Linha 1: Pedimos ao usua´rio para entrar com um numero inteiro que sera´
armazenado na varia´vel idade.
Linha 3 a` 6: O primeiro bloco if e´ criado e armazena True (verdadeiro) na
varia´vel maiorDeIdade caso o numero digitado seja maior ou igual a 18; ou
False, caso o nu´mero digitado seja menor que 18.
Linha 8 a` 11: O segundo bloco if e´ criado para checar o valor da varia´vel
maiorDeIdade. Caso o valor de maiorDeIdade seja verdadeiro (True) ele
15
entra na instruc¸a˜o do if e exibe a mensagem Usua´rio maior de idade. Se
na˜o, ele entra no else e exibe a mensagem Usua´rio menor de idade.
Figura 23: Execuc¸a˜o com usua´rio maior de idade
Figura 24: Execuc¸a˜o com usua´rio menor de idade
Na estrutura de decisa˜o if ainda existe um terceiro comando: o elif. O
elif e´ usado quando o programa tem treˆs ou mais opc¸o˜es de sa´ıda. Por
exemplo: Se no co´digo acima, ao inve´s de informar se o usua´rio e´ maior de
idade o programa informasse que o usua´rio e´ jovem, adulto ou idoso.
Nota1: vamos considerar que jovem e´ menor que 18, adulto maior igual a
18 e menor que 60, e idoso maior ou igual a 60.
Nota 2: Nesse caso na˜o se usa a classe booleana pois esta so´ comporta dois
valores: True e False.
1 idade = int(input(’Digite sua idade: ’))
2
3 if idade < 18:
4 print(’O usua´rio e´ jovem.’)
5 elif idade >= 18 and idade < 60:
6 print(’O usua´rio e´ adulto.’)
7 else:
16
8 print(’O usua´rio e´ idoso.’)
Linha 1: Pedimos ao usua´rio para entrar com um numero inteiro que sera´ ar-
mazenado na varia´vel idade. Linha 3: Checamos se a varia´vel idade guarda
um valor menor que 18. Caso for verdade (True) python executa o print da
linha 4; Se na˜o, se a varia´vel idade for maior-igual a 18 e (and) menor que
60, python executa o print da linha 6; Se nenhuma das condic¸o˜es anteriores
forem atendidas, python executa o co´digo da subjugado ao else.
Nota 3: No elif foi usado o operador lo´gico and, que significa e. Esse
operador, retorna verdadeiro se todas as expresso˜es usadas na comparac¸a˜o
forem verdadeiras; Existe tambe´m o operador lo´gico or (ou), que retorna
verdadeiro se pelo menos uma das expresso˜es usadas na comparac¸a˜o forem
verdadeiras.
Figura 25: Execuc¸a˜o com idade < 18 anos
Figura 26: Execuc¸a˜o com idade >= 18 e < 60 anos
17
Figura 27: Execuc¸a˜o com idade > 60 anos
2.3 Strings e listas
Uma String e´ uma lista de caracteres com muitas propriedades de mani-
pulac¸a˜o, caso necessa´rio. Ja´ sabemos que as Strings podem ser delimitadas
por aspas simples ou aspas duplas, contato que elas coincidam.
string_aspas_simples = ’Tutorial python’
string_aspas_duplas = ”Tutorial python”
Uma caracter´ıstica presente em strings e´ a capacidade de poder percorrer
os seus elementos. Python mapeia todos eles como uma lista e cada um tem
uma posic¸a˜o definida, comec¸ando de por (zero). Para acessa´-lo, basta usar
entre colchetes a posic¸a˜o do caractere requerido.
1 string_aspas_simples = ’Tutorial python’
2 string_aspas_duplas = "Tutorial python"
3
4 caractere_requerido_aspas_simples = string_aspas_simples[10]
5 caractere_requerido_aspas_duplas = string_aspas_duplas[10]
6
7 print(’ caractere requerido ASPAS SIMPLES: ’ +
8 caractere_requerido_aspas_simples, "\n",
9 "caractere requerido ASPAS DUPLAS: " +
10 caractere_requerido_aspas_duplas)
NOTA 1: Nas linhas 1 e 2 foi-se declarado duas strings, umas com aspas
simples e outra com aspas duplas.
NOTA 2: Nas linhas 4 e 5 foi-se declarado duas varia´veis que recebera˜o os
caracteres requeridos, um de cada string. No caso escolhemos o caractere
que esta´ na posic¸a˜o 10 de ambas as strings. O nu´mero entre colchetes e´
exatamente isso: a posic¸a˜o do caractere na string, onde ele se encontra na
lista de caracteres.
18
Figura 28: Execuc¸a˜o do script no IDE PyCharm
Outra propriedade interessante das Strings em python e´ que elas sa˜o mape-
adas de tra´s pra frente tambe´m, chamado de me´todo pythonic. Para acessar,
por exemplo, o u´ltimo elemento sem saber qual o tamanho da string basta
usar [-1] como nu´mero ı´ndice.
caractere_requerido_aspas_simples = string_aspas_simples[-1]
caractere_requerido_aspas_duplas = string_aspas_duplas[-1]
E isso e´ uma regra. [-2] acessa o penu´ltimo, [-3] o antepenu´ltimo, e as-
sim por diante.
Strings em Python tambe´m podem ser fatiadas em substrings diretamente
a partir de seus nu´meros ı´ndices. Isso se faz usando dois pontos ( : ) para de-
limitar que parte da string queremos repartir.
1 sublista_aspas_simples = string_aspas_simples[0:6]
2 sublista_aspas_duplas = string_aspas_duplas[6:
len(string_aspas_duplas)]
NOTA 1: Em ..._aspas_simples[0:6] pediu-se pra python pegar a parte
da string que comec¸a em 0 (zero) e termina em 5. O caractere final da subs-
tring sera´ o nu´mero escolhido menos 1 [inı´cio_da_substring:fim_da_sub-
string - 1].
NOTA 2: em ..._aspas_duplas[6:len(string_aspas_duplas)] foi pe-
dido a python para pegar a parte da string que comec¸a em 6 e termina no
fim da pro´pria string. Aqui foi-se usado um me´todo da classe string, o
me´todo len. Strings sa˜o uma estrutura de dado com atributos e me´todos.
Esses me´todos servem para acessar o estado desses atributos. O me´todo len
recebe uma string como argumento e retorna o tamanho desta string.
19
tamanho_da_string = len(string_aspas_simples)
Aqui foi criado uma varia´vel que vai guardar o tamanho da string a ser
passada por argumento. Nesse caso foi-se enviado a string string_aspas_si-
mples como argumento.
Figura 29: Pedindo para python exibir a varia´vel tamanho da string
2.3.1 Como python mapeia uma string?
Ao criarmos uma varia´vel do tipo String, python cria uma lista e coloca
cada elemento dessa string nela e atribui um enderec¸o a eles, chamados de
subscritos.
Ex.: String = ‘Ola´, mundo’
O que python faz ...
Figura 30: Lista de caracteres
Quando pedimos pra python string[5] estamos pedindo para ele nos dar
o elemento que esta na lista de nome string e ocupa a posic¸a˜o 5.
2.3.2 Outros me´todos para manipulac¸a˜o de strings
A classe string string conte´m va´rios outros me´todos ale´m do len() ja´ de-
monstrado que retorna o tamanho – ou a quantidade de elementos – de uma
string. Alguns me´todos importantes sa˜o o o count(), upper(), lower().
O me´todo count() serve para contar um elemento que esteja numa string.
Para usa´-lo, escrevemos nome da string.nome do metodo(valor a ser verificado).
string = ’Tutorial python’
print(string.count(’o’))
20
Aqui, pedimos a` python para contar quantos elementos ‘o’ existem na
string de nome string. E ele nos retorna que existem dois:
Figura 31: Resultado no PyCharm
O me´todo upper() faz a string que o chamou ficar toda em caracteres
maiu´sculos.
string = ’Tutorial python’
print(string.upper())
Figura 32: Execuc¸a˜o da func¸a˜o print
O contra´rio do me´todo upper() e´ o me´todo lower(). Ele coloca toda a
string que o chamou em caracteres minu´sculos.
string = ’TUTORIAL PYTHON’
print(string.lower())
Figura 33: Execuc¸a˜o da func¸a˜o string.lower()
Strings tambe´m podem ser somadas com outras strings ou caracteres.
Para isso, basta usar o operador de soma +.
21
1 string = ’Tutorial de paython’
2 print(string)
3 string = string + ’ para n~ao programadores’
4 print(string)
Figura 34: Resultado da concatenac¸a˜o de Strings
Na primeira linha foi-se definido uma string de nome string que recebeu
a cadeia de caracteres ’Tutorial de python’. Na linha 3 foi pedido pra python
”some string com ’ para na˜o programadores’ e guarde o novo valor em string”.
2.3.3 Listas
A classe string e´ uma lista, so´ que restrita a caracteres. Mas o tipo lista se
abrange muito mais e comporta todos o tipos de dados poss´ıveis em python.
Para declara´-lo basta chamar a func¸a˜o list() ou atribuir a ela valores entre
colchetes : nome da lista[tipo int, tipo float, tipo string, tipo lista].
minha lista = list()
outra literal = [2, 3.9, ’ola, mundo’, minha lista]
As listas tambe´m sa˜o mapeadas por python com subscritos, ou seja,
para acessar o elemento dentro dela basta chama-lo pelo nome da lista mais
a posic¸a˜o do elemento entre colchetes : nome da lista[posic¸a˜o do elemento].
elemento da minha lista = minha lista[2]
Para adicionarmos um elemento na lista usamos o me´todo append().
Escrevemos: nome da lista.append(elemento a ser dicionado).
minha\_lista.append(2)
minha_lista.append(9.7)
minha_lista.append(’Tutorial python’)
22
Figura 35: Execuc¸a˜o dos me´todos da lista
O me´todo append() adiciona o elemento sempre no final da lista. Se
quisermos discriminar a posic¸a˜o, e´ so´ chamar nome da lista[posic¸a˜o] = ele-
mento novo.
minha lista[0] = ’ola´’
Para removermos um elemento da lista usamos o me´todo remove(). Es-
crevemos: nome da lista.remove(elemento que queremos remover).
1 minha_lista= list()
2 minha_lista.append(2)
3 minha_lista.append(9.7)
4 minha_lista.append(’Tutorial python’)
5 print(minha_lista)
6 minha_lista.remove(2)
7 print(minha_lista)
Nota 1: Na primeira linha foi-se criado uma lista de nome minha lista.
Nota 2: Da linha 2 a 4 usou-se o me´todo append() para preencher a lista
minha lista.
Nota 3: Na linha 5 pediu-se a` python para exibir na tela os elementos da
lista.
Nota 4: Na linha 6 usou – se o me´todo remove() para remover o elemento
2 lista minha lista.
Nota 5: Por u´ltimo, na linha 7, pediu-se a python para exibir minha lista
para ver o resultado.
Outro me´todo de remoc¸a˜o presente na classe list e´ o me´todo pop(). A
distinc¸a˜o e´ que esse me´todo remove sempre o u´ltimo elemento da lista. Para
usa´-lo, basta chamar nome da lista.pop(), assim, automaticamente a lista
que o chamou perdera´ o seu u´ltimo elemento.
23
minha lista.pop()
print(minha lista)
Figura 36: Execuc¸a˜o do me´todo pop()
Se a lista contiver apenas elementos nume´ricos, pode-se usar o me´todo
sort() para ordena´-la, basta escrever nome da lista.sort() e a lista que o
chamou estara´ ordenada.
minha_lista_numerica = [1, 9, 0, 3.4, 8,34, 0.23, 12, -8, -3, -5]
print(minha_lista_numerica)
minha_lista_numerica.sort()
print(minha_lista_numerica)
Figura 37: Execuc¸a˜o dos prints: o primeiro desordenado e o segundo orde-
nado
E, ao passar como argumento do me´todo sort() o comando reverse =
True, python organiza a lista nume´rica em ordem decrescente.
minha lista numerica.sort(reverse = True)
print(minha lista numerica)
24
Figura 38: Lista ordenada em ordem decrescente
2.4 Estruturas de repetic¸a˜o
Estruturas de repetic¸a˜o sa˜o func¸o˜es de muitas linguagens de programac¸a˜o.
Elas servem basicamente para repetir determinada tarefa. Em python vamos
conhecer a estrutura for e a estrutura while.
2.4.1 Estrutura de repetic¸a˜o for
For, basicamente, executa uma func¸a˜o com quantidade delimitada e co-
nhecida. Para isso, ele faz uso de outra func¸a˜o de python: a func¸a˜o range().
Range() gera um alcance para o for, ale´m de delimitar o passo que sera´ se-
guido para executar esses comando.
Ex.: a = range(10)
A varia´vel a recebeu uma lista de 0 a` 9. Ela sera´ usada como delimitador do
lac¸o for.
for i in a:
print(i, end = ’ ’) # o para^metro end = ‘ ’ impede
# que o print pule uma linha
Quando chama-se a construc¸a˜o for para fazer um lac¸o, tem-se que seguir
exatamente esses passo: for varia´vel de controle in tamanho da repetic¸a˜o:
Figura 39: Iterac¸a˜o do lac¸o for
O operador in em python serve para “verificar a associac¸a˜o em listas”
(Grus, p. 20), o que significa dizer que, ao criarmos a varia´vel i, python a
inicializa automaticamente com 0 (zero) e checa se ela esta na lista criada
25
pelo range(). A cada repetic¸a˜o do lac¸o for, i vai sendo acrescentada com
+ 1, quando i conter um valor que na˜o pertence a lista criada pelo range(),
ele para a rotina e sai do lac¸o.
Existe tambe´m a possibilidade de definirmos de onde a sequencia gerada por
range() deve comec¸ar. Se passarmos por argumentos dois nu´meros, sera´
encarado por range() como o in´ıcio e o fim da sequeˆncia.
a = range(5, 10)
for i in a:
print(i, end = ’ ’)
Figura 40: Execuc¸a˜o do lac¸o for do elemento 5 ate´ o 9
Outra possibilidade e´ passarmos ao range() treˆs paraˆmetros. Nesse caso,
python interpreta que o terceiro paraˆmetro sera´ o nosso incrementador, ou
seja, ao inve´s de somar 1 na varia´vel de controle, python somara´ o numero
que foi passado para o range() como terceiro paraˆmetro.
a = range(0, 10, 2)
for i in a:
print(i, end = ’ ’)
Figura 41: Execuc¸a˜o do lac¸o for com um incrementador de valor = 2
26
Para que o range() crie uma sequencia decrescente e´ necessa´rio passar
como varia´vel controladora um nu´mero negativo, ale´m dessa lista conter ini-
cio > fim.
a = range(10, 0, -1)
for i in a:
print(i, end = ’ ’)
Figura 42: Lista decrescente com incrementador = -1
2.4.2 Estrutura de repetic¸a˜o while
While() tambe´m serve para repetir comandos, mas e´ usado quando na˜o
se sabe o fim dessas iterac¸o˜es.
Exemplo: Um programa que pec¸a ao usua´rio para digitar um nu´mero que
esteja dentro de um conjunto predeterminado. Caso o usua´rio digite um
numero que esteja dentro do conjunto, o programa exibira´ uma mensagem
’Nu´mero digitado pertence ao conjunto’, caso contra´rio, o programa conti-
nuara´ pedindo para o usua´rio entrar com um nu´mero.
conjunto = [10, 9, 8, 28, 15, 17]
num = int(input(’Digite um numero: ’))
while(num not in conjunto):
num = int(input(’Digite um numero: ’))
print(’Nu´mero digitado pertence ao conjunto’, conjunto)
27
Figura 43: Execuc¸a˜o do lac¸o while() com cinco tentativas
O operador not in age de maneira inversa ao in, e checa se algo na˜o
esta´ na lista. In retorna True (verdadeiro) se estiver e False (falso) se na˜o
estiver. Not in retorna True se na˜o estiver e False se estiver. O que tem
que ser entendido e´: enquanto a condic¸a˜o do while estiver sendo satisfeita,
ele executara´ o co´digo dentro de seu escopo, ou seja, enquanto not in estiver
retornando verdadeiro (True) ele vai pedir para o usua´rio digitar um numero.
Exemplo 2: Um programa que pec¸a uma palavra-chave/senha para o usua´rio.
Caso a palavra-chave digitada esteja incorreta, exibir a mensagem ‘Senha
incorreta. Acesso negado’; caso o usua´rio digite a senha correta, exiba ‘Senha
correta! Acesso permitido’.
PalavraChave = ’TutorialPython’ # definic¸~ao da chave
# de permiss~ao
senha = str(input(’Digite a senha: ’))
while(senha != PalavraChave):
print(’Senha Incorreta. Acesso NEGADO.’)
senha = str(input(’Digite a senha: ’))
print(’Senha Correta! Acesso PERMITIDO.’)
28
Figura 44: Tentativa de acesso com uma senha incorreta e depois com a
senha correta
Foi-se passado como argumento da func¸a˜o while() uma comparac¸a˜o entre
duas strings. O operador != (exclamac¸a˜o + igual) significa diferente.
Esse operador retorna True (verdadeiro) quando as varia´veis comparadas sa˜o
diferentes e False (falso) em caso de varia´veis iguais. Ou seja, a condic¸a˜o para
que a func¸a˜o while() se repita e´ a diferenc¸a entre a palavra-chave guardada
pelo sistema e a palavra chave digitada pelo usua´rio ser verdadeira (True)
2.5 Estrutura de Dados
2.5.1 Tuplas (Tuples)
Tuplas, ou em python, tuples, sa˜o estruturas de dados semelhantes as
listas, mas com uma propriedade singular: elas sa˜o imuta´veis. Basicamente,
uma tuple e´ uma lista de elementos imuta´veis. Para criar uma tuple basta
atribuir valores em pareˆnteses a` alguma varia´vel. Ex. 1: Minha Tuple = (1,
2, 3, 4, 5, 6, 7, 8).
1 Minha Tuple = (1, 2, 3, 4, 5, 6, 7, 8)
2
3 print(Minha Tuple)
Os elementos de uma Tuple tambe´m sa˜o mapeados como em uma string
e podem ser encontrados usando o seu subscrito. Ex.: Elemento da tuple
= Minha Tuple[subscrito].
Ex. 2: elemento da tuple = Minha Tuple[2]
29
Figura 45: Execuc¸a˜o do Ex. 1 e Ex. 2
Tuples tambe´m podem simular um fatiamento, como as strings, e tambe´m
podem ser somadas (concatenadas), pore´m, o resultado tem que ser guardado
em outra tupla.
Ex. 3:
5 outra tuple = Minha Tuple + (10, 11, 12, 13)
6 tuple fatiada = Minha Tuple[0:2]
Figura 46: Execuc¸a˜o das Linhas 1, 5 e 6
No fatiamente (slice) das tuplas usa-se colchetes [ ] assim como nas
strings.
2.5.2 Conjuntos (Sets)
A estrutura de dado Set e´ feito em python para conjunto de dados na˜o dupli-
cados. Essa caracter´ıstica tambe´m serve para converter conjuntos com dados
duplicados para conjuntos com dados na˜o duplicados.
1 cesto de frutas = [’mac¸a˜’, ’laranja’, ’mac¸a˜’, ’pera’, ’laranja’, ’banana’]
2
3 frutas = set(cesto de frutas)
30
Figura 47: Execuc¸a˜o da linha 3
A criac¸a˜o de um set e´ simples, basta passar como argumentoum vetor e o
set se organizara´ em uma lista de dados unita´rios. Apesar de ser organizado
em forma de lista, o tipo do dado formado e´ um set, com os atributos e
me´todos dessa classe. Isso implica em dizer que: os elementos na˜o tem uma
ordem. Pore´m, pode usar o operador in para verificar se algum elemento
esta´ no set.
if(’mac¸~a’ in frutas):
print(’Mac¸~a esta´ no Set’)
Figura 48: Resultado da execuc¸a˜o do if
Dois me´todos importantes para os sets sa˜o o add e o remove. A func¸a˜o do
me´todo add e´ adicionar um novo elemento ao set enquanto a func¸a˜o remove
e´ remover um elemento do set.
frutas = {’mac¸~a’, ’laranja’,’pera’,’banana’} # Criac¸~ao do set ‘frutas’
print(frutas) # Imprime na tela o
# set criado
frutas.add(’goiaba’) # Adiciona novo elemento
# ao set
print(frutas) # Imprime na tela o
# set com o novo elemento
31
Figura 49: Execuc¸a˜o dos Sets: original e alterado
frutas.remove(’mac¸~a’) # Remove o elemento ’mac¸~a’
print(frutas) # Imprime o set com o elemento ‘mac¸~a’ removido
Figura 50: Execuc¸a˜o do novo set sem o elemento ’mac¸a˜’
Set comporta as operac¸o˜es matema´ticas tradicionais de conjuntos: unia˜o,
intersecc¸a˜o, diferenc¸a, e diferenc¸a sime´trica.
cesto_de_frutas = [’laranja’, ’mac¸~a’, ’pera’, ’banana’]
cesto_de_verduras = [’cenoura’, ’xuxu´’, ’repolho’]
frutas = set(cesto_de_frutas)
verdura = set(cesto_de_verduras)
cesto_de_compras = frutas.union(verdura)
print(cesto_de_compras)
No co´digo acima, a varia´vel cesto de compras recebeu a unia˜o entre os
dois sets (conjuntos), o de frutas e o de verduras. Para isso, bastou chamar
a func¸a˜o/me´todo union contida no set frutas e passar por argumento o
set verduras. O inverso tambe´m poderia ser feito, ou seja, chamar o me´todo
union do set verduras e passar como argumento o set frutas, ja´ que tanto
frutas como verduras sa˜o sets e possuem os mesmos me´todos.
32
Figura 52: Exibic¸a˜o no novo set
Figura 51: Exibic¸a˜o da varia´vel cesto de compras
* O resultado da execuc¸a˜o e´ diferente a cada execuc¸a˜o, pois o tipo de dado
set e´ um conjunto na˜o ordenado.
Para usar a operac¸a˜o intersecc¸a˜o nos sets basta chamar a func¸a˜o/me´todo
intersection.
cesto_de_frutas = [’laranja’, ’mac¸~a’, ’pera’, ’banana’]
cesto_de_frutas2 = [’uva’, ’pera’, ’tangerina’, ’laranja’]
frutas = set(cesto_de_frutas)
frutas2 = set(cesto_de_frutas2)
inter_frutas = frutas.intersection(frutas2)
print(inter_frutas)
A varia´vel inter frutas recebeu um novo set com a intersecc¸a˜o do set
frutas com o set frutas2 e gerou um terceiro set com o elemento de intersec¸a˜o
entre os dois conjuntos, nesse caso, o elemento ‘laranja’.
Para usar a operac¸a˜o de diferenc¸a entre conjuntos basta usar o me´todo/func¸a˜o
differerence.
cesto_de_frutas = [’laranja’, ’mac¸~a’, ’pera’, ’banana’]
cesto_de_frutas2 = [’uva’, ’pera’, ’tangerina’, ’laranja’]
frutas = set(cesto_de_frutas)
33
frutas2 = set(cesto_de_frutas2)
difer_frutas = frutas.difference(frutas2)
print(difer_frutas)
No co´digo acima, a varia´vel difer frutas recebe o set resultante da dife-
renc¸a dos conjuntos frutas – frutas2.
Figura 53: Diferenc¸a entre os sets frutas e frutas2
Observar que a ordem numa relac¸a˜o de diferenc¸a em conjuntos importa.
Se colocar-se frutas2 – frutas o resultado seria diferente.
difer frutas = frutas2.difference(frutas) # Em Python
Figura 54: Ordem invertida do me´todo difference sendo usado a partir do
set frutas2
O me´todo symmetric difference dos sets() retorna um set com a dife-
renc¸a sime´trica dos conjuntos.
difer symm frutas = frutas.symmetric difference(frutas2)
Na linha de co´digo acima foi-se criado a varia´vel difer symm frutas que
ira´ cortar a diferenc¸a sime´trica entre entre os sets frutas e frutas2.
34
Figura 55: Diferenc¸a sime´trica entre os sets frutas e frutas2
2.5.3 Diciona´rios (Dicts)
Existe uma estrutura de dado em Python chamada dicts. Essa estrutura
de dado ordena os valores em pares, associando um ao outro. Esses pares
associados recebem nomes especiais: Chave e Valor, ou, key e value em
Python. Qualquer tipo de dado na˜o muta´vel pode ser uma key (chave).
A maneira de se criar um dict e´ dando-lhe um nome, seguido de cha-
ves , e dentro das chaves estara˜o os pares associados por dois pontos ( : ):
nome do diciona´rio = {chave1 : valor1, chave2 : valor2, chave3 : valor3}.
Ex.: Um dict para comportar nu´meros de telefone:
lista\_telefonica = {’jo~ao’ : ’9999-8888’, ’claudio’ : ’8888-9090’,
’ana’ : ’6666-3333’}
Para acessar os elementos de um dict basta usar os me´todos Keys() e
values(), eles retornam todos os valores presentes no dict.
print(lista telefonica.values())
print(lista telefonica.keys())
Figura 56: Exibic¸a˜o dos valores e chaves do diciona´rio lista telefonica
As chaves de um dict funcionam como subscrito e para alterar os valores
associados a` elas basta passa´-las entre colchetes:
35
Figura 58: Exibic¸a˜o do dict com os novos elementos
lista telefonica[’joa˜o’] = ’7777-3333’
Figura 57: Adic¸a˜o da nova chame e valor no diciona´rio
Na execuc¸a˜o do co´digo acima tem-se dois prints, um antes e outro depois
da alterac¸a˜o na chave ‘joa˜o’ com o valor ‘7777-3333’.
Para adicionar algum elemento no dict basta passar por subscrito a nova
chave e atribuir a ela um valor.
lista telefonica[’carmen’] = ’2222-5555’
2.6 Me´todos e Func¸o˜es
Me´todos ou Func¸o˜es e´ a capacidade que a linguagem tem de modularizar
um co´digo. Um me´todo e´ uma parte do script que realiza uma func¸a˜o es-
pec´ıfica. Ao longo de todo esse tutorial usamos va´rias func¸o˜es que ja´ vem
embutidas na linguagem python por padra˜o. Print e´ uma delas. Passamos
como argumento para print() as informac¸o˜es que queremos que ele retorne
como string na tela.
Python permite que o programador escreva suas pro´prias func¸o˜es. For-
malmente, para se criar uma func¸a˜o basta usar o a palavra reservada em
python def seguida do nome da func¸a˜o acompanha de pareˆnteses () que in-
dicam a quantidade de argumentos que essa func¸a˜o ira´ receber. Faz parte do
escopo da func¸a˜o o que ela faz depois de processado seus dados, e para isso
usa-se a palavra reservada return.
Ex.: def nome da func¸a˜o(argumento1, argumento2, argumento3, ...):
36
def funca_soma(num1, num2):
soma = num1 + num2
return soma
Acima temos uma func¸a˜o/me´todo chamada funca soma. Ela recebe dois
nu´meros como argumento, num1 e num2, soma os dois e guardam o valor
dessa soma na varia´vel soma, e retorna essa soma para o co´digo que a cha-
mar.
Pra chamar essa func¸a˜o basta usar o nome dela e passar dois nu´meros por
paraˆmetro, ale´m de guardar o valor de retorno em alguma varia´vel nova.
valor de retorno = funca soma(4, 7)
print(valor de retorno)
Figura 59: Resultado da func¸a˜o soma com os paraˆmetros 4 e 7
Func¸o˜es na˜o precisam ter argumento e nem mesmo retornar algo. Nesse
caso, basta deixa vazio o espac¸o entre pareˆnteses.
def func_imprime_mensagem():
print(’Ola´, mundo’)
func_imprime_mensagem()
Figura 60: Resultado de uma chamada sem paraˆmetro de chamada e sem
valor de retorno
37
2.7 Python Orientado a Objetos
Programac¸a˜o Orientada a Objetos (POO) e´ um paradigma de programac¸a˜o
que permite modularizar ainda mais o co´digo, permitindo ao programador
estruturar a programac¸a˜o em volta de problemas pro´ximos do mundo real,
ou, como pensamos um problema no mundo real. Python tambe´m permite
esse n´ıvel de programac¸a˜o.
Em POO pensa-se no co´digo divido por classes, e essas classes contem
atributos e me´todos. Uma classe e´ uma “receita” de um objeto que sera´
criado quando requisitado pelo co´digo. Ao longo desse tutorial foi-se tra-
balhado com va´rias classes: int, float, set ... todas elas sa˜o classes para
python.
Python permite ao usua´rio criar suaspro´prias classes, com seus pro´prios
atributos e me´todos.
2.7.1 Sintaxe Ba´sica, Construtor e Me´todos
Suponha-se que o programador deseje construir um objeto pessoa. Esse
programador precisaria passar para python as instruc¸o˜es de como construir
esse objeto, ou seja, ele teria que escrever uma classe pessoa. Para isso, ele
escreveria no script :
class pessoa:
def __init__(self, nome, idade, altura, peso):
self.nome = nome
self.idade = idade
self.altura = altura
self.peso = peso
Uma pessoa, a depender do objetivo do programa, tem pelo menos quatro
atributos: nome, idade, altura e peso. Atributos sa˜o o que se pode chamar
de caracter´ısticas dos objetos. O me´todo __init__ constro´i o objeto pessoa
com as caracter´ısticas passadas por paraˆmetro no momento que a classe for
chamada no co´digo. E nesse momento, ele constro´i e inicializa todos os
atributos com os valores passados por paraˆmetro.
Um adendo: No PyCharm sera˜o criados duas abas de script python. Em uma,
se escrevera´ o co´digo das classes, e em outro o script principal, chamado de
main.py, que usara´ essas classes.
38
(a) (b)
Figura 61: (a) Arquivo pessoa.py que contera´ a classe Pessoa
Figura 62: (a) Arquivo main.py que contera´ a classe principal do programa
Para usarmos co´digos de outro script temos que importa-lo para dentro do
co´digo que o requisitar. Para isso, usa-se o comando from + nome do script
+ import + nome da classe. Isso faz com que o script principal reconhec¸a
o co´digo e os novos tipos de dados criados por outro script dentro do mesmo
projeto.
from pessoa import Pessoa
# aqui, estamos pedindo pra python: do script pessoa,
# importe a classe Pessoa
Dentro do arquivo pessoa.py temos uma classe Pessoa. Para criarmos
um objeto pessoa basta escrever o nome da classe + os paraˆmetros que o seu
construtor pedir. No caso da classe Pessoa, os paraˆmetros estabelecidos
em __init__ para a construc¸a˜o desse objeto sa˜o: nome, idade, altura e peso.
Ou seja: no momento que criarmos esse objeto, automaticamente temos
que passar esses valores.
p = Pessoa(’Joa˜o’, 12, 13, 14)
# Passou-se como paramentros de nome, idade, altura e peso
# os valores: Jo~ao, 12, 13 e 14. Valores que ser~ao usados
# pelo construtor da classe pessoa para criar o objeto Pessoa
Do mesmo jeito que p poderia ser um int(), um float(), um dict(), p e´
uma Pessoa(). Para acessar os valores dos seus atributos basta escrevermos
nome da varia´vel.nome do atributo.
39
print(p.peso)
# pedimos para a func¸~ao print exibir o atributo peso do objeto
Figura 63: Exibic¸a˜o do valor guardado no atributo peso do objeto Pessoa
Para alterarmos o valor de um atributo no objeto basta escrevermos
nome do objeto.nome do atributo.
p.peso = 12
# alterac¸~ao do atributo peso do objeto
Figura 64: Exibic¸a˜o do novo valor do atributo peso
Python e´ uma linguagem muito aberta e o paradigma POO, de certa forma,
na˜o e´ sentido. Em outras linguagens - Java ou C# - o programador fica
restringido a programar dentro do paradigma. Por exemplo: para acessar os
atributos seria obrigato´rio implementar me´todos dentro da classe que torna-
se esse caminho poss´ıvel. Em python na˜o e´ necessa´rio. Pore´m, e´ boa pra´tica
de programac¸a˜o fazeˆ-lo. Enta˜o, dentro da classe pessoa, seria interessante
me´todos que retornassem o estado dos atributos.
def retornaNome(self):
return self.nome
def retornIdade(self):
40
return self.idade
def retornaAltura(self):
return self.altura
def retornPeso(self):
return self.peso
Agora, para acessarmos seus atributos utilizaremos seus me´todos espec´ıficos
para isso.
print(’Peso: ’, p.retornPeso())
Figura 65: Valor de retorno do me´todo retornPeso() da classe Pessoa
2.7.2 Heranc¸a, Super e Polimorfismo
Classes sa˜o receitas gene´ricas de objetos. A cada n´ıvel de detalhe que
chegar esse objeto, o programador teria que reescrever seu co´digo inteiro,
colocando os atributos e me´todos espec´ıficos desse novo objeto. Por exemplo:
Um cliente e´ uma pessoa, com atributos e me´todos a mais – RG, CPF,
numero de carta˜o, saldo, etc. Para isso python permite usar a Heranc¸a, que
e´ uma caracter´ıstica de POO. A Heranc¸a poupa retrabalho do programador,
criando classes filhas duma classe ma˜e mais gene´rica a` medida que o co´digo
for se especificando.
Para criar uma classe filha basta que, no momento da declarac¸a˜o desta,
se passe por paraˆmetro a classe ma˜e.
class Cliente(Pessoa):
A classe filha herda atributos e me´todos da classe ma˜e e, na imple-
mentac¸a˜o de seu construtor __init__() passa-se por paraˆmetro os atributos
da classe ma˜e e da classe filha.
def init (self, nome, idade, altura, peso, rg, cpf, numCartao, saldo):
41
Dentro do construtor da classe filha acessa-se o construtor da classe ma˜e
usando o me´todo super(), um me´todo especial para o uso da heranc¸a em
POO.
super(). init (nome, idade, altura, peso)
Polimorfismo e´ a capacidade que as classes tem de subscrever os me´todos
da classe ma˜e, ou seja: A classe Cliente pode ter os mesmos me´todos que a
classe Pessoa, inclusive com o mesmo nome. Se isso acontecer, no momento
em que for chamado, o co´digo chamado sera´ o da classe filha e na˜o o da ma˜e.
# arquivo pessoa.py
class Pessoa:
def __init__(self, nome, idade, altura, peso):
self.nome = nome
self.idade = idade
self.altura = altura
self.peso = peso
def retornaNome(self):
print(’Nome da pessoa: ’, self.nome)
def retornIdade(self):
print(’Idade da pessoa: ’, self.idade)
def retornaAltura(self):
print(’Altura da pessoa: ’, self.altura)
def retornaPeso(self):
print(’Peso da Pessoa: ’, self.peso)
class Cliente(Pessoa):
def __init__(self, nome, idade, altura, peso, rg, cpf, numCartao, saldo):
super().__init__(nome, idade, altura, peso)
self.rg = rg
self.cpf = cpf
self.numCartao = numCartao
self.saldo = saldo
def retornaNome(self):
42
print(’Nome do Cliente: ’, self.nome)
def retornIdade(self):
print(’Idade do Cliente: ’, self.idade)
def retornaAltura(self):
print(’Altura do Cliente: ’, self.altura)
def retornaPeso(self):
print(’Peso do Cliente: ’, self.peso)
# arquivo main.py
1 from pessoa import Pessoa # importa a classe Pessoa do arquivo pessoa.py
2 from pessoa import Cliente # importa a classe Cliente do arquivo cliente.py
3
4
5 p = Pessoa(’Jo~ao’, 12, 13, 14)
6 c = Cliente(p.nome, p.idade, p.altura, p.peso,
7 ’1287236122 90’, ’048.855.985-59’,
8 ’1234 1234 1234 1234 1234’, 100.00)
9
10 p.retornaPeso()
11
12 c.retornaPeso()
Explicac¸a˜o de alguns pontos do co´digo main.py :
As linhas 1 e 2 usam duas func¸o˜es importantes de python: from e im-
port. A func¸a˜o import serve para que co´digos escritos em outro script
sejam usados pelo co´digo que o chamar, desde que estejam dentro do mesmo
projeto. Ja´ a func¸a˜o from especifica o que do script quer importar, facili-
tando na hora da escrita do co´digo. Ao importar apenas o script pessoa.py
ter´ıamos que sempre dizer pra python o que queremos de pessoa.py cada vez
que quise´ssemos criar uma Pessoa ou um Cliente. Ao usarmos from pode-
mos chamar as classes do co´digo pessoa.py como se elas estivessem escritas
dentro do co´digo main.py.
43
Figura 66: Execuc¸a˜o dos me´todos retornPeso() de Pessoa e retornPeso()
de Cliente
2.7.3 Atributo/Me´todos Esta´ticos e Encapsulamento
POO em python permite definir atributos e me´todos esta´ticos. Que
sa˜o atributos acessados somente pela classe e na˜o pelo objeto. Esse tipo de
atributo/me´todo permite o controle de certos aspectos interessantes a` classe
e na˜o a nenhum objeto em particular. Exemplo: A quantidade de clientes
cadastrados em determinado sistema e´ uma informac¸a˜o relativa a` classe Cli-
ente e na˜o a` qualquer objeto cliente que venha a ser instanciado. Assim,esse
atributo pertence a` classe Cliente e na˜o ao objeto cliente.
Atributos esta´ticos sa˜o declarados fora dos me´todos, geralmente no cabec¸a-
lho da classe:
class Cliente(Pessoa):
totalDeClientes = 0
Aqui, criou-se um atributo esta´tico totalDeClientes e inicializamos com o
valor zero. Para acessa´-los dentro da classe basta escrever o nome da Classe.n-
ome do atributo esta´tico.
Cliente.totalDeClientes += 1
Nesse caso, estamos somando 1 cada vez que uma novo objeto tipo Cliente
e´ criado.
from pessoa import Pessoa
from pessoa import Cliente
p = Pessoa(’Jo~ao’, 12, 13, 14)
c = Cliente(p.nome, p.idade, p.altura, p.peso,
’1287236122 90’, ’950.729.080-03’,
’1234 1234 1234 1234 1234’, 100.00)
p.retornaPeso()
44
c.retornaPeso()
print(Cliente.totalDeClientes)
p2 = Pessoa(’Pedro’, 23, 34, 89)
c2 = Cliente(p2.nome, p2.idade, p2.altura, p2.peso,
’1237346342 90’, ’556.181.920-80’,
’3456 1234 4567 1234 6879’, 200.00)
p2.retornaPeso()
c2.retornaPeso()
print(Cliente.totalDeClientes)
Figura 67: Execuc¸a˜o do contador da classe Cliente
Me´todos esta´ticos tem basicamente a mesma func¸a˜o, e para declara´-lo
basta, ao inve´s do self que e´ passado por paraˆmetro obrigatoriamente ao
criarmos um me´todo de objeto, deixamos o campo de paraˆmetros do me´todo
vazio, isso indica a` python que esse me´todo e´ esta´tico e pertence a` classe.
Para exemplificar, sera´ implementado um me´todo esta´tico para informar
o total comprado por todos os clientes. Para isso, sera´ criada uma varia´vel
esta´tica totalDeCompras que ira´ somar o total de compras feito pelos clientes
toda vez que um novo objeto Cliente e´ instanciado; depois um me´todo
esta´tico retornaTotalCompras que nos informara´ esse valor, caso solicitado.
class Cliente(Pessoa):
totalDeClientes = 0
totalDeCompras = 0
45
# bloco de co´digo #
def retornaTotalCompras():
return Cliente.totalDeCompras
No script main.py adiciona-se mais uma linha de co´digo:
print(’Total de Compras: ’, Cliente.retornaTotalCompras())
Figura 68: Retorno da func¸a˜o retornaTotalCompra() com o valor guar-
dado pelo atributo
O encapsulamento em python e´ simples e so´ tem dois estados: public
e private. Encapsulamento de me´todos e atributos e´ a capacidade que a
classe tem de permitir ou na˜o o acesso a eles. Um atributo ou me´todo com
n´ıvel de encapsulamento public pode ser chamado diretamente por qualquer
co´digo. Por exemplo: Se escrevermos p.nome python nos retorna o atributo
nome sem problemas, porque, ao definirmos o atributo nome na classe Pes-
soa na˜o definimos ela como private. E para fazermos isso colocamos dois
underlines ( ) na frente do nome do atributo ou me´todo que desejar se
colocar como private.
self. nome = nome
self. idade = idade
self. altura = altura
self. peso = peso
Agora, o atributo se chama nome, idade, altura, peso e seus valores
so´ podem ser acessados por me´todos do objeto e fica a cargo do programador
46
implementar tais me´todos.
Me´todos tambe´m podem ser encapsulados como private e seguem a mesma
regra dos underlines.
def __retornaNome(self):
print(’Nome do Cliente: ’, self.nome)
def __retornIdade(self):
print(’Idade do Cliente: ’, self.idade)
Agora os me´todos retornaNome(self) e retornaIdade(self) so´ podem
ser acessados por me´todos da classe e na˜o mais fora do co´digo livremente.
O encapsulamento dos atributos e´ um crite´rio do programador que vai
levar em considerac¸a˜o a natureza do projeto que esta´ sendo desenvolvido.
47
3 Refereˆncias
GRUS, J. Data Science do Zero:Primeiras regras com python. Traduc¸a˜o
Welington Nascimento, Rio de Janeiro : Alta Books, 2016.
48

Mais conteúdos dessa disciplina