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//2
Esta 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
pass
Tratemos 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 cauda
Esta 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