Você está na página 1de 16

Introdução à

Programação B
2019/20

T09 - Listas
Aula anterior
• Vectores: Tuplos e listas.

• Sequência de números.

• Ciclos For.

Introdução à Programação B / © DI-FCT-UNL 2


Ciclos While e For
• Um ciclo for pode ser sempre escrito à
custa de um ciclo while:

for <variável> in <sequência>: for elem in s:


<instrucoes> sum = sum + elem

index = 0
while <condição>: while index < len(s):
<instrucoes> sum = sum + s[index]
index = index + 1

Introdução à Programação B / © DI-FCT-UNL 3


Como escolher que ciclo usar?
• Um ciclo for deve ser usado quando o
número de iterações está explicitamente
definido à partida.

• Percorrer uma sequência do início ao final.

• Um ciclo while deve ser usado quando o


número de iterações não está explicitamente
definido à partida.

• As instruções do ciclo são iteradas


enquanto a condição do ciclo for verdade.

Introdução à Programação B / © DI-FCT-UNL 4


Estação Meteorológica
• Implementar um programa que recebe várias
medições de temperatura ao longo do tempo
e que permite várias operações: listar as
temperaturas registadas; calcular o máximo,
o mínimo e a média das temperaturas
registadas, etc.

Introdução à Programação B / © DI-FCT-UNL 5


Função min_temperature
def min_temperature(samples):
"""min_temperature : int list [temperatures] -> int
Descricao: Devolve a temperatura minimo registada na
lista samples.
Exemplos: min_temperature([4, 13, 1]) -> 1;
min_temperature([-4, -12, -3]) -> -12;
"""
min = None
for temp in samples:
if min == None or temp < min:
min = temp

return min

Introdução à Programação B / © DI-FCT-UNL 6


Função above_temperature
def above_temperature(temp, samples):
"""above_temperature : int x int list [temperatures] -> int
Descricao: Devolve o numero de temperaturas superiores a
temp na lista samples.
Exemplos: above_temperature(4, [4, 13, 12, 6]) -> 3;
above_temperature(12, [12, 6, 9, 5]) -> 0;
"""
count = 0
for t in samples:
if t > temp:
count = count + 1

return count

Introdução à Programação B / © DI-FCT-UNL 7


Função count_temperature
def count_temperature(temp, samples):
"""count_temperature : int x int list [temperatures] -> int
Descricao: Devolve o numero de vezes que a temperatura
temp ocorre na lista samples.
Exemplos: count_temperature(4, [4, 13, 4, 6]) -> 2;
above_temperature(12, [13, 6, 9, 5]) -> 0;
"""
count = 0
for t in samples:
if t == temp:
count = count + 1

return count

Introdução à Programação B / © DI-FCT-UNL 8


Função is_repeated
def is_repeated(temp, samples):
"""is_repeated : int x int list -> bool
Descricao: Devolve True se temp ocorreu mais do que uma
vez em samples.
Exemplos: is_repeated(13, [13, 13, 12, 6, 7, 13]) -> True;
is_repeated(4, [13, 13, 12, 6, 7, 13]) -> False;
is_repeated(4, [13, 4, 12, 6, 7, 13]) -> False;
"""
count = 0
for t in samples: Vai percorrer a lista samples
if t == temp: até ao final, mesmo depois de
count = count + 1
já saber a resposta.
return count >= 2

Não é eficiente! A lista samples


pode ter 1 milhão de registos !
Introdução à Programação B / © DI-FCT-UNL 9
Função is_repeated
def is_repeated(temp, samples):
"""is_repeated : int x int list -> bool
Descricao: Devolve True se temp ocorreu mais do que uma
vez em samples.
Exemplos: is_repeated(13, [13, 13, 12, 6, 7, 13]) -> True;
is_repeated(4, [13, 13, 12, 6, 7, 13]) -> False;
is_repeated(4, [13, 4, 12, 6, 7, 13]) -> False;
"""
count = 0
index = 0
while index < len(s) and count < 2:
if samples[index] == temp:
count = count + 1
index = index + 1

return count == 2
O ciclo não continua se já
sabemos a resposta!
Introdução à Programação B / © DI-FCT-UNL 10
Histograma

6
6
5 5
10 (3): @@@
4 11 (5): @@@@@
3
3 12 (0):
2 13 (6): @@@@@@
14 (4): @@@@
0
0
10 11 12 13 14
Temperaturas

Introdução à Programação B / © DI-FCT-UNL 11


Função auxiliar histogram_line
def histogram_line(temp, times):
"""build_histogram_line : int int -> str
Descricao: Devolva a string que representa a linha do
histograma referente ‘a temperatura temp com times
ocorrencias.
Exemplos: histogram_line(12,6) -> "12 (6): @@@@@@“
histogram_line(-5,0) -> "-5 (0): "
"""
output = str(t) + " (" + str(times) + "): "
while times > 0:
output = output + "@"
times = times - 1
return output

Introdução à Programação B / © DI-FCT-UNL 12


Função print_histogram
def max_temperature(samples):
...
def min_temperature(samples):
...
def count_temperature(temp, samples):
...
def histogram_line(temp, times):
...

def print_histogram(samples):
"""print_histogram : int list -> .
Descricao: Apresenta o histograma das temperaturas
registadas na lista samples.
"""
temp_max = max_temperature(samples)
temp_min = min_temperature(samples)
for t in range(temp_min, temp_max):
times = count_temperature(t, samples)
print(histogram_line(t, times))
return
Introdução à Programação B / © DI-FCT-UNL 13
Função print_histogram: Sem decomposição

def print_histogram(samples):
"""print_histogram : int list -> .
Descricao: Apresenta o histograma das temperaturas
registadas na lista samples.
"""
temp_max = max_temperature(samples)
temp_min = min_temperature(samples)
for t in range(temp_min,temp_max):
times = count_temperature(t, samples)
output = str(t) + " (" + str(times) + "): "
while times > 0:
output = output + "@"
times = times - 1
print(output)
return

Introdução à Programação B / © DI-FCT-UNL 14


Exemplo: Função principal
def main():
temperaturas = []

operacao = input("Qual o comando a executar? ")


while operacao != "TERMINAR":
if operacao == "REGISTAR":
temp = int(input("Temperatura a registar: "))
temperaturas.append(temp)
elif operacao == "MEDIA":
print("Temperatura media:", average_temperature(temperaturas))
elif operacao == "MAXIMA":
print("Temperatura maxima:", max_temperature(temperaturas))
elif operacao == "CONTAR":
temp = int(input("Temperatura: "))
print("A temperatura", temp, "foi registada",
count_temperature(temp, temperaturas), "vezes.")
...
elif operacao == "HISTOGRAMA":
print_histogram(temperaturas)
else:
print("Comando desconhecido.”)
operacao = input("Qual o comando a executar? ")

print("Adeus!")
return
Introdução à Programação B / © DI-FCT-UNL 15
Resumo da aula
• Algoritmos sobre listas.

• Próxima aula:

• Passagem de parâmetros

• Strings

Introdução à Programação B / © DI-FCT-UNL 26

Você também pode gostar