O que aparece no lugar do ponto de interrogação?
>>> x = 'abacadabra' >>> x[1] = 'zeus' Traceback (most recent call last): Python Shell, prompt 2, line 1 builtins.TypeError: 'str' object does not support item assignmentAparece um erro pois as cadeias de caracteres são imutáveis não podendo o seu valor ser alterado.
P2
Como saber se uma moeda está enviesada? Fazemos vários lançamentos e comparamos com o valor esperado para uma das duas opções. Como nada neste mundo é perfeito aceitamos uma pequena discrepância em relação a esse valor. Para resolver o problema, vamos devagar e por partes. Primeiro uma versão simples que apenas simula e compara com o caçoe médio esperado.
def enviesada_a(n): # lança e conta conta = 0 for i in range(n): conta = conta + random.randint(0,1) # analisa return conta != n//2Esta versão baseia-se num padrão dec programação conhecido por ciclo - acumulador. O nome conta está associado a um objecto cujo valor corresponde ao numero de vezes que já saiu caras (1). O ciclo é repetido o número de vezes pretendido. A comparação final é feita usando a divisão inteira.
Vamos partir desta solução para a solução final pretendida. A moeda estará enviesada se o valor obtido estiver fora de um dado intervalo.
def enviesada(n,perc): """ n = número de lançamentos perc = percentagem aceitável [0,1] """ # lança e conta conta = 0 for i in range(n): conta = conta + random.randint(0,1) # analisa espera = n/2 inf_ = (1 - perc)* espera sup_ = (1 + perc) * espera return (conta < inf_) or (conta > sup_)Como se observa usamos agora uma divisão de floats.
P3
Queremos desenhar bonecos como o da figura. Olhando para a figura observamos que precisamos saber desenhar balões coloridos e uma cauda que é composta de repetições de uma sequência de quatro segmentos com orientações alternadas. Uma solução simples vai envolver três passos:
def boneco(n,raio_1, raio_2, posx,posy, orientacao, cor_1,cor_2,cor_3): # desenha balão grande # desenha balão pequeno # desenha cauda passTratemos dos balões isoladamente:
def bola(raio, posx,posy, orientacao, cor): turtle.penup() turtle.goto(posx,posy) turtle.pendown() turtle.setheading(orientacao) turtle.fillcolor(cor) turtle.begin_fill() turtle.circle(raio) turtle.end_fill() turtle.hideturtle()Esta solução corresponde ao que já foi feito nas aulas!!! Vamos tratar da parte nova: a cauda. olhando para a figura vemos que é composta a partir de uma sequência de formas mais simples. Estas por sua vez são formadas por três traços. Eis uma solução genérica para a cauda:
def cauda(n, tipo, posx, posy,orientacao, comp, cor): turtle.penup() turtle.goto(posx,posy) turtle.pendown() turtle.setheading(orientacao) turtle.pencolor(cor) for i in range(n): turtle.forward(comp) turtle.right(tipo * 60) turtle.hideturtle()Dizemos que é genérica porque usamos o parâmetro n, que no caso que nos interessa será igual a 3. Por outro lado, note-se que o parâmetro tipo é usado para determinar a orientação de cada sequência de três segmentos. tipo pode valer 1 ou -1, pois só temos duas orientações a considerar.
Resolvidas as três questões (balão grande, balão pequeno e cauda), vamos juntar tudo. A primeira questão é a de saber como juntamos os dois balões. A ideia é desenhar o maior e depois, a partir da posição final e da orientação, calcular a posição do centro do balão pequeno. Uma hipótese é:
def boneco(n,raio_1, raio_2, posx,posy, orientacao, cor_1,cor_2,cor_3): # desenha balão grande bola(raio_1, posx,posy, orientacao, cor_1) # desenha balão pequeno turtle.penup() turtle.setheading(orientacao-90) turtle.forward(2*raio_2) turtle.setheading(orientacao) turtle.pendown() bola(raio_2, turtle.xcor(),turtle.ycor(), orientacao, cor_2) # desenha caudaEsta solução é fácil de entender se nos lembrarmos que a tartaruga desenha uma circunferência tendo o centro à sua esquerda! Claro que podemos fazer de outro modo:
def balao(n,raio_1, raio_2, posx,posy, orientacao, cor_1,cor_2,cor_3): bola(raio_1, posx,posy, orientacao, cor_1) bola(-raio_2, turtle.xcor(),turtle.ycor(), orientacao, cor_2)Percebe a diferença???
Só falta acrescentar a cauda…
def balao(n,raio_1, raio_2, posx,posy, orientacao, cor_1,cor_2,cor_3): bola(raio_1, posx,posy, orientacao, cor_1) turtle.penup() turtle.setheading(orientacao-90) turtle.forward(2*raio_2) turtle.setheading(orientacao) turtle.pendown() bola(raio_2, turtle.xcor(),turtle.ycor(), orientacao, cor_2) for i in range(n): cauda(3,(-1)**i,turtle.xcor(),turtle.ycor(),turtle.heading(),20,cor_3) turtle.hideturtle()E pronto! Percebeu o modo como alternamos a orientação da cauda??? Simplesmente fazendo o tipo igual a (-1)** i, o que faz com que o tipo vá ser alternadamente 1 e -1, como pretendido!
Pode usar este programa para criar variantes. Por exemplo:
def baloes(n,raio_1, raio_2, posx,posy, orientacao, cor_1,cor_2,cor_3): # balão grande bola(raio_1, posx,posy, orientacao, cor_1) # n balões pequenos à volta do balão grande... for i in range(n): turtle.penup() turtle.circle(raio_1,360/n) turtle.pendown() bola(-raio_2, turtle.xcor(),turtle.ycor(), turtle.heading(), cor_2) turtle.hideturtle()
Sem comentários:
Enviar um comentário