Diga o que entende por aliasing. Pode usar um exemplo como auxiliar da sua justificação.
Resposta
Falamos de aliasing quando nomes distintos ficam associados (pela identidade) ao mesmo objecto.
Exemplo:
>>> a = 5
>>> b = 5
>>> a = [1,2,3]
>>> b= a
Pergunta 2.2
Explique de modo claro, sintético e rigoroso o que aconteceu na sessão seguinte:
>>> def prod(x,y):
... return x * y
...
>>> a = 5
>>> print prod(a,3)
15
>>> a
5
>>> x
Traceback (most recent call last):
File "", line 1, in
NameError: name 'x' is not defined
>>>
Resposta
Nas linhas 1 e 2 definimos uma função de nome prod. Na linha 4, associamos o nome a ao objecto inteiro 5. Na linha 5, usamos a definição prod, sendo o resultado devolvido impresso por força da instrução print. Quando usamos a definição prod os parâmetros formais x e y vão ficar associados aos parâmetros reais a e 3, como se se tivesse feito no inicio de prod x=a e y = 3. A linha 6 mostra o resultado de executar o comando da linha 5.Na linha 7 perguntamos pelo objecto associado a a , e a resposta é dada na linha 8. Tentamos fazer o mesmo na linha 9 para x, mas dá erro pois x é um parâmetro formal da definição prod e, como tal, só existe no interior da definição.
Pergunta 2.3
Admitindo que n é um número inteiro positivo, explique o que faz o programa da listagem abaixo. A sua resposta não pode ser baseada em generalidades. Em concreto, queremos saber para cada valor de n qual o valor devolvido pela instrução return.
def misterio(n):
res = [0]
for i in range(1,n+1):
res.append(res[-1] + i)
return res[-1]
Resposta
Calcula o somatorio de 1 a n. O processo é iterativo, calculando-se primeiro os diferente somatórios de 1 a i. No final ao devolver o elemento na última posição (res[-1]), este é o valor da soma de todos os elementos.
Pergunta 2.4
Numa das fichas abordámos as árvores genealógicas e referimos que podiam ser organizadas através de um dicionário. As chaves são nomes, e os valores são listas de nomes dos descendentes directos (isto é, filhos(as)). Desenvolva um programa que, dados um dicionário, cujo conteúdo é uma árvore genealógica, e dois nomes, determina se esses dois nomes são primos(as) em primeiro grau. Relembramos que duas pessoas são primas entre si, se são filhos(as) de dois(duas) irmãos(ãs).
Exemplificando:
>>> dic = {'ernesto':['carlos', 'jorge','ana'], 'carlos':['ricardo', 'joana'],
'joana': [], 'jorge':['carla', 'francisca'], 'ana':[], 'ricardo':['sara']}
>>> <------- A sua definicão aqui
>>> print primos(dic,'ricardo','francisca')
True
>>>
Resposta
def primos(dicio,nome1,nome2):
"""
Primos são os filhos de dois irmãos...
"""
prog1 = progenitor(dicio,nome1)
prog2 = progenitor(dicio,nome2)
return (prog1 != prog2) and irmaos(dicio,prog1,prog2)
def irmaos(dic,nome1,nome2):
""" Têm o mesmo progenitor?"""
prog1 = progenitor(dic, nome1)
prog2 = progenitor (dic,nome2)
return prog1 == prog2
def progenitor(dic, nome):
""" Devolve o progenitor do nome."""
for chave, valor in dic.items():
if nome in valor:
return chave
return []
Pergunta 2.5
Suponha que está perdido no meio de uma cidade e não tem GPS para se orientar. Pergunta a um transeunte como pode chegar ao seu destino. Como a cidade é geométrica a resposta é fácil. Recebemos uma sequência de indicações do tipo vira à esquerda (E), depois avança (A), depois roda à direita (D), depois avança (A), depois avança de novo (A), depois recua (R), etc.. Usando o módulo cTurtle desenvolva um programa, que quando executado, simule com a tartaruga os seus movimentos quando esta executa os comandos recebidos.
A imagem mostra o que acontece quando manda correr o programa geral main_tarta(). Por conveniência de visualização marcámos o inicio e o fim do percurso com pontos, verde e vermelho, respectivamente. O seu programa chama-se, no código abaixo, navega.
def main_tarta():
tartaruga = cTurtle.Turtle()
tartaruga.setheading(0)
comandos = 'ADAEAERDAAEARA'
navega(comandos, tartaruga)
tartaruga.exitOnClick()
Resposta
def navega(comandos, tartaruga):
"""
Navega numa cidade matricial.
Conversão simples.
"""
tartaruga.shape('turtle')
tartaruga.dot(20,'green')
for comando in comandos:
if comando == 'E':
tartaruga.left(90)
elif comando == 'D':
tartaruga.right(90)
elif comando == 'A':
tartaruga.forward(50)
elif comando == 'R':
tartaruga.back(50)
else:
print 'Comando desconhecido...'
break
tartaruga.dot(20,'red')
Professor, com este comando: "tartaruga.shape",
ResponderEliminarapenas podemos transformar o cursor numa tartaruga?
Cumprimentos, João Pedro
Não. Tal como está o sistema permite as formas 'turtle', 'arrow' (valor por defeito) e 'circle'. Mas também pode você definir outras formas recorrendo à operação addshape do módulo cTurtle. Por exemplo:
ResponderEliminarcTurtle.addshape('triangulo',((5, -3),(0,5),(-5,-3)))
Pode também usar uma imagem em formato gif que tenha no seu disco. Atenção ao tamanho!!
professor desconhecia o comando dot e por isso ao fazer este exercicio primeiro compus uma função auxilar circulo com o parâmetro 'cor' mas o cursor não iniciava no meio do circulo mas sim na parte inferior. Seria claro mais facil utilizar o dot: este comando efectua um circulo completo de raio x e de cor y? (cTurtle.dot(x,y))??
ResponderEliminarobrigado
import cTurtle
ResponderEliminardef circulo(cor):
cTurtle.up()
cTurtle.fillcolor(cor)
cTurtle.fill(True)
cTurtle.circle(10)
cTurtle.fill(False)
def navega(indicacoes):
cTurtle.up()
cTurtle.down()
for i in indicacoes:
if i=='A':
cTurtle.fd(50)
elif i=='D':
cTurtle.rt(90)
elif i=='E':
cTurtle.lt(90)
elif i=='R':
cTurtle.back(50)
else:
break
cTurtle.up()
cTurtle.hideturtle()
return 'Done'
def main_tarta():
circulo('green')
navega('ADAEAERDAAEARA')
circulo('red')
main_tarta()
A minha soluçao seria esta
O comando dot deixa uma marca no sítio do cursor. Se usa o circle o efeito não é o mesmo pois o cursor vai ficar exteriorao círculo. Os argumentos de dot sáo o raio e a cor.
ResponderEliminarahh e o dot so deixa a marca de um circulo?
ResponderEliminarnão conhecia o comando, obrigado professor :)
Veja a tabela 3 do manual do cTurtle que podem levar para as provas. Depois é só testar. O dot marca um ponto.
ResponderEliminar