sábado, 7 de novembro de 2009

Mini Teste # 1 - Versão B

Aqui vai então a solução.

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