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.
1.
>>>
5
+
3
2.
8
3.
>>> ‘ab’
+
+
cd’
4.
‘abcd’
2. Considere a seguinte sessão interactiva no interpretador de Python.
1.
>>>
import
math
2.
>>> x
=
sin(
5
)
3.
Traceback (most recent call last):
4.
File
"<string>"
, line
1
,
in
<fragment>
5.
NameError: name
'sin'
is
not
defined
6.
>>>
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.
1.
>>>
import
math
2.
>>> x
=
math.sin(
5
)
3.
>>>
3. O programa da listagem abaixo pretende resolver o problema de duplicar os elementos numa lista. Por exemplo o que se pretende é:
01.
>>> duplica([
1
,
2
,
3
])
02.
[
1
,
1
,
2
,
2
,
3
,
3
]
03.
>>>
04.
05.
def
duplica(lista):
06.
copia
=
lista[:]
07.
for
indice
in
range(len(lista)):
08.
copia.insert(indice
+
1
,lista[indice])
09.
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.
1.
def
duplica_bem(lista):
2.
copia
=
lista[:]
3.
for
indice
in
range(len(lista)):
4.
copia.insert(
2
*
indice
+
1
,lista[indice])
5.
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.
1.
>>>
# ---> Aqui o seu programa de nome conta_menores.
2.
>>> conta_menores(
5
,[
2
,
8
,
6
,
5
,
3
,
2
])
3.
3
4.
>>>
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.
1.
def
conta_menores(elem, lista):
2.
conta
=
0
3.
for
val
in
lista:
4.
if
val < elem:
5.
conta
=
conta
+
1
6.
return
conta
Sem comentários:
Enviar um comentário