Escolar Documentos
Profissional Documentos
Cultura Documentos
engenharia
1
Instalação
• Windows
• Linux
• macOS
Anaconda
Juízes Online
• DMOJ (https://dmoj.ca/)
• TIMUS
• USACO
2
Formato de aula – Parte 1
• Livro: ZINGARO, D. Learn to Code by Solving Problems:
A Python Programming Primer. No starch press.
• Resolver problemas e aprender as estruturas em python
• Atividades:
– Problemas do DMOJ (N1);
– Seminário resolvendo um problema prático utilizando
Python (acadêmico ou professional) (N2)
– Prova (N3)
3
Atividade: Problemas DMOJ (N1)
4
Atividade: Seminários (N2)
O trabalho consiste em desenvolver um código em python para resolver um
problema real do seu dia a dia de trabalho ou de sua área de estudo acadêmico.
Ex: cálculo de curto-circuito automatizado (Exemplo do professor),
organização e filtro de dados (Exemplo do professor), registro de informações
automatizado em website (Exemplo do professor), simulador de circuitos RLC
no domínio do tempo ou no domínio da frequência, problema do caixeiro
viajante por método XXXX, etc. O trabalho deverá contar com:
1. Apresentação oral, com explicação do problema, que metodologia foi
utilizada em python para sua solução e demonstração do código para a
turma;
2. Relatório escrito alinhado à apresentação oral, com maior detalhamento.
3. Códigos em python;
5
Introdução geral sobre linguagem
python
• Data de 1991, lançada por Guido van Rossum, na
Holanda
• Sem ; Opcional (facilidade de leitura)
• Sem delimitadores {} Linguagem Identada
• Desafio: FIBONACCI
6
Introdução geral sobre linguagem
python
7
Introdução geral sobre linguagem
python
• Multiplataforma
• Portabilidade
• Livre
• Extensibilidade
• OO*
• Tipagem automática e forte
• Legibilidade
• Arquivos
• Uso interativo
8
Introdução geral sobre linguagem
python
• Exemplos práticos:
9
Introdução geral sobre linguagem
python
• Numpy
• Pandas
• Ploty
• Selenium
10
Python História
x = 37
y = x +
2 x =
20
► A. 39
► B. 22
► C. 35
► D. 20
► E. 18
Teste de conceito
Qual o valor de y após a execução deste código?
x = 37
y = x -
2 x =
20
► A. 39
► B. 22
► C. 35
► D. 20
► E. 18
Strings
• Métodos com
strings: .upper(), .strip(), .strip(‘a’), .count(), .count(‘a’)
23
Strings
Usamos strings ao chamar a print e a input
Uma string é uma sequência de caracteres
Para indicar que algo é uma cadeia de caracteres, colocamos aspas
simples ou duplas em torno dela
►Use + para concatenação de cadeia de caracteres, * para
repetição de cadeia de caracteres
► Estes são exemplos de operadores sobrecarregados,
uma vez que funcionam de forma diferente dependendo do tipo
de operandos
►O que acontece se tentarmos usar + com uma cadeia de
caracteres e um número?
► Erro: + não sabe o que fazer!
► por exemplo, '3' + 4 deve ser a string '34' ou o número
7?
24
Strings
25
Strings
26
Strings
Qual é o valor de val depois de executar este código?
val = 0
for i in ’ab’:
for j in ’cd’:
val += 1
► A. 1
► B. 2
► C. 4
► D. 8
► E. 16
Strings
Qual é o valor de val depois de executar este código?
val = 0
for i in ’abc’:
for j in ’cde’:
val += 1
► A. 1
► B. 3
► C. 6
► D. 9
► E. 27
Strings
►Como uma string é uma sequência, podemos usar a
notação de índice Python para extrair seus caracteres
►Assuma s é uma string
►Então, s[i] para i ≥ 0 extrai o caractere i da
esquerda
►Tenha cuidado: o primeiro caractere de uma cadeia
de caracteres tem índice 0, não 1!
►Também podemos usar um índice negativo i para
extrair um caractere que começa da direita
►e.g. se s = "abcde", então
► s[0] é a
► s[1] é b
► s[-1] é e
► s[-3] é c
Strings
►A. kings
►B. king
►C. Viking
►D. Vikings
►E. ikings
Strings
►A. st V
►B. ost V
►C. iking
►D. st Vi
►E. Viking
Strings
►A. st V
►B. ost V
►C. iking
►D. st Vi
►E. Viking
Strings
►Método: uma função específica para um tipo de objeto
►Os métodos são chamados usando a sintaxe object.method
s = "Hi CSC108!"
s.lower()
lower(s) # wrong!
► A. 11
► B. ss
► C. 10
► D. Miaaiaaauga’
► E. n.d.a.
Strings
Os objetos de cadeia de caracteres são
imutáveis: significa que "não pode mudar"
Os métodos que "parecem" que estão alterando
a = a =
uma cadeia de caracteres estão, na verdade, ’hi’ ’hi’
criando um novo objeto de cadeia de caracteres b = a b = a
"test"
Operações com números
• Inteiros e float – Operações: +,-,*,/,// (divisão inteira), %
(resto), ** (exponenciação)
• Entrada: input()
• Exibir: print()
38
Condicional
• Condicional SE: if CONDITION:
• Identação
39
Operadores relacionais
a=3
b = (a != 3)
print(b)
A. Verdadeiro
B. Falso
C 3º
►D. Erro de sintaxe
41
Operadores relacionais
a=3
b = (a == 3)
print(b)
A. Verdadeiro
B. Falso
C 3º
►D. Erro de sintaxe
42
Operadores relacionais
43
Operadores relacionais
A. a == b == 5
B. a == b or a == 5
C. a == b and a == 5
D. a == (b == 5)
44
Operadores relacionais
►A. True
►B. False
45
If e If-Else
Para fazer algo se uma condição for verdadeira e nada se a
condição for falsa:
i f <condição>:
<Sequência dos instruções>
i f <condição>:
<Sequência dos instruções2>
Else:
<Sequência dos instruções2>
Teste
Qual é o valor de x após a execução desse código?
x=5
i f x > 2:
x = -3
x=1
else:
x = 3
x = 2
► A. −3
► B. 1
► C. 2
► D. 3
► E. 5
Teste
Qual é o valor de x após a execução desse código?
x=1
i f x > 2:
x = -3
x=1
else:
x = 3
x = 2
► A. −3
► B. 1
► C. 2
► D. 3
► E. 5
Multi-Way Ifs
i f <condição-1>:
<Instruções1> e l i f
<condition-2>:
<Instruções2>
elif . . .
...
els
e:
<
Ins
tru
çõ
es-
n>
P
ens
e
nis
so
Teste
i f temperature > 0 :
p ri n t ("ab o v e f r e e z i n g " )
e l i f temperature == 0 :
print("at freezing")
else:
p r i n t ("b el o w
freezing")
i f temperature > 0 :
p ri n t ("ab o v e
freezing") A. Sim
e l i f temperature == 0 :
B. Não
print("at freezing")
Teste
i f temperature > 0 :
p ri n t ( "ab o v e f r e e z i n g " )
e l i f temperature == 0 :
print("at freezing")
else:
p ri n t ("b el o w
freezing")
print("at freezing")
e l i f temperature <= 0 : A. Sim
p ri n t ( "b el o w f r e e z i n g " ) B. Não
else:
Teste
x=5
i f x < 15:
i f x > 8:
print(’on
e’)
else:
print(’two’)
else:
print(’thr
ee’)
Qual é a
saída?
A. one
B. two
C. t h r e e
D. Mais de
Ifs aninhados
s = i n p u t ( " E n t e r PH v a l u e : " )
i f len(s) > 0:
ph = f l o a t ( s )
i f ph < 7 . 0 :
print(ph,
"is
acidic.")
e l i f ph > 7 . 0 :
print(ph, "is basic.")
else:
print(ph, "is
neutral.")
else:
print("No pH value was
given!")
Loops
Até agora, sabemos sobre um tipo de loop: for
Ele requer uma sequência (por exemplo, uma
sequência de intervalo ou uma sequência de
caracteres) para iterar
Outro tipo de loop é o loop while: ele testa
repetidamente uma condição, executando todo o
corpo do loop se for True, e terminando o loop se for
False
Útil quando não há sequência
►Comumente usado quando não sabemos quantas
55
Loops
•Quantas vezes esse loop será executado? Nós não
sabemos – então é um while loop!
• while response != ’y’ and response != ’n’:
• response = input(’Type y or n to continue: ’)
O que é impresso pelo código a seguir? (A saída está em uma linha para
economizar espaço.)
x = 6
while x > 4:
print(x)
x = x - 1
►A. 6 5
►B. 6 5 4
►C. 5 4
►D. 5 4 3
56
►E. 6 5 4 3
Loops
Use for quando:
* Você deseja percorrer uma sequência inteira sem parar
* O número de iterações não depende da entrada do
usuário
*O incremento para a variável de loop é o mesmo em
cada iteração
s = ’abc’
for count in range(len(s)):
print(’Index {0} is {1}’.format(count, s[count]))
count = 0
while count < len(s):
print(’Index {0} is {1}’.format(count, s[count]))
count += 1
57
Loops
valid = False
while not valid:
s = input ("Enter a password: ")
valid = len(s) == 5 and s[:2] == ’xy’
58
Loops
Há várias maneiras de escrever um loop cujo corpo é necessário
para executar pelo menos uma vez
Tornar artificialmente a condição verdadeira antes
que o loop comece (como
inputloop.py)
Copie algum código de loop acima do loop para
tornar a condição verdadeira
Use True como condição e break para sair do loop
break causa o término imediato do loop
►break pode dificultar a leitura do código se usado
incorretamente
59
Loops
Uma senha válida é aquela que tem comprimento 5 e
começa com xy. Essas senhas devem nos tirar do
loop. Qual deles faz isso?
A.
while True:
s = input ("Enter a password: ")
if len(s) == 5 and s[:2] == ’xy’:
break
►B.
s = input ("Enter a password: ")
while len(s) == 5 and s[:2] == ’xy’:
s = input ("Enter a password: ")
►C. A e B certas
►D. NDA
60
Loops
Qual é a saída desse código? (A
saída está em uma linha aqui para
economizar espaço.)
n = 3
while n > 0:
if n ==
5:
n = -99
print(n) n
= n + 1
►A. 3 4
►B. 3 4
5
►C. 3 4
-99
►D. 3 4
5 -99 61
Listas
● Suponha que desejamos guardar notas de alunos.
● Com o que sabemos, como armazenarıamos 3 notas?
62
Listas
● Com o que sabemos, como armazenarıamos 130 notas?
63
Listas
● Uma lista em Python é uma estrutura que armazena vários dados, que
podem ser de um mesmo tipo ou não.
64
Listas
● Coleção de valores referenciados por um identificador único.
identificador = [dado1,dado2,...,dadon]
● Caracterısticas:
○ Acesso por meio de um ındice inteiro.
○ Listas podem ser modificadas.
○ Pode-se incluir e remover itens de listas.
65
Listas
● Lista de inteiros:
66
Listas
Uma lista é uma sequência, como uma string . No
entanto, em comparação com as strings :
Os elementos da lista podem ser de qualquer tipo;
Os elementos de uma string são apenas caracteres;
As listas são mutáveis; strings são imutáveis
As listas podem ser heterogêneas (elementos dentro
da mesma lista podem ter tipos diferentes)
•As listas podem ser aninhadas em outras listas
67
Listas
Alguns métodos estão disponíveis para listas e
strings:
68
Listas
•lst = [’abc’, ’def ’, ’ghi’]
•lst[1] = ’wxyz’
•print(len(lst))
70
Listas
Lista notas : tamanho n = 5, ou seja, os ındices válidos são de 0 até 4 (5 − 1).
71
Listas
● Um elemento de uma lista em uma posição especıfica tem o mesmo
comportamento que uma variável simples.
print(notas[0]+2)
10.0
notas[3] = 0.5
print(notas)
[8.0, 5.5, 9.3,
0.5, 3.1]
72
Listas
•for element in l s t :
• <do something, using element>
74
Listas
● Quais valores serão armazenados em cada posição da lista após a
execução deste código abaixo?
lista = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
for i in
range(10):
lista[i] = 5*i
print(lista)
75
Listas
● Lembre-se que o for na verdade faz a variável de controle assumir
todos os valores de uma lista. Assim:
76
Listas
● Índices negativos se referem à lista da direita para a esquerda:
77
Listas
● Listas em Python suportam uma operação conhecida
como slicing, que consiste em obter uma sub-lista
contendo os elementos de uma posição inicial até
uma posição final de uma lista.
79
Listas
Use dir(list) para obter uma lista de métodos de lista
Use help(list.x) para obter ajuda sobre o nome do método x
L.append(element): adicionar elemento ao final de L
L.extend(lst): adicione todos os elementos de lst ao final de L
L.insert(index, element): inserir elemento no índice de L, empurrando
elementos posteriores para a frente
L.pop(): remova e devolva o elemento no final de L
L.pop(index): remova e retorne o elemento no índice de L
L.remove(element): remover a primeira ocorrência do elemento de L
►L.sort(): ordenar os elementos de L
►L.del(index): remove da lista o item no índice de L 80
►L.Count(element): conta o número de elementos com o valor de
Listas
Qual é o valor de a depois que esse código é
executado?
•a = [2, 4, 6, 8]
•a.remove(4)
•a.pop(2)
►A. [2, 4]
►B. [6, 8]
►C. [2, 6]
►D. [2, 8]
►E. Nada; o código produz um erro 81
a = [ 1 , 2 , 3 , 4 , 5]
b = a # referencia
compartilhada
a b
a b
1 999 3 4 5
Para evitar o comportamento de compartilhamento, uma
segunda lista deve ser criada. A sintaxe da fatia cria uma nova
lista:a = [ 1 , 2 , 3 , 4 , 5 ]
b = a [ : ] # duas listas agora!
a b
1 2 3 4 5
b [ 1 ] = 999 # a n ã o é m o d i f i c a d o
a b
2 1 3 999 4 5
a = [[1, 2, 3], [4, 5]]
b = a[:]
a
1 2 3 4 5
1 2 3
l s t 1 = [ 1 , 2 , 3]
lst2 =[lst1] +[lst1]
l s t 2 [ 0 ] [ 1 ] = 99 # l s t 1 modificado!
lst2
lst1
1 2 3
Usando range
A função range gera sequências de inteiros
Se chamarmos range(n), inteiros de 0 a n - 1 são gerados
Se chamarmos range(m, n), inteiros de m a n - 1 são gerados
Se chamarmos range(m, n, s), inteiros de m a n - 1, em
incrementos de s, são gerados
► Use list(range(...)) para converter o objeto range em uma
lista para exibição
ConcepTest
Qual é a lista produzida por este
código?
list(range(2, 7, 3))
► A. [ 2 , 5 , 8 ]
► B. [ 2 , 5 ]
► C. [ 2 , 5 , 7 ]
► D. [ 2 , 3 , 4 , 5 , 6 , 7 ]
ConcepTest
Qual é a lista produzida por este
código?
list(range(4, 9, 4))
► A. [ 4 , 8 ]
► B. [ 4 , 8 , 12]
► C. [ 4 , 8 , 9 ]
► D. [ 4 , 5 , 6 , 7 , 8 , 9 ]
O que é impresso por este
código? ConcepTest
l s t = [ 3 , 6 , 9]
sum = 0
counter = 0
while counter < l e n ( l s t ) :
sum += counter
counter += 2
p ri n t (su m)
► A. 18
► B. 6
► C. 2
► D. 9
► E. None of the above
O que é impresso por este
código? ConcepTest
l s t = [ 3 , 6 , 9]
sum = 0
counter = 0
while counter < l e n ( l s t ) :
sum += counter
counter += 2
p ri n t (su m)
► A. 18
► B. 6
► C. 2
► D. 9
► E. None of the above
Listas
● Em algumas situações é necessário declarar e já atribuir um conjunto de
valores constantes para uma lista.
● Dentro da lista incluımos uma construção com um laço que gerará
valores iniciais para a lista.
x = [0 for i in range(5)]
print (x)
[0, 0, 0, 0, 0]
92
Funções
def é uma
palavra-chave;
ele tem um
significado
especial para
Python e não
pode ser usado
como uma
variável ou nome
de função
A instrução
return encerra a
função e
determina o
valor retornado
ao chamador
Se não houver
retorno, a função
Qual dos itens a seguir contém uma chamada
de função?
(1)
type(4.5)
(2)
def add_one(x):
return x + 1
(3)
area(2, 9)
(4)
print("Hello")
► A. (3) only
► B. (2) and
(3)
► C. (1), (3),
and (4)
ConcepTest
Qual é a saída desse código?
def c a l c u l a t e ( w, x , y ) :
a=x
b = w+ 1
return a + b + 3
print(calculate(3, 2,
0))
► A. 5
► B. 9
► C. 0
► D. 3
ConcepTest
Qual é a saída deste código?
def c a l c u l a t e ( w, x , y ) :
a=x
b = w+ 1
return a + b + w
print(calculate(1, 2,
0))
► A. 3
► B. 4
► C. 5
► D. 6
ConcepTest
Quais são os bugs no código a seguir?
def add_one(x):
return x + 1
x=2
x = x + add_one(x)
( s t r , s t r ) -> s t r
Receita de Design de Função...
Step 5: put it all together and write the function. Let’s do that
now!
Módulos Python
Os módulos são usados para agrupar funções
Usar a importação para disponibilizar as funções de um módulo
Qualquer arquivo que termine em .py pode atuar como um módulo
import executa todo o código em um arquivo .py, mas apenas na
primeira vez (ou seja, se você fizer alterações em um arquivo e tentar
importá-lo novamente, nada acontecerá)
Se importamos module_name, acessamos suas funções através de
module_name.nome_da_função
► Para acessar function_name sem precisar digitar o module_name
prefixo, podemos usar de module_name function_name de
importação
Funções: Motivação
x = 5
y = 8
z = 10
f(x, y, z)
a = 20
first(a)
print(a)
Qual é a
saída
desse
código?
A. 8
B. 20
C. Erro,
ConcepTest
def
first(a):
a = 8
return a
a = 20
a = first(a)
print(a)
What is the
output of this
code?
► A. 8
► B. 20
Return vs. Print
def f2():
print(5)
def f3():
return
print(5)
Qual dos
seguintes
atribui 5 a
x?
A. x = f1()
B. x = f2()
C. x = f3()
Escolhendo parâmetros
def b(val):
num = 8
print(a(1))
b(2)
Qual é a saída
desse código?
A. 1
B. 2
C. 4
D. 8
E. Erro devido
ConcepTest
def
a(num):
num = 4
return 2
def b(val):
val = 8
print
(a(1))
b(2)
Qual é a saída
desse código?
A. 1
B. 2
C. 4
D. 8
Tuplas
Listas de duplas
Sequências, subscritos, fatias
Somente métodos de contagem e índice
Criado com parênteses (não entre colchetes)
Imutável
► Fornece integridade de dados (por exemplo, sem
alterações possíveis por meio de aliasing)
ConcepTest
if sighting not in
kinds:
kinds.append(sighting)
... missing code
ind = kinds.index(sighting)
counts[ind] = counts[ind] +
1
bird_dict = {
’peregrine falcon’:1, ’harrier falcon’:5,
’red-tailed hawk’:2, ’osprey’:11}
d = {3:4}
d[5] = d.get(4, 8)
d[4] = d.get(3, 9)
d = {1:5}
d[2] = d.get(1, 6)
d[4] = d.get(3, 7)
bird_dict = {
’peregrine falcon’:1, ’ h a r r i e r falcon’:5,
’ r e d - t a i l e d hawk’:2, ’osprey’:11}
bird_dict = {
1:’peregrine falcon’, 5:’harrier falcon’,
2 : ’ r e d - t a i l e d hawk’, 11:’osprey’}
Invertendo um dicionário
{ 1 : 4 , 2 : 5 , 4:5}
Qual a melhor inversão desse dicionário?
A. {4:1, 5:[2,4]}
B. {4:[1], 5:[4,2]}
C. {4:[1], 5:[2,4]}
D. Dois dos itens acima são igualmente bons
E. Todos os itens acima são igualmente bons
ConcepTest
A. Dezembro
B. Julho
► C. Tanto julho quanto dezembro são
igualmente cobertos
ConcepTest
A. Dezembro
B. Julho
► C. Tanto julho quanto dezembro são igualmente
cobertos
Sets
• Um set em Python é uma coleção de itens
únicos (distintos).
• Para o set, não há índice, ou seja, a ordem
não é importante (diferente da lista)
• Numa tradução para o campo da
matemática ou para o português, a melhor
tradução de set é conjunto (assim como
para as lists é vetor e/ou listas)
138
Sets
# Exemplo de criação de sets.
numeros = [1, 2, 2, 3, 3, 3]
numeros_distintos = set(numeros)
print("Números: ", numeros)
print("Números distintos: ",
numeros_distintos)
Números: [1, 2, 2, 3, 3, 3]
Números distintos: {1, 2, 3}
139
Sets
# Exemplo de criação de sets.
numeros = [1, 2, 2, 3, 3, 3]
numeros_distintos = set()
for num in numeros:
numeros_distintos.add(num)
print("Números: ", numeros)
print("Números distintos: ", numeros_distintos)
Números: [1, 2, 2, 3, 3, 3]
Números distintos: {1, 2, 3}
140
Sets
• Para inserir um elemento em uma lista, podemos usar a
função insert ou a função append
• Para inserir um elemento em um set podemos usar
somente a função add ou a função update
• Essa diferença decorre do fato de que em uma lista temos
um controle da posição dos elementos: insert nos permite
inserir um elemento em uma posição específica da lista e
append adiciona um elemento ao final da lista.
• Em um set não temos controle sobre a ordem na qual os
elementos são armazenados. A única garantia que temos é
que elementos duplicados não serão inseridos.
141
Sets
• Para remover um elemento de um conjunto em Python,
podemos usar a função remove ou a função discard
(remove so deve ser usada se houver a certeza que o
elemento está no conjunto)
A = {0, 1, 3, 5, 7, 9}
B = {0, 2, 4, 6, 8}
C = A.union(B) # C = A | B
print(C)
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
144
Sets
Pode-se utilizar, como na matemática, união, intersecção e
diferença.
A = {0, 1, 3, 5, 7, 9}
B = {0, 2, 4, 6, 8}
C = A & B # C = A.intersect(B).
print(C)
145
Sets
146
Sets
set() Cria um novo set
for x in set Acessa cada elemento de um set
if elemento in set Verifica se um elemento está em um set
if elemento not in set Verifica se um elemento não está em um set
len(set) Retorna o tamanho de um set (quantidade de elementos)
148
Comparações
149
Orientação a Objetos
• A Programação Orientada a Objetos (POO) é um
paradigma de programação baseado no conceito
de Classes e Objetos.
• Classes podem conter dados e código:
• Dados na forma de campos (também chamamos
de atributos ou propriedades); e
• Código, na forma de procedimentos
(frequentemente conhecido como métodos).
150
Orientação a Objetos
• Uma importante característica dos objetos é que
seus próprios métodos podem acessar e
frequentemente modificar seus campos de dados:
objetos mantém uma referência para si mesmo, o
atributo self no Python.
• Na POO, os programas são projetados a partir de
objetos que interagem uns com os outros.
• Esse paradigma se concentra nos objetos que os
desenvolvedores desejam manipular, ao invés da
lógica necessária para manipulá-los. 151
Orientação a Objetos
• As Classes são tipos de dados definidos pelo
desenvolvedor que atuam como um modelo para
objetos. Pra não esquecer mais: Classes são
fôrmas de bolo e bolos são objetos :wink:
• Objetos são instâncias de uma Classe. Objetos
podem modelar entidades do mundo real (Carro,
Pessoa, Usuário) ou entidades abstratas
(Temperatura, Umidade, Medição, Configuração).
152
Orientação a Objetos
• Métodos são funções definidas dentro de uma
classe que descreve os comportamentos de um
objeto. Em Python, o primeiro parâmetro dos
métodos é sempre uma referência ao próprio
objeto.
• Os Atributos são definidos na Classe e
representam o estado de um objeto. Os objetos
terão dados armazenados nos campos de atributos.
153
Princípios da POO
• Encapsulamento: juntar ou encapsular, dados e
comportamentos relacionados em entidades únicas, que
chamamos de objetos.
• O princípio do Encapsulamento também afirma que
informações importantes devem ser contidas dentro do
objeto de maneira privada e apenas informações
selecionadas devem ser expostas publicamente.
154
Princípios da POO
• Abstração: O mesmo se aplica à Classes e Objetos: nós
podemos esconder atributos e métodos do mundo exterior.
E isso nos traz alguns benefícios!
• Primeiro, a interface para utilização desses objetos é muito
mais simples, basta saber quais “botões” utilizar.
• Também reduz o que chamamos de “Impacto da
mudança”, isto é: ao se alterar as propriedades internas da
classes, nada será alterado no mundo exterior, já que a
interface já foi definida e deve ser respeitada.
155
Princípios da POO
• Herança: possibilita a reutilização de código comum em
uma relação de hierarquia entre Classes.
Todos eles são Automóveis, correto? Todos possuem característica semelhantes, não é mesmo?
Podemos pensar que Automóveis aceleram, freiam, possuem mecanismo de acionamento de faróis,
156 entre
outros.
Princípios da POO
• Polimorfismo: Classes filhas utilizando código comum da
Classe acima, ou Classe pai.
158
Princípios da POO
• Exemplo prático: Classe Fraction
Fonte: https://panda.ime.usp.br/panda/static/pythonds_pt/01-Introducao/13-poo.html
159
Princípios da POO
• Exemplo prático: Classe Fraction
160
Princípios da POO
• Exemplo prático: Classe Fraction
def num_vowels(s):
Example 2: Removing Spaces
Write the following function that returns a string that is the same
as s except that spaces are removed.
def remove_spaces(s):
Concep
Test
def
mystery(s):
new_s = ’’
for c in s:
new_s = c +
new_s return
new_s
What is a good
description of this
function?
► A. Return a copy
of s
► B. Return the
reverse of s
165