sábado, 23 de janeiro de 2010

Equívocos IV

Programar é um exercício em que se procura equilibrar diferentes objectivos, por vezes contraditórios. Um exemplo? Clareza e eficiência! Quando estamos a aprender a programar manda a prudência que se dê prioridade à clareza, o que resulta normalmente num código simples. Acontece que nem sempre o que é claro para uma pessoa é também claro para outra. Isto da clareza é um pouco subjectivo, mas muitas vezes está ligado a desconhecimento sobre o que é possível fazer com a linguagem.

Vem tudo isto a propósito de um comentário feito por um de vocês a uma solução minha de um dos problemas do exame normal. Esse comentário, fez-me pensar que ainda há quem não sabe como se pode percorrer uma sequência. Embora posteriormente tenha ficado convencido não ser esse o caso do vosso colega resolvi manter este post. Vamos então a isso usando um exemplo simples com listas. O modo de percorrer a lista depende do que queremos fazer.

Exemplo A: imprimir os elementos nas posições ímpares:

def percorre_lista_a(lista):
""" Imprimir os elementos nas posições ímpares."""
for indice in range(len(lista)):
if indice % 2 == 1:
print lista[indice]

A referência é feita às posições e só nos é pedido para imprimir. Logo, vamos percorrer pelos índices e não precisamos guardar os elementos mas apenas imprimir.

Exemplo B: Devolver os elementos nas posições ímpares:


def percorre_lista_b(lista):
"""Devolve os elementos nas posições ímpares."""
resultado = []
for indice in range(len(lista)):
if indice % 2 == 1:
resultado.append(lista[indice])
return resultado

Aqui introduzimos uma variável que vai ficar ligada a um acumulador, uma lista.

Exemplo C: Devolver os elementos que são ímpares:

def percorre_lista_c(lista):
"""Devolve os elementos que são ímpares."""
resultado = []
for elemento in lista:
if elemento % 2 == 1:
resultado.append(elemento)
return resultado

Como queremos os elementos vamos percorrer por conteúdo. Filtramos na mesma os que são ímpares e guardamos os resultados na lista de nome resultado.
Exemplo D: Devolver o elemento maior e sua posição:

def percorre_lista_d(lista):
"""Devolve o maior elemento e respectivo índice."""
maior = lista[0]
indice_maior = 0
for indice,elemento in enumerate(lista):
if elemento > maior:
maior = elemento
indice_maior = indice
return (maior, indice_maior)

Aqui necessitamos das duas coisas: as posições e o conteúdo. Um modo simples de conseguir isso é usar o método enumerate. Não esquecer de colocar a seguir a for o nome das variáveis que vão ficar associadas, em cada etapa do ciclo, ao índice e ao conteúdo!

Sem comentários:

Enviar um comentário