1. Identifique de forma clara e sintética as semelhanças e as diferenças entre objectos mutáveis e objectos imutáveis. Apresente exemplos concretos.
Resposta
Todos os objectos têm identidade, valor e tipo (semelhança). No caso dos objectos mutáveis podemos mudar o valor sem alterar a identidade e nos imutáveis não (diferença).
2. Explique o que acontece de modo claro, sintético e rigoroso quando executa o comando:
1.
>>> cad
=
‘a’
*
3
A sua explicação deve incluir a visualização do espaço de nomes e do espaço de objectos depois de executado o comando indicado.
Resposta
A operação produto aplicada a uma cadeia de caracteres replica a cadeia o número de vezes dado pelo outro operando. Neste caso o resultado seria a cadeia de caracteres ‘aaa’. A figura ilustra o espaço de nomes e o espaço dos objectos nos quais o nome cad se associa ao objecto ‘aaa’ através da identidade deste.

3. O programa da listagem abaixo pretende devolver o resultado da inversão de uma lista. No entanto não funciona. Identifique o tipo do erro que ocorre explicando a sua razão. Como podia corrigir o erro, embora usando a mesma ideia?
1.
def
inverte(seq):
2.
"""Inverte a sequência seq.Onde está o erro?"""
3.
aux
=
seq[:]
4.
for
indice
in
range(len(seq)
/
2
):
5.
aux[indice]
=
aux[len(seq)
-
indice
-
1
]
6.
aux[len(seq)
-
indice
-
1
]
=
aux[indice]
7.
return
aux
Resposta
O programa de inversão tem um erro básico. A ideia é fazer a inversão trocando os elementos a igual distância das extremidades. No entanto a operação de troca no interior do ciclo for está incorrecta pois ao colocar um elemento numa dada posição sem salvar primeiro o que lá estava, impede a sua ulterior recuperação. A solução correcta seria colocar no interior do ciclo for as três instruções:
1.
temp
=
aux[indice]
2.
aux[indice]
=
aux[len(seq)
-
indice
-
1
]
3.
aux[len(seq)
-
indice
-
1
]
=
temp
4. Desenvolva um programa que dadas duas listas devolve uma terceira formada pelos elementos das primeiras dispostos de modo alternado. Começa com a primeira lista.. A listagem abaixo ilustra o que se pretende.
Desenvolva um programa que dadas duas listas devolve uma terceira formada pelos elementos das primeiras dispostos de modo alternado. Come\c ca com a primeira lista.. A listagem abaixo ilustra o que se pretende.
1.
>>> l1
=
[
1
,
2
,
3
]
2.
>>> l2
=
[
'a'
,
'b'
,
'c'
]
3.
>>>
# ---> Aqui o seu programa de nome alterna.
4.
>>> alterna(l1, l2)
5.
[
1
,
'a'
,
2
,
'b'
,
3
,
'c'
]
6.
>>>
Resposta
Uma solução consiste em usar o padrão acumulador: numa lista de nome aux vamos acumulando os pares de valores, um da lista 1 e outro da lista 2. A lista é percorrida pelos índices.
01.
def
shuffle_b(lista1,lista2):
02.
""" alterna os elementos das listas. Têm o mesmo comprimento.
03.
Começa com a lista 1.
04.
"""
05.
aux
=
[]
06.
for
indice
in
range(len(lista1)):
07.
aux.append(lista1[indice])
08.
aux.append(lista2[indice])
09.
return
aux
Sem comentários:
Enviar um comentário