sábado, 7 de novembro de 2009

Mini Teste # 1 - Versão C

Mais uma solução ( a última!).

1. O que queremos dizer quando afirmamos que um operador, +, por exemplo, está sobrecarregado?

Resposta

Um operador diz-se sobrecarregado quando efectua diferentes operações em função do tipo dos objectos. No caso de + temos, por exemplo a operação de adição de números ou a de concatenação de cadeia de caracteres.


>>> 5 + 3
8
>>> ‘ab’ + +cd’
‘abcd’


2. Considere a seguinte sessão interactiva no interpretador de Python.


>>> import math
>>> x = sin(5)
Traceback (most recent call last):
File "<string>", line 1, in <fragment>
NameError: name 'sin' is not defined
>>>


Explique de modo sintético mas rigoroso o que aconteceu.

Resposta

Ao importar o módulo matemático com import math, apenas o nome math fica guardado no espaço de nomes. Assim a operação sin é desconhecida do sistema a menos que se diga que faz parte do módulo matemático. Para tal temos que prefixar o nome da operação com o nome do módulo, com mostra a listagem. Não o fazendo dá-se um NameError.


>>> import math
>>> x = math.sin(5)
>>>


3. O programa da listagem abaixo pretende resolver o problema de duplicar os elementos numa lista. Por exemplo o que se pretende é:


>>> duplica([1,2,3])
[1,1,2,2,3,3]
>>>

def duplica(lista):
copia = lista[:]
for indice in range(len(lista)):
copia.insert(indice + 1,lista[indice])
return copia



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?

Resposta

O erro ocorre porque o programador não teve em linha de conta que a lista vai crescendo à medida que se inserem elementos. Funciona bem só para o primeiro elemento. A solução passa por ter esse aspecto em consideração como se indica na listagem.


def duplica_bem(lista):
copia = lista[:]
for indice in range(len(lista)):
copia.insert(2*indice + 1,lista[indice])
return copia


4. Desenvolva um programa que, dados um elemento numérico e uma lista de números, determina quantos elementos da lista são menores do que o número. A listagem abaixo ilustra o que se pretende.


>>> # ---> Aqui o seu programa de nome conta_menores.
>>> conta_menores(5,[2,8,6,5,3,2])
3
>>>


Resposta


Solução mais simples. Padrão acumulador (nome conta) a funcionar como contador. Percorre a lista pelo conteúdo. Para cada elemento da lista faz o teste e, caso se verifique a condição de ser menor, actualiza o contador.


def conta_menores(elem, lista):
conta = 0
for val in lista:
if val < elem:
conta = conta + 1
return conta

Sem comentários:

Enviar um comentário