O que distingue os objectos mutáveis dos objectos imutáveis?
Resposta
No caso dos objectos mutáveis podemos alterar o valor sem alterar a identidade, nos imutáveis não.
P1 b)
Os ficheiros e as cadeias de caracteres são tipos de dados equivalentes? Isto é: tudo o que posso fazer com um objecto de um dos tipos, posso fazer com um objecto do outro. Justifique a sua opinião.
Resposta
Um tipo de dados remete para objectos e operações comuns com esses objectos. Por exemplo, os inteiros e os floats são tipos de dados equivalentes. O mesmo não se pode dizer dos ficheiros de texto e das cadeias de caracteres. Um ficheiro é uma longa cadeia de caracteres, estruturada em linhas, mutável e armazenada de forma permanente. As cadeias de caracteres não têm estrutura interna, são imutáveis e apenas existem durante a execução do programa onde estão definidas. Quanto às operações elas são diversas. No caso dos ficheiros temos operações de consulta por elemento (read), por linha (readline) ou por linhas (readlines). O acesso para consulta é sequencial, ao contrário das cadeias, em que o acesso é directo (indexação ou fatiamento). A operação de escrita (alteração) existe nos ficheiros (por elemento, por linha). alterar uma cadeia de caracteres obriga a criar um novo objecto.
P2
Imagine a seguinte sessão no interpretador de Python:
01.
>>> x
=
[]
*
4
02.
>>> y
=
[[]
for
i
in
range(
4
)]
03.
>>> z
=
[[]]
*
4
04.
>>> x
05.
??? <
-
-
-
-
(a)
06.
>>> y
07.
??? <
-
-
-
-
(b)
08.
>>> z
09.
??? <
-
-
-
-
(c)
10.
>>> x
=
=
y
11.
??? <
-
-
-
(d)
12.
>>> y
=
=
z
13.
??? <
-
-
-
-
(e)
14.
>>>
Indique, justificando, o resultado devolvido pelo interpretador nas posições assinaladas por ???.
Resposta
O operador de *, quando um dos operandos é numérico e o outro uma sequência, significa repetição. Repete-se o conteúdo, devolvendo-se o resultado dentro da sequência.
(a) []
(b) [[],[],[],[]]
(c) [[],[],[],[]]
(d) False
(e) True
O operador == significa igualdade dos valores e não igualdade das identidades. Isso explica os resultados booleanos (d) e (e). x, y e z são objectos com identidades diferentes, mas y e z têm o mesmo valor.
P3
Suponha que tem duas listas de inteiros. Uma forma de determinar em que medida são diferentes consiste em calcular a soma das diferenças absolutas dos seus elementos. Uma fórmula simples será:

Aqui as listas são x e y, e têm n elementos. As barras verticais denotam o valor absoluto, isto é, correspondem à operação abs em Python.
Implemente o respectivo programa. Os argumentos são as duas listas de inteiros, como se mostra no exemplo da listagem abaixo.
1.
>>>
print
distancia([
1
,
2
,
3
],[
4
,
8
,
12
])
2.
18
3.
>>>
Resposta
1.
def
d(x,y):
2.
""" A distância entre duas listas de inteiros."""
3.
soma
=
0
4.
for
i
in
range(len(x)):
5.
soma
=
soma
+
abs(x[i]
-
y[i])
6.
return
soma
Usando listas por compreensão:
1.
def
d_b(x,y):
2.
return
sum([ abs(x[i]
-
y[i])
for
i
in
range(len(x))])
P4
Suponha que tem um ficheiro de texto onde guarda em cada linha o código da amostra de um produto, seguido do número de uma experiência feita com a amostra, seguido finalmente do valor da temperatura a que a experiência foi feita. A listagem abaixo mostra a parte inicial de um ficheiro tipo.
1.
A
1
20
2.
B
1
40
3.
C
1
30
4.
A
2
-
10
5.
C
2
5
6.
B
2
15
7.
B
3
60
Desenvolva um programa que leia esta informação e crie um dicionário em que as chaves são o código do produto e o valor a máxima temperatura a que a experiência foi feita. Admita que a temperatura pode variar entre -100 e 100 graus centígrados. A listagem abaixo mostra o resultado de executar o programa caso o ficheiro tivesse apenas os dados acima indicados.
1.
>>>
print
dic_max_temp(
'/tempo/data/exame_r.txt'
)
2.
{
'A'
:
20
,
'C'
:
30
,
'B'
:
60
}
3.
>>>
Resposta
01.
def
dic_max_temp(ficheiro):
02.
""" Do ficheiro ao dicionário."""
03.
f_in
=
open(ficheiro,
'r'
)
04.
dic
=
{}
05.
linha
=
f_in.readline()
06.
07.
while
linha !
=
'':
08.
cod,num,temp
=
linha[:
-
1
].split()
09.
dic[cod]
=
max(dic.get(cod,
-
100
),int(temp))
10.
linha
=
f_in.readline()
11.
f_in.close()
12.
return
dic
P5
Usando o módulo cTurtle construa um programa que desenhe um tabuleiro quadrado semelhante ao da figura .

Por semelhante entende-se que pode ter outra dimensão. Suponha que tem ao seu dispor o programa que lhe permite desenhar um quadrado da cor que precisar, como se mostra na listagem abaixo.
1.
def
quad(tartaruga,lado,cor):
2.
"""Desenha Quadrado da cor."""
3.
tartaruga.begin_fill()
4.
tartaruga.pen(shown
=
False
, pencolor
=
'black'
, fillcolor
=
cor)
5.
for
i
in
range(
4
):
6.
tartaruga.fd(lado)
7.
tartaruga.rt(
90
)
8.
tartaruga.end_fill()
Resposta
01.
def
tabuleiro(tartaruga,n,lado):
02.
tartaruga.pu()
03.
tartaruga.goto(
0
,
0
)
04.
tartaruga.pd()
05.
06.
for
l
in
range(n):
07.
# reposiciona no início da linha
08.
tartaruga.setx(
0
)
09.
tartaruga.sety(tartaruga.ycor()
+
lado)
10.
# desenha linha de quadrados
11.
for
c
in
range(n):
12.
if
(c
+
l)
%
2
=
=
0
:
13.
quad(tartaruga,lado,
'white'
)
14.
else
:
15.
quad(tartaruga,lado,
'black'
)
16.
tartaruga.setx(tartaruga.xcor()
+
lado)
Sem comentários:
Enviar um comentário