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:
1.def percorre_lista_a(lista):
2.    """ Imprimir os elementos nas posições ímpares."""
3.    for indice in range(len(lista)):
4.        if indice % 2 == 1:
5.            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:

1.def percorre_lista_b(lista):
2.    """Devolve os elementos nas posições ímpares."""
3.    resultado = []
4.    for indice in range(len(lista)):
5.        if indice % 2 == 1:
6.            resultado.append(lista[indice])
7.    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:
1.def percorre_lista_c(lista):
2.    """Devolve os elementos que são ímpares."""
3.    resultado = []
4.    for elemento in lista:
5.        if elemento % 2 == 1:
6.            resultado.append(elemento)
7.    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:
01.def percorre_lista_d(lista):
02.    """Devolve o maior elemento e respectivo índice."""
03.    maior = lista[0]
04.    indice_maior = 0
05.    for indice,elemento in enumerate(lista):
06.        if elemento > maior:
07.            maior = elemento
08.            indice_maior = indice
09.    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