01.
import
random
02.
import
cTurtle
03.
04.
def
gera_pares(n):
05.
res
=
[(random.randint(
1
,
6
), random.randint(
1
,
6
))
for
i
in
range(n)]
06.
return
res
07.
08.
def
cria_ficheiro(nome,dados):
09.
f_out
=
open(nome,
'w'
)
10.
for
par
in
dados:
11.
linha
=
str(par[
0
])
+
'\t'
+
str(par[
1
])
+
'\n'
12.
f_out.write(linha)
13.
f_out.close()
14.
15.
def
le_ficheiro(nome):
16.
f_in
=
open(nome,
'r'
)
17.
dados
=
[]
18.
linha
=
f_in.readline()
19.
while
linha !
=
'
' and linha != '
\n':
20.
pos
=
linha[:
-
1
].split()
21.
dados.append((int(pos[
0
]), int(pos[
1
])))
22.
linha
=
f_in.readline()
23.
24.
f_in.close()
25.
return
dados
26.
27.
def
visualiza(tartaruga,dados):
28.
dados
=
[(
20
*
dado[
0
],
20
*
dado[
1
])
for
dado
in
dados]
# para se poder ver
29.
tartaruga.up()
30.
tartaruga.goto(dados[
0
])
31.
tartaruga.down()
32.
33.
for
ponto
in
dados[
1
:]:
34.
tartaruga.goto(ponto)
35.
36.
37.
def
main612(ficheiro, num_pontos):
38.
# Formação dos dados
39.
pares
=
gera_pares(num_pontos)
40.
cria_ficheiro(ficheiro,pares)
41.
# Leitura dos dados
42.
pares_tartaruga
=
le_ficheiro(ficheiro)
43.
# Visualização
44.
tartaruga
=
cTurtle.Turtle()
45.
visualiza(tartaruga,pares_tartaruga)
46.
tartaruga.exitOnClick()
Com a definição gera_pares fabricamos a lista de pares de inteiros, entre 1 e 6. Usamos listas por compreensão.
Criamos o ficheiro, escrevendo os dados linha a linha. Como não nos podemos esquecer que num ficheiro de texto tudo tem que ser do tipo cadeia de caracteres, temos que fazer a conversão dos tipos. Entre dois números colocamos uma tabulação, e, no final a mudança de linha.
A leitura do ficheiro é agora a operação inversa, não havendo muito a acrescentar, pois retoma programas já criados.
A visualização parte da lista das coordenadas e faz mover uma tartaruga na tela de acordo com esses valores.
O programa principal, isto é, aquele que vai ser chamado, denominado main612, limita-se a dividir em três partes o programa: geração dos números, leitura dos dados e visualização.
a minha solução foi a seguite :
ResponderEliminarimport random
from cTurtle import *
def fic12 ():
lista=['red','green','blue','black','orange']
n=input ("quantos pares pretende :")
a =open('C:\\Users\\nhuk the one\\Desktop\\IprpExercicios\\textot.txt','w')
for i in range (n):
x= random.randint (-400,400)
y=random.randint(-300,300)
z= str (x) +" "+str(y)+"\n"
a.write(z)
a.close()
d=open('C:\\Users\\nhuk the one\\Desktop\\IprpExercicios\\textot.txt','r')
for i in range (n):
pencolor(lista[random.randint(0,4)])
pensize(random.randint(1,5))
aux=d.readline()
aux=aux.split()
x=int(aux[0])
y=int(aux[1])
goto(x,y)
fic12()
eu meti as cores e o tamanho da caneta para ficar mais interessante.
pelo o programa que o professor fez, acho que interpretei mal o enuciado mas o que vale é que ja pratiquei um bocado.
ResponderEliminarA sua solução está globalmente correcta (há o detalhe de os números serem entre 1 e 6). A core e a espessura do traço acrescentam uma dimensão estética interessante. A minha crítica tem mais que ver com o facto de ter uma solução numa única definição. Assim o seu programa não tem modularidade, é de leitura difícil, não promove a reutilização de código. O programa é pequeno, eu sei, mas não usar bons princípios de programação, mesmo em casos simples, faz com que quando os problemas sejam complexos vá sentir grandes dificuldades. Uma das regras fundamentais em programação é dividir para reinar. Pense nisso!
ResponderEliminarMais um apontamento sobre a solução. Como os números são pequenos, entre 1 e 6, multiplico as coordenadas por 20 para ampliar. Não é uma solução bonita. melhor será usar o método setWorldCoordinates. Por exemplo, colocar antes de passar ao desenho, cTurtle.setWorldCoordinates(0,0,7,7).
ResponderEliminarProfessor, na linha 19 do seu código o que significa dizer: (linha != '\n') e de que forma é que esta condição influencia o ciclo while?
ResponderEliminarAdriano Vinhas:
ResponderEliminarO operador "!=" significa diferente. ´\n´é o caracter de controle para nova linha. Assim a linha 19:
while linha != '' and linha !='\n':
deve ser lida como:
enquanto o ficheiro não chegou ao fim (primeira condição) e a linha não for vazia (segunda condição).
Se não tiver esta segunda condição e o ficheiro tiver linhas vazias a separar os dados o programa daria erro.