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:
>>> 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?
def inverte(seq):
"""Inverte a sequência seq.Onde está o erro?"""
aux = seq[:]
for indice in range(len(seq)/2):
aux[indice] = aux[len(seq) - indice - 1]
aux[len(seq) - indice - 1] = aux[indice]
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:
temp = aux[indice]
aux[indice] = aux[len(seq) - indice - 1]
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.
>>> l1 = [1,2,3]
>>> l2 = ['a','b','c']
>>> # ---> Aqui o seu programa de nome alterna.
>>> alterna(l1, l2)
[1,'a',2,'b',3,'c']
>>>
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.
def shuffle_b(lista1,lista2):
""" alterna os elementos das listas. Têm o mesmo comprimento.
Começa com a lista 1.
"""
aux = []
for indice in range(len(lista1)):
aux.append(lista1[indice])
aux.append(lista2[indice])
return aux
Sem comentários:
Enviar um comentário