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 FalseNotar 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 ganharAqui 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