Upload
others
View
14
Download
0
Embed Size (px)
Citation preview
Fundamentos da Programação
Capítulo 5: Listas
Exemplo (da aula anterior)
Exemplo (da aula anterior)def reconhece(frase):
if isinstance(frase, str):i=0while i <= len(frase)-1 and frase[i] in 'ABCD':
i=i+1if i == 0 or i == len(frase):
return Falsewhile i <= len(frase)-1 and frase[i] in '1234':
i=i+1return i == len(frase)
else:return False
Listas• Tipo estruturado
• Sequência mutável de elementos
Listas – representação externa
Listas – acesso aos elementos• Baseado na posição que o elemento se encontra dentro da lista (índice)
• Nome indexado
Operações sobre listas
Exemplos
Exemplos
Exemplos
Exemplos
Exemplos
Métodos de passagem de parâmetros• Processo de comunicação com funções
• Quando uma função é chamada estabelece-se uma correspondência entre os parâmetros concretos e os parâmetros formais, associação essa que é feita com base na posição que os parâmetros ocupam na lista de parâmetros
• O processo de ligação entre os parâmetros concretos e os parâmetros formais é denominado método de passagem de parâmetros
• Existem vários métodos de passagem de parâmetros. Cada linguagem de programação utiliza um, ou vários, destes métodos
• O Python utiliza a passagem por valor
Métodos de passagem de parâmetrosPassagem por valor• Quando um parâmetro é passado por valor, o valor do parâmetro concreto é
calculado (independentemente de ser uma constante, uma variável ou uma expressão mais complicada), e esse valor é associado com o parâmetro formal correspondente
• A função recebe o valor de cada um dos parâmetros e nenhuma informação adicional
• A única ligação entre os parâmetros concretos e os parâmetros formais é uma associação unidirecional de valores: do ponto de chamada para a função
Métodos de passagem de parâmetrosPassagem por valor
Métodos de passagem de parâmetrosPassagem por valor
Métodos de passagem de parâmetrosPassagem por valor
Métodos de passagem de parâmetrosPassagem por valor
Métodos de passagem de parâmetrosPassagem por referência• Quando um parâmetro é passado por referência, o que é associado ao
parâmetro formal correspondente não é o valor do parâmetro concreto, mas sim a localização na memória do computador que contém o seu valor
• Os parâmetros formais e os parâmetros concretos vão partilhar o mesmo local (dentro da memória do computador)• Qualquer modificação feita aos parâmetros formais reflete-se nos parâmetros concretos• Um parâmetro formal em que seja utilizada a passagem por referência corresponde à
mesma variável que o parâmetro concreto correspondente, apenas, eventualmente, com outro nome
• Em Python o efeito da passagem por referência pode ser ilustrado quando se utiliza um parâmetro concreto correspondente a uma estrutura mutável
Métodos de passagem de parâmetrosPassagem por referência
Métodos de passagem de parâmetrosPassagem por referência
ExemploFunção de dois argumentos, remove_multiplos, que recebe uma lista de inteiros e um inteiro e que devolve a lista que resulta de remover destrutivamente todos os múltiplos do segundo argumento da lista original. Por exemplo:>>> lst = [2, 3, 5, 9, 12, 33, 34, 45]
>>> remove_multiplos(lst, 3)
>>> lst
[2, 5, 34]
O Crivo de EratóstenesAlgoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os números primos inferiores a n1. Começa por criar uma lista com todos os inteiros positivos de 2 a n2. Seleciona o primeiro elemento da lista, o número 2. Enquanto o número
selecionado não for maior que 𝑛, executam-se as seguintes ações: (a) removem-se da lista todos os múltiplos do número selecionado (b) passa-se ao número seguinte na lista
No final do algoritmo, quando o número selecionado for superior a 𝑛, a lista apenas contém números primos
O Crivo de Eratóstenes
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
[2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 25]
[2, 3, 5, 7, 11, 13, 17, 19, 23]
O Crivo de EratóstenesCriação da lista de inteiros de 2 a n
Possibilidadelista = []
for i in range(2, n + 1):
lista = lista + [i]
O Crivo de EratóstenesCriação da lista de inteiros de 2 a n
Possibilidadelista = []
for i in range(2, n + 1):
lista = lista + [i]
Outra possibilidadelista = list(range(2, n + 1))
O Crivo de EratóstenesA função crivo
def crivo(n):
from math import sqrt
lista = list(range(2, n+1))
i = 0
while lista[i] <= sqrt(n):
remove_multiplos(lista, lista[i])
i = i + 1
return lista
Porque não usar um ciclo for?
O Crivo de EratóstenesRemoção dos múltiplos de um número (ciclo for)
remove_multiplos(l, el)
for i in range(i+1, len(l):if l[i] % el == 0:
del(l[i])
O Crivo de EratóstenesRemoção dos múltiplos de um número (ciclo for)
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
eli
i=2del(l[2])
[2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
eli
i=3saltámos por cima do 5!
O Crivo de EratóstenesRemoção dos múltiplos de um número (ciclo for)
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
eli
i=23del(l[22])def remove_multiplos(l, i):
el = l[i]
for j in range(len(l)-1, i, -1):
if l[j] % el == 0:
del(l[j])
Falta o return l?