terça-feira, 15 de outubro de 2013

Dominar a cor

Numa das últimas aulas resolvemos o problema de desenhar quatro quadrados concêntricos, com o bordo com uma cor pré-determinada.
01.import turtle
02. 
03.def quadrado(posx, posy,lado,cor):
04.    turtle.penup()
05.    turtle.goto(posx,posy)
06.    turtle.pendown()
07.    turtle.pencolor(cor)
08.    for i in range(4):
09.        turtle.forward(lado)
10.        turtle.left(90)
11.    turtle.hideturtle()    
12.         
13.def quadrados(posx, posy,lado,incremento):
14.    quadrado(posx,posy,lado,'red')
15.    quadrado(posx-incremento/2,posy - incremento/2,lado+incremento,'blue')
16.    quadrado(-20,-20,60,'green')
17.    quadrado(-30,-30,80,'black')
18.         
19.if __name__ == '__main__':
20.    quadrados()
21.    turtle.exitonclick()
Trata-se de uma solução simples e modular que tem no seu centro a capacidade de desenhar quadrados numa dada posição, com um dado lado e cor. Não é muito interessante como solução. Em particular estamos a chamar em sequência a função quadrado tendo o cuidado de calcular os seus argumentos. E se forem dez e não quatro. Vamos ver como podemos escolher as cores, guardando-as num tuplo para posterior escolha. Apresentamos dois casos. As cores são escolhidas por ordem e quase se esgotam voltamos ao início. Ou as são escolhidas aleatoriamente de entre as possíveis.
01.import turtle
02.import random
03. 
04.def quadrado(posx,posy,angulo,lado, cor):
05.    # Prepara
06.    turtle.penup()
07.    turtle.goto(posx,posy)
08.    turtle.pendown()
09.    turtle.setheading(angulo)
10.    turtle.pencolor(cor)
11.    # Desenha
12.    for i in range(4):
13.        turtle.forward(lado)
14.        turtle.left(90)
15.    turtle.hideturtle()
16.     
17.def quad_concent(num, lado, incremento, posx,posy, angulo):
18.    # Prepara
19.    turtle.penup()
20.    turtle.goto(posx, posy)
21.    turtle.pendown()
22.    turtle. setheading(angulo)
23.    # Cores
24.    cores = ('red','green','blue','yellow','pink','orange','black')
25.    for i in range(num):
26.        cor = cores[i%len(cores)] # <-- Percebe para que serve?
27.        quadrado(posx,posy,angulo,lado,cor)
28.        posx = posx - incremento/2
29.        posy = posy - incremento/2
30.        lado = lado + incremento
31.   
32. 
33.     
34.def quad_concent_b(num, lado, incremento, posx,posy, angulo):
35.    # Prepara
36.    turtle.penup()
37.    turtle.goto(posx, posy)
38.    turtle.pendown()
39.    turtle. setheading(angulo)
40.    # Cores
41.    cores = ('red','green','blue','yellow','pink','orange','black')
42.    for i in range(num):
43.        indice = random.randint(0,len(cores)-1)
44.        cor = cores[indice]
45.        quadrado(posx,posy,angulo,lado,cor)
46.        posx = posx - incremento/2
47.        posy = posy - incremento/2
48.        lado = lado + incremento
49.         
50.         
51.         
52.if __name__ == '__main__':
53.    #quad_concent(10,30,15,0,0,0)
54.    quad_concent_b(10,30,15,0,0,0)
55.    turtle.exitonclick()
O código ilustra as duas possibilidades. Experimente você mesmo não se esquecendo de explorar as diferentes alternativas.

Sem comentários:

Enviar um comentário