Uma slot-machine tem três posições, podendo aparecer um de 5 objectos diferentes em cada posição. Pretendia-se uma programa que simulasse uma jogada indicando se se ganhou (todas as posições iguais) ou se se perdeu. Esta pergunta era muito simples, tanto mais que se dava a informação relativamente ao método choice do módulo random. Assim uma solução possível seria:
import random
def slot_machine():
valores = 'ABCDE'
res_1 = random.choice(valores)
res_2 = random.choice(valores)
res_3 = random.choice(valores)
if res_1 == res_2 and res_2 == res_3:
return True
return False
Notar que os valores possíveis são fixos e o número de posições também (igual a 3). Podemos generalizar para qualquer conjunto de objectos e qualquer número de posições. Vejamos como.
def slot_machine_b(valores,k):
res = ''
for i in range(k):
res += random.choice(valores)
return all_equal(res)
def all_equal(cadeia):
conta = cadeia.count(cadeia[0])
return conta == len(cadeia)
Como se observa passamos a usar um ciclo for com uma variável a fazer de acumulador. Uma variante para este caso:
def slot_machine_c(valores,k):
ganhar = [''.join(k * [str(elem)]) for elem in valores]
res = ''
for i in range(k):
res += random.choice(valores)
return res in ganhar
Aqui usamos listas por compreensão para gerar todas as sequências de vitória, o que facilita o teste de tudo igual.Pergunta 3
Pediam-se dois programas usando o módulo turtle. Um primeiro, que permitia desenhar uma lâmina, parametrizando a sua posição central, o tamanho dos dois braços e a orientação. O segundo, devia usar o primeiro para desenhar diferentes tipos de ventoinhas. Comecemos pelo primeiro.
def lamina(cent_x,cent_y,lado_1,lado_2,angulo, orient):
# inicialização
turtle.showturtle()
turtle.penup()
turtle.goto(cent_x, cent_y)
turtle.setheading(orient)
turtle.pendown()
turtle.dot(10)
# lamina superior
turtle.forward(lado_2//2)
turtle.lt(angulo)
turtle.forward(lado_1)
# recentra
turtle.penup()
turtle.goto(cent_x, cent_y)
turtle.setheading(orient+180)
turtle.pendown()
# lamina inferior
turtle.forward(lado_2//2)
turtle.lt(angulo)
turtle.forward(lado_1)
# finaliza
turtle.hideturtle()
Limita-se a ser … comprido. Mas não é difícil. Os comentários dispensam mais explicações. Procure tornar o código mais sintético, por exemplo, usando um mesmo programa para desenhar as duas partes da lâmina. Resolvida esta questão, o segundo programa é trivial.
def ventoinha(num, dist, cent_x,cent_y,lado_1,lado_2,angulo, orient):
# inicialização
turtle.showturtle()
turtle.penup()
turtle.goto(cent_x, cent_y)
turtle.pendown()
turtle.dot(10)
# desenha num lâminas
for i in range(num):
lamina_c(cent_x,cent_y,lado_1,lado_2,angulo, orient)
orient += dist

Sem comentários:
Enviar um comentário