Você está na página 1de 17

Aula 6 - Estruturas de Dados Homogéneas e Repetição

Programação

Informática Web
João Cordeiro
jpcc@ubi.pt

Novembro 9, 2022

Programação (Informática Web) Aula 6 Novembro 9, 2022 1 / 17


Aula 6 - Estruturas de Dados Homogéneas e Repetição

Sumário
Estruturas lineares e homogéneas de dados: listas (list) e conjuntos
(set) e tuplos. A instrução de repetição “for”. Exemplos e exercícios.

Programação (Informática Web) Aula 6 Novembro 9, 2022 2 / 17


Estrutura de Dados

Definição
Uma estrutura de dados compreende uma agregação de múltiplos da-
dos, organizados de uma determinada forma: linear/distribuída, ho-
mogénea/heterogénea.

+ Frequentemente, existe a necessidade de manipular conjuntos de


dados de uma só vez, como se fossem uma só variável. Isto é, o
processamento de um bloco de dados. Por exemplo, se quisermos
representar os salários de um grupo de pessoas, ou os nomes dos
meses do ano.
+ Para já falaremos das estruturas lineares homogéneas, existentes no
Python: listas (list), conjuntos (set) e tuplos.
+ Veremos também que uma string (str) é uma estrutura linear
homogénea, partilhando características e operações semelhantes.
Programação (Informática Web) Aula 6 Novembro 9, 2022 3 / 17
Estrutura de Dados / Listas

Lista
Uma estrutura linear que pode ser homogénea. Os valores contidos numa
lista são armazenados contiguamente e podem ser acedidos através de um
índice. Em Python, os valores de uma lista estão separados por virgula e
delimitados por parênteses rectos.

Vejamos alguns exemplos:


1 [1 , 2 , 3 , 1 , 0 , 7 , 2] # - -- - - -- - - -- > Lista de inteiros .
2 [1250.00 , 2567.98 , 112.56] # ------> Lista de floats .
3 [ " Porto " , " Covilh ã " , " Lisboa " ] # --> Lista de strings .

Atribuição a variáveis:
1 >>> sal á rios = [1250.00 , 2567.98 , 112.56]
2 >>> cidades = [ " Porto " , " Covilh ã " , " Lisboa " ]

Programação (Informática Web) Aula 6 Novembro 9, 2022 4 / 17


Estrutura de Dados / Listas

Atribuição a variáveis:
1 >>> sal á rios = [1250.00 , 2567.98 , 112.56]
2 >>> cidades = [ " Porto " , " Covilh ã " , " Lisboa " ]

Os elementos de uma lista podem ser acedidos individualmente, através


do seu índice sequencial (inteiro), usando também os parênteses rectos:
1 >>> print ( sal á rios [0])
2 1250.0
3 >>> print ( cidades [1])
4 Covilh ã
5 >>> print ( cidades [ len ( cidades ) -1])
6 Lisboa
7 >>> print ( cidades [ -1])
8 Lisboa
9 >>> print ( cidades [ -2])
10 Covilh ã

Programação (Informática Web) Aula 6 Novembro 9, 2022 5 / 17


Estrutura de Dados / Listas

Podemos inclusive obter uma sub-lista usando o “slicing ”, i.e., indicando


um intervalo de índices, do género a:b, sendo a e b dois números inteiros
tais que a<b. Podemos também suprimir os limites do slicing, obtendo-se
sub-listas que vão desde o início e/ou até ao fim:
1 >>> L = [5 , 4 , 3 , 2 , 1 , 0]
2 >>> print ( L [1:3])
3 [4 , 3]
4 >>> print ( L [:3])
5 [5 , 4 , 3]
6 >>> print ( L [3:])
7 [2 , 1 , 0]
8 >>> print ( L [:])
9 [5 , 4 , 3 , 2 , 1 , 0]

Programação (Informática Web) Aula 6 Novembro 9, 2022 6 / 17


Estrutura de Dados / Listas

Existe um conjunto de operações que podemos realizar com as listas. A


seguir são mostrados exemplos com algumas das operações mais relevantes
e mais usadas:
1 >>> A = [4 , 5 , 6]
2 >>> B = [7 , 8]
3 >>> print ( A + B ) # -----> concatenates two lists .
4 [4 , 5 , 6 , 7 , 8]
5
6 >>> A . append (9) # ----> adds at the end .
7 >>> print ( A )
8 [4 , 5 , 6 , 9]
9
10 >>> A . insert (1 ,0) # --> insert 0 in position 1.
11 >>> print ( A )
12 [4 , 0 , 5 , 6 , 9]
13
14 >>> C = [] # - -- -- ---> creation of an empy list .

Programação (Informática Web) Aula 6 Novembro 9, 2022 7 / 17


Estrutura de Dados / Conjuntos

Conjunto
Uma estrutura não linear que agrega elementos não repetidos. Em Python,
os valores de um conjunto estão separados por virgula e são delimitados pelas
chavetas. Não existe a noção de índice, tal como numa lista. Aqui, um con-
junto é conceptualmente equivalente à noção de um conjunto matemático.

Vejamos alguns exemplos e operações:


1 >>> A = {1 ,2 ,3 ,2} 1 >>> B = {3 ,4 ,5 ,7}
2 >>> print ( A ) 2 >>> print ( A & B )
3 {1 , 2 , 3} 3 {3 , 4}
4 >>> A . add (4) 4 >>> print ( A | B )
5 >>> print ( A ) 5 {1 , 2 , 3 , 4 , 5 , 7}
6 {1 , 2 , 3 , 4} 6 >>> {3 ,4} < B
7 7 True
8 >>> 3 in A 8 >>> {1 ,2 ,3} == {2 ,1 ,3}
9 True 9 True

Programação (Informática Web) Aula 6 Novembro 9, 2022 8 / 17


Estrutura de Dados / Conjuntos

Conjunto
Uma estrutura não linear que agrega elementos não repetidos. Em Python,
os valores de um conjunto estão separados por virgula e são delimitados pelas
chavetas. Não existe a noção de índice, tal como numa lista. Aqui, um con-
junto é conceptualmente equivalente à noção de um conjunto matemático.

Conversão de lista para conjunto:


1 >>> L = [1 ,2 ,3 ,2 ,1 ,1 ,2 ,3 ,7]
2 >>> print ( len ( L ) )
3 9
4 >>> A = set ( L )
5 >>> print ( A )
6 {1 , 2 , 3 , 7}
7 >>> print ( len ( A ) )
8 4

Programação (Informática Web) Aula 6 Novembro 9, 2022 9 / 17


Estrutura de Dados / Tuplos

Tuplo
Uma estrutura linear sequencial e imutável com indexação igual à das lis-
tas. Em Python, os delimitados por parênteses, sendo as suas componentes
separadas por virgula. Um tuplo permite uma representação natural de um
sistema de coordenadas, e.g., pontos ou vectores no espaço R3 .

Exemplo de um tuplo, representando um ponto de R3 : (1,0,-1).

Operações com tuplos:


1 >>> a = (1 ,0 , -1) 1 >>> list ( a )
2 >>> print ( a ) 2 [1 , 0 , -1]
3 (1 ,0 , -1)
4 >>> a [0] Embora formalmente a ordem dos
5 1 elementos é equivalente à da lista,
6 >>> len ( a ) em termos conceptuais a ordem é
7 3
muito mais “vincada” no tuplo.
Programação (Informática Web) Aula 6 Novembro 9, 2022 10 / 17
Estrutura de Dados / String

String
Em Python, uma string designa uma cadeia de caracteres, do tipo de dados
str. É assim uma estrutura de dados homogénea (só caracteres) indexada
sequencialmente, tal como numa lista ou num tuplo. O acesso a um caractere
ou sequência de caracteres é realizado tal como numa lista ou tuplo, com
uma combinação de parênteses rectos e “:”.

Vejamos alguns exemplos:


1 >>> s = " 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 "
2 >>> s = " Today is a nice day to study programming . "
3 >>> print ( s [0] , s [ -1] , s [ -2] , len ( s ) )
4 T . g 41
5 >>> s [:5]
6 Today
7 >>> print ( s [23: -1] , s [6:8] , s [11:15])
8 study programming is nice

Programação (Informática Web) Aula 6 Novembro 9, 2022 11 / 17


Estrutura de Dados / String
Algumas operações e funções importantes na manipulação de strings:
1 >>> s = 3 * " 0123456789 " # replicate
2 >>> print ( s )
3 012345678901234567890123456789
4 >>> s = " universidade da beira interior "
5 >>> print ( len ( s ) )
6 30
7 >>> print ( s . upper () )
8 UNIVERSIDADE DA BEIRA INTERIOR
9 >>> print ( s . title () )
10 Universidade Da Beira Interior
11 >>> print ( s . index ( " beira " ) )
12 16
13 >>> print ( s . split () )
14 [ ’ universidade ’ , ’ da ’ , ’ beira ’ , ’ interior ’]
15 >>> L = list ( " Estrela " ) # from str to list
16 >>> print ( L )
17 [ ’E ’ , ’s ’ , ’t ’ , ’r ’ , ’e ’ , ’l ’ , ’a ’]

Programação (Informática Web) Aula 6 Novembro 9, 2022 12 / 17


Instruções de Repetição

Instrução de repetição / Ciclo


Consiste num bloco de código que executa repetidamente, mediante a
verificação de uma determinada condição lógica.

Ciclo for
Uma instrução de repetição que depende de uma variável de controlo
pertencer aos valores possíveis de uma estrutura de dados, iterando
sequencialmente sobre estes.

for VAR in STRUCT : for x in [1 ,2 ,3]:


Instruction 1 print ( x )
...
Instruction N for x in {1 ,2 ,3}:
print ( ’ Programming is cool ! ’)
Listing 1: Sintaxe.
Listing 2: Exemplo.

Programação (Informática Web) Aula 6 Novembro 9, 2022 13 / 17


Instruções de Repetição / Ciclo

Ciclo for
Uma instrução de repetição que depende de uma variável de controlo
pertencer aos valores possíveis de uma estrutura de dados, iterando
sequencialmente sobre estes.

A função range permite gerar uma sequência de valores inteiros, entre um


limite inferior a e um limite superior b, com um incremento de k unidades.
Esta função é frequentemente combinada com o for.

range (a , b , k ) vai gerar : for x in range (4) :


print ( x )
a , a +k , ... , a + nk
for x in range (100 ,107) :
com : print ( x )
a < a + nk ≤ b
for x in range (1 ,10 ,2) :
Listing 3: Sintaxe. print ( x )

Programação (Informática Web) Aula 6 Novembro 9, 2022 14 / 17


Instruções de Repetição / Ciclo

Portanto, sempre que seja possível saber à priori o numero exacto de


iterações de um ciclo, é preferível usar um for em vez de um while. Fica um
código mais sucinto e elegante. Vejamos agora alguns exercícios envolvendo
aquilo que estudámos hoje:
1 Programa que lê uma string de um utilizador e escreve no output cada
uma das letras numa linha diferente.
2 Como é que podemos representar um vector em Python?
3 Como é que poderemos representar uma matriz em Python, usando
listas? Por exemplo uma matriz com duas linhas e três colunas.
4 Vamos fazer um programa que pede a introdução de um vector ao
utilizador.
5 Vamos fazer um programa que calcula a norma de um vector
introduzido pelo utilizador.

Programação (Informática Web) Aula 6 Novembro 9, 2022 15 / 17


Instruções de Repetição / Exercícios

Com o que já aprendemos, sabemos que podemos ter ciclos dentro de ciclos.
Use esta ideia e dois ciclos for para gerar o seguinte triângulo numérico:

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
............
1 2 3 ... ... N

sabendo que N<10 e um valor indicado pelo utilizador.

Programação (Informática Web) Aula 6 Novembro 9, 2022 16 / 17


Instruções de Repetição / Exercícios

Uma versão mais elaborada do exercício anterior é apresentado a seguir.


Utilize ciclos for para este triângulo numérico:

1
2 3
3 4 5
4 5 6 7
5 6 6 8 9
...................
N (N+1) ............ 2N-1

sabendo que N é um valor indicado pelo utilizador e N<100. Utilize um


print para escrever os números, mas use a versão com string de
formatação e escreva os inteiros com posicionamento de 3 dígitos. Por
exemplo, se a variável a escrever fosse x, então seria: print("%3d" % x).

Programação (Informática Web) Aula 6 Novembro 9, 2022 17 / 17

Você também pode gostar