Este problema fala-nos de quadrados concêntricos cujas cores alternam entre o vermelho e o azul. É-nos dito também a posição e o valor do lado do quadrado mais pequeno e, ainda o modo como o quadrado aumenta.
É muita coisa para pensar ao mesmo tempo. Vamos então por partes. Vamos supor que é apenas um quadrado e que a cor é irrelevante. O leitor atento notará logo que assim formulado, trata-se na realidade do problema 4.20. E é! Vamos então resolver o dito.
def quadrado(tartaruga,x,y,lado):
"""Desenha um quadrado."""
# prepara
tartaruga.up()
tartaruga.goto(x,y)
tartaruga.hideturtle()
tartaruga.down()
# desenha
for i in range(4):
tartaruga.forward(lado)
tartaruga.right(90)
Esta solução não tem nada de especial: o problema foi dividido em duas partes. Na primeira, colocamos a tartaruga no sítio apropriado. Na segunda, desenhamos o quadrado, através de uma repetição de desenho do lado e rotação de 90 graus. Pensemos agora num outro detalhe: a cor.
def quadrado_cor(tartaruga,x,y,lado,cor):
""" Desenha um quadrado colorido."""
tartaruga.color(cor)
quadrado(tartaruga,x,y,lado)
Trivial, certo? A partir daqui, vamos querer desenhar quadrados coloridos concêntricos. Quantos serão será um parâmetro do problema. E terei um ciclo
for. Algo assim:
def quad_concentricos(n,tartaruga,x,y,lado,cor,d):
"""Desenha n quadrados coloridos concêntricos."""
for i in range(n):
#desenha novo quadrado colorido
Mas como os faço concêntricos? A ideia é dada pela imagem seguinte:
Ou seja. Conhecidas as coordenadas do canto inferior esquerdo do último quadrado desenhado, a do próximo resulta de eu alterar essas coordenadas retirando um dado valor a x e aumentando desse mesmo valor y (notar o modo como estão orientados os eixos!). Se eu fizer isso, resulta claro que o novo lado vale
a + 2 *d, se
a dor o valor do lado inicial. Daqui resulta o código:
def quad_concentricos(n,tartaruga,x,y,lado,cor,d):
"""Desenha n quadrados concêntricos em cores alternadas."""
for i in range(n):
quadrado_cor(tartaruga,x-i*d, y+i*d, lado+i*2*d,cor)
Uso o valor de
i para controlar o incremento. E como alterno as cores??? Se pensarmos bem, veremos que não é difícil. vou usar o valor de
i: se for par, azul, se for ímpar, vermelho!!! E chego ao programa final.
def quad_concentricos(n,tartaruga,x,y,lado, cor_1, cor_2,d):
"""Desenha n quadrados concêntricos em cores alternadas."""
for i in range(n):
if i % 2 == 0:
quadrado_cor(tartaruga,x-i*d, y+i*d, lado+i*2*d, cor_1)
else:
quadrado_cor(tartaruga,x-i*d, y+i*d, lado+i*2*d, cor_2)