Introdução à programação e aos algoritmos

João Araujo Ribeiro · Capítulo 73 de 103

Páginas do PDF

Introdução à programação e aos algoritmos

5.13 Tuplas

EXERCÍCIO 5.29

 

Escreva um programa que crie um dicionário relacionando o nome dos estados

brasileiros (como chaves) às suas siglas. O programa deve solicitar ao usuário o

nome de um estado, e chamar uma função que devolve a sua sigla.

 

EXERCÍCIO 5.30

 

Escreva um programa que crie um dicionário relacionando o nome dos estados

brasileiros (como chaves) às suas siglas. O programa deve perguntar ao usuário o

nome de um estado e chamar uma função que devolva a sua sigla. O nome do

estado pode estar em maiúsculas ou minúsculas e mesmo assim o programa deve

dar a resposta correta. (Nota: para transformar todas as letras de uma string em

minúsculas, use a função lower(). Assim, se palavra = ‘PalavrA’,

palavra.lower() devolve ‘palavra’.)

 

5.13 TUPLAS

Imagine que você precise guardar uma data composta de dia, mês e ano, digamos 22 de abril de 1500. Você poderia criar variáveis para cada um dos componentes, mas isto tornaria sua manipulação um tanto quanto complicada, não? Você quer poder guardar essa informação e acessá-la como um objeto único.

Uma lista funcionaria para guardar uma data? Claro, mas o

índice de uma lista não tem uma semântica associada. Com uma lista de 3 posições armazenando uma data, o que significaria se inadvertidamente o seu programa acrescentasse mais um elemento ao final com uma operação de append()?

Para resolver este problema elegantemente, Python fornece o

tipo tupla. Muito do que foi estudado até aqui sobre listas também serve para tuplas, com poucas diferenças, a principal é que enquanto as listas são objetos mutáveis, as tuplas são imutáveis. Isto quer dizer que uma vez que a tupla tenha sido criada, permanecerá com a mesma informação até ser descartada.

Para criar uma tupla, basta escrever uma sequência de itens entre parênteses e separados por vírgulas. Nossa data ficaria assim:

data = (22, 4, 1500)

Uma tupla não precisa ter somente inteiros. Qualquer tipo de objeto pode ser contido pela tupla:

info = (‘Brasil’, 22, 4, 1500)

Você também pode criar uma tupla mesmo sem usar parênteses, bastando atribuir uma sequência de elementos separados por vírgula, pois Python entende que isso também é uma tupla:

info = ‘Brasil’, 22, 4, 1500

print(info)

Uma função que retorna mais de um valor na realidade está retornando uma tupla. Para ter acesso a um elemento da tupla, usamos a mesma sintaxe com colchetes das listas:

info = ‘Brasil’, 22, 4, 1500

print(info[0])

vai imprimir ‘Brasil’.

As funções que funcionam em listas funcionam da mesma forma nas tuplas, exceto aquelas que podem modificá-la, como append(). Por exemplo, o Programa 5.36 que usa o fatiamento, é uma cópia do Programa 5.20, porém usando tuplas no lugar da lista.

planetas = (‘Mercúrio’, ‘Vênus’, ‘Terra’, ‘Marte’,

‘Saturno’, ‘Júpiter’, ‘Urano’, ‘Netuno’)

print (planetas[2:5])

print (planetas[:3])

print (planetas[3:])

print (planetas[4:-1])

print (planetas[:])

 

■ Programa 5.36: Programa planetas com tuplas.

E seu resultado é equivalente, também modificando a geração de listas pela geração de tuplas:

(‘Terra’, ‘Marte’, ‘Saturno’)

(‘Mercúrio’, ‘Vênus’, ‘Terra’)

(‘Marte’, ‘Saturno’, ‘Júpiter’, ‘Urano’, ‘Netuno’)

(‘Saturno’, ‘Júpiter’, ‘Urano’)

(‘Mercúrio’, ‘Vênus’, ‘Terra’, ‘Marte’, ‘Saturno’, ‘

Júpiter’,

‘Urano’, ‘Netuno’)

Portanto, a grande questão é: quando usar listas ou tuplas?

Depende da estrutura que você quer modelar. Em tudo o que for

fixo, que pode ser pensado mais em conjunto do que individualmente, ou que não deve ser modificado, devem-se usar tuplas. Quando sua estrutura precisar ser dinâmica e ser modificada, usam-se listas.

Por exemplo, os planetas não vão mudar. Serão sempre os

mesmos (apesar de Plutão ter tido o seu status alterado), então o melhor é usar tuplas. Coordenadas cartesianas do tipo x,y são vistas como um só objeto. De novo, a escolhida é a tupla. Uma tupla uma vez criada não pode ser modificada.

Por outro lado, se você quer guardar uma tabela de coordenadas

geográficas, a melhor estrutura seria uma lista, porém esta lista guardaria uma tupla da coordenada em cada posição.

O Programa 5.37 usa tuplas para latitudes e longitudes. Cada

posição da tupla corresponde a um tipo de informação. É isso que eu queria dizer quando afirmava que em uma lista os índices não têm semântica associada. Em uma tupla cada posição tem um significado. Na coordenada o primeiro item significa graus, o segundo, minutos e o terceiro, segundos. Na tupla de cada aeroporto, o primeiro item é o nome do aeroporto, seguido de sua latitude e depois de uma longitude. Finalmente, o programa utiliza um dicionário para ter os nomes das cidades como índices das tuplas dos aeroportos.

lat_galeao = (22, 48, 34)

long_galeao = (43, 15, 0)

aeroporto_galeao = (‘Galeão’, lat_galeao, long_galea o)

lat_guarulhos = (23, 26, 6)

long_guarulhos = (46, 28, 22)

aeroporto_guarulhos = (‘Guarulhos’, lat_guarulhos,

long_guarulhos)

aeroportos = {

‘Rio’: aeroporto_galeao,

‘São Paulo’: aeroporto_guarulhos

}

for cidade in aeroportos:

print(‘Aeroporto ‘ + cidade + ‘:\n\t’ +

aeroportos[cidade][0] + ‘\n\tLatitude: ‘ +

str(aeroportos[cidade][1][0]) + ‘º’ +

str(aeroportos[cidade][1][1]) + “‘“ +

str(aeroportos[cidade][1][2]) + ‘“‘ +

‘\n\tLongitude: ‘ +

str(aeroportos[cidade][2][0]) + ‘º’ +

str(aeroportos[cidade][2][1]) + “‘“ +

str(aeroportos[cidade][2][2]) + ‘“‘)

 

■ Programa 5.37: Programa com as coordenadas de

aeroportos como tuplas.

 

O programa fornece a saída:

Aeroporto São Paulo:

Guarulhos

Latitude: 23º26’6”

Longitude: 46º28’22”

Aeroporto Rio:

Galeão

Latitude: 22º48’34”

Longitude: 43º15’0”

A ordem das cidades não é garantida, pois o dicionário não é uma estrutura ordenada, e isso quer dizer que cada vez que o programa é executado, a ordem das cidades pode ser diferente. Repare o uso dos caracteres de escape para imprimir novas linhas e tabulações (\n e \t).