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:


>>> 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