Você está na página 1de 8

Introdução à Coleção, Indexação e Tuplas

Neste tópico, você aprenderá alguns conceitos sobre coleções de dados e conhecerá casos em que
modelar seus dados em coleções gera códigos mais eficientes e legíveis.

Todos os conceitos serão apresentados tomando a tupla como exemplo, pois elas são estruturas de
dados simples e versáteis. Assim, você vai aprender a como criar as tuplas e compreenderá duas
formas de acessar seus elementos: a indexação e o unpacking.

Além dos tipos de dados mais simples, como números inteiros (int) ou ponto-flutuante (float) e
strings (str), Python conta com outros dados mais sofisticados, que servem para organizar coleções.
Estes tipos, voltados para fins de organização, são chamados de estruturas de dados e, quando
escolhidos e usados corretamente, permitem resolver problemas de formas mais eficientes e até mais
legíveis.

Imagine, por exemplo, que você precise calcular a média aritmética de vários números. Para isso, você
pode criar uma variável para cada um deles, seja um int ou float, ou armazenar todos esses números
em uma variável que apenas represente tal coleção de valores, certo? Sim! Mas você também pode
pensar em um programa para representar figuras geométricas.

Como exemplo, considere a figura geométrica de um retângulo, com medidas distintas de base e
altura. Esta figura poderia ser representada usando duas variáveis, uma para cada dimensão, ou por
meio de uma coleção que represente as duas dimensões. O primeiro tipo de coleção que você vai
aprender é a tupla, um termo que vem do inglês: tuple.

As tuplas são estruturas de dados caracterizadas pela ordenação dos seus elementos, ou seja, os
membros de uma tupla aparecem em uma ordem específica. Independente do modo como você
utilize as tuplas, lembre-se de que é fundamental ser capaz de contar a quantidade de itens, anotar
estes itens e reler cada um deles, certo?

Agora, você aprenderá a como criar e manipular as tuplas por meio da linguagem Python. Acompanhe
a seguir.

Para iniciar, considere o exemplo da figura geométrica que você acabou de conferir, o retângulo. Você
aprendeu que o retângulo, por ser uma figura com dimensões distintas, pode ser representado
utilizando duas variáveis, sendo uma para a base e outra para a altura, como no exemplo a seguir,
onde a área de um retângulo é igual a 5 e a largura é igual a 7.

Essa representação é útil e, em alguns casos, pode ser suficiente para o problema que você está
tentando resolver. Mas perceba que você utiliza duas variáveis distintas, a base e a altura, para
representar uma única entidade, no caso, um retângulo. Acompanhe a seguir como você pode
representar o mesmo retângulo usando tuplas.
Esta forma de representar o retângulo possui algumas limitações, por exemplo, você não pode acessar
os elementos individualmente. No entanto, ela traz a vantagem de representar o retângulo como uma
só variável, observe:

Como você aprendeu, as tuplas são coleções enumeradas de valores. Em Python, as tuplas são
definidas através do tipo tuple e você pode construí-las a partir de uma sequência de elementos
contida entre um par de parênteses (), em que cada elemento é separado por vírgulas.

Uma das possibilidades de criação de uma tupla, é a tupla vazia, estruturada da seguinte forma:

Você também pode estruturar uma tupla com apenas um elemento, observe:

Neste caso, é necessário o uso da vírgula após o único elemento de mochila, pois sem ela o
interpretador Python entenderia a expressão escrita como apenas uma string.

Bem, para acessar um elemento em uma tupla, basta escrever o nome da tupla seguido de um número
inteiro entre colchetes. Este número, também chamado de índice, indica a posição do elemento
desejado, de forma que esta operação é chamada de indexação.

Para acessar o primeiro elemento da variável retângulo, que corresponde à base do exemplo que
você conferiu, basta escrever retangulo[0]. Já o segundo elemento, a altura, pode ser acessado
escrevendo retangulo[1].

Vale destacar que você deve referenciar os elementos contando a partir do zero, certo? Desse modo,
a versão completa desse exemplo se estrutura da seguinte forma:

Até aqui você aprendeu que a tupla também pode ser usada para representar coleções de elementos,
não é mesmo? No exemplo a seguir, você entenderá como utilizar uma tupla para representar o
conjunto de notas de um aluno. Observe:

Do mesmo modo do exemplo do retângulo, cada item pode ser acessado através de seu índice,
contando a partir do zero. Nesse caso, os resultados na tabela ficam organizados da seguinte forma:

notas[0] notas[1] notas[2] notas[3]


6.5 7.8 10.0 9.1
Conheça a seguir os elementos dessa estrutura.

Neste exemplo que você acabou de conferir, a tupla notas contém 4 elementos acessados com índices
de 0 até 3. Mas, se você fizesse notas[4], seria como tentar acessar o 5 elemento de uma tupla com
apenas 4 elementos. Nesse caso, você teria um IndexError, ou seja, um erro de índice, e a Python
retornaria uma mensagem como este exemplo:

A princípio, essa convenção de contar o início a partir do 0 pode causar estranhamento e, por isso,
vale lembrar que ela se dá por inúmeras circunstâncias, por exemplo, as escolhas técnicas, as razões
históricas e até mesmo as preferências do criador da linguagem envolvida. A prática fará com que
você se acostume rápido e, talvez, perceba algumas vantagens, certo?

As tuplas podem ser acessadas a partir do início, como nesse exemplo que você acabou de conferir,
ou a partir do fim. A seguir, você vai entender como contá-las a partir do fim, ou seja, da direita para
a esquerda.

Para acessar os elementos de uma tupla a partir do fim, contando da direita para a esquerda, você
deve usar um índice negativo. Como não existe zero negativo, o primeiro índice negativo é -1 e o
último é -4, conforme o exemplo na tabela a seguir:

notas[-5] notas[-4] notas[-3] notas[-2] notas[-1]


IndexError 6.5 7.8 10.0 9.1
Acessar os elementos de uma tupla da direita para a esquerda segue a mesma lógica de você os
acessar da esquerda para a direita, ou seja, ao tentar acessar índices maiores que o tamanho da tupla,
um IndexError será gerado automaticamente.

Se quiser conhecer mais algumas vantagens de indexar coleções a partir do 0, acesse este link, e se
desejar se aprofundar com a explicação do próprio criador da linguagem, acesse este link, disponível
em inglês.

Existe também uma maneira bem prática de associar cada elemento de uma tupla a uma variável,
mesmo sem fazer uso de indexação.

Suponha que no seu programa sobre formas geométricas você precise representar um
paralelepípedo. É possível representar essa figura em três dimensões, utilizando uma tupla
estruturada da seguinte forma:
Caso precise, você poderá extrair cada uma das dimensões para uma variável separada, utilizando as
técnicas de indexação que você aprendeu. Nesse caso, a tupla se estrutura da seguinte forma:

Uma operação muito útil para diminuir o tamanho de um código na tupla é o UNPACKING, termo
originário de língua inglesa, que significa desempacotar. Em Python, você pode desempacotar os
valores armazenados em uma tupla. Desse modo, o exemplo do paralelepípedo, que você acabou de
conferir, seria desempacotado da seguinte forma:

Observe que, no processo de realização de unpacking no exemplo do paralelepípedo, há uma


sequência de 3 variáveis separadas por vírgulas, do lado esquerdo do operador de atribuição. No lado
direito do mesmo operador, há uma tupla que armazena 3 valores. Logo, é feita uma correspondência
e o primeiro valor armazenado em paralelepipedo é atribuído à variável altura, o segundo é
atribuído à largura e o terceiro ao comprimento, conforme o esquema a seguir:

Agora que você entendeu como a estrutura desempacotada é bem mais prática do que utilizar uma
linha para cada atribuição, é importante você saber que para que o desempacotamento ocorra, deve
haver um número igual, entre as variáveis do lado esquerdo da atribuição e os valores armazenados
na tupla que será desempacotada.

O conjunto altura, largura, comprimento também é uma tupla, visto que toda lista separada
por vírgulas, mesmo sem estar entre parênteses, também é entendida como uma tupla, certo?

Introdução e Utilização de Funções


Você reparou que desde a primeira aula deste curso tem sido usado funções? Bem, o primeiro código
que você digitou foi um print("Olá, mundo!"), não é mesmo? Então, print é uma função assim
como o comando input, que você utilizou para obter dados do usuário, está lembrado?
As funções são ferramentas fundamentais na vida de um programador, afinal, todo programa que
você desenvolve ao longo da sua carreira fará uso delas. Neste tópico, você vai descobrir mais sobre
funções, aprender a reconhecer seus principais elementos e entender como utilizá-las em Python.

Provavelmente, no ensino básico, você aprendeu que uma função é uma regra que mapeia ou associa
os elementos de um conjunto, chamado domínio, com elementos de outro conjunto, chamado
contradomínio. Por exemplo, na função f(x) = 2x, se x é igual a 3, a função será igual a 6, ou seja, f(3)
= 6. Em programação, as funções são parecidas, no entanto, elas podem ir além do mapeamento de
números. Agora, você vai entender como analisar a seguinte função:

Primeiro, você precisa saber que, assim como as variáveis, as funções têm nome e, nesse caso, é print.
A seguir, entre parênteses, você deve colocar uma string e esperar que a Python interprete o comando
que exiba a string que você colocou entre parênteses para o usuário, certo?

Você sabe que este é o comportamento esperado da função print, embora, talvez não saiba como
o interpretador faz isso. De forma técnica, as funções encapsulam as operações internas necessárias
para executar algo de modo que, ao utilizar a função, você não precise necessariamente estar
consciente de como ela funciona, mas precise apenas saber que comportamento ela produz. Até aqui
tudo bem? Na próxima página, você aprenderá sobre os elementos que compõem as funções.

Agora que você já sabe que as funções têm nome, você vai aprender quais são os demais
elementos que compõem uma função. Ao utilizar a print, você colocou uma string entre
parênteses, indicando que a mensagem deveria ser exibida, não é mesmo? Então, essas
informações que passamos para as funções são chamadas de parâmetros.

Por exemplo, na função print("Olá, mundo!"), a mensagem é um parâmetro. O conjunto


de parâmetros de uma função é também chamado de entrada da função e as funções podem
ter zero ou mais parâmetros.
Essa mesma função print, por exemplo, pode ser utilizada fazendo apenas print(), que
no caso imprimiria uma linha vazia na tela e, também poderia ser utilizada como print("Sua
idade é:", idade), que imprime tanto a string como o valor da variável idade.
Como exemplo, considere o seguinte trecho de código:

Na primeira linha, é utilizada a função input para coletar uma informação do usuário. Note que input,
assim como print, aceita uma string como parâmetro. Essa função, no entanto, faz algo diferente.
Repare que foi criada a variável idade_texto para coletar a resposta, correto? É a função input que
fornecerá esse valor, o qual chamamos de retorno da função.
Nem todas as funções retornam algo, a tão repetida print, por exemplo, não retorna. Mas, quando
retornam, as funções sempre retornam apenas um valor, mesmo que esse valor seja uma coleção,
como uma tupla.

Na linha dois, há um outro exemplo de uso de função, dessa vez a função int. Diferente das anteriores,
a int não imprime ou recebe informação da tela, embora ela tenha uma entrada ou parâmetro. A
função int é responsável por converter, se possível, o que lhe é passado para um número inteiro.
Interessante, não é mesmo?

Utilizando Tuplas com Funções e Laços


Até aqui, você aprendeu a como acessar os elementos das tuplas, ou seja, o básico sobre a criação
delas. No mais, você conheceu o que são e como invocar funções. Agora, será possível mesclar os
conhecimentos adquiridos ao longo das aulas e se aprofundar em modelos de funções que podem ser
utilizadas na iteração de tuplas.

Por fim, descobrirá casos em que as funções podem simplificar consideravelmente seus códigos e
otimizar seu tempo de trabalho.

Você aprendeu que, ao acessar um índice que não é maior que o tamanho da tupla, a Python retornará
uma mensagem de erro de índice, ou IndexError, lembra? Bem, para evitar que isso ocorra e calcular
o tamanho da tupla, você pode utilizar a função len, como no exemplo a seguir das notas de um aluno:

Neste caso, a linha 2 imprimirá a string "Temos 4 notas ao todo". A função len serve para todas as
coleções que você vai aprender neste curso e para outros inúmeros tipos de dados, até para strings,
por exemplo, que podem ser vistas como uma coleção de caracteres.

Agora, a partir desse exemplo, considere como se daria a criação de um programa que indique se cada
nota na coleção é maior que 7. Na próxima página, você aprenderá uma possível solução para esse
caso.

Considere a seguinte maneira de implementar o programa que indica se cada nota na coleção é maior
que 7.
Repare que nesse exemplo há um laço while que começa em zero e repete enquanto o contador for
menor que o tamanho da tupla. Os elementos da tupla, então, são acessados a partir dos seus índices.
Nesse caso, variam de 0 até 3, uma vez que as coleções em Python são indexadas a partir do 0. A
alternativa mais simples de construção do programa se dá na utilização de laço for, ao invés de um
while, como no exemplo a seguir:

Nesse exemplo, o laço for simplifica a construção, pois com ele não é necessário incrementar um
contador ou ficar conferindo em que posição está na tupla. Além disso, não é preciso ficar indexando
a coleção para acessar seus elementos, uma vez que neste tipo de laço, a cada volta, um dos
elementos de notas é automaticamente atribuído à variável nota.

Claro que nem sempre é possível utilizar esse tipo de laço, por isso cabe a você decidir, caso a caso,
qual a melhor maneira de executar uma repetição quando necessária.

Agora, suponha que ao invés de conferir nota a nota, você deseja somar todas as notas e calcular a
média, imprimindo "aprovado“ se a média for maior ou igual a 7, ou "reprovado“ caso a média seja
menor que 7.

Neste exemplo, ao invés de usar um “if” para cada nota, primeiro, você deve somá-las, calcular a
média e, por fim, comparar o resultado. Acompanhe o código a seguir:
O laço for é utilizado para passar por cada nota da coleção. Para somar as notas, foi criada uma variável
chamada total e, depois, já fora do laço, calculada a média. Observe que foi utilizado o tamanho da
tupla no cálculo da média, pois assim, mesmo que fossem 100 notas ao invés de 5, seria necessário
apenas modificar a primeira linha que cria a coleção. Por fim, basta um if para decidir qual mensagem
exibir para o usuário.

A linguagem Python é cheia de recursos e possui várias funções que realizam operações mais simples
e comuns. Existe uma função que pode simplificar ainda mais esse programa, a função sum, soma em
inglês. Essa função faz exatamente o que o for está fazendo, soma todos os itens de uma coleção.

Você também pode gostar