Os cartões para jogar BINGO têm 5 colunas, cada uma com 5 números. As colunas têm associado as letras B, para a primeira coluna, I para a segunda, N para a terceira, G para a quarta e O para a quinta. Nas primeira colunas os números podem ser entre 1 e 15, na segunda entre 16 e 30, na terceira entre 31 e 45, na quarta entre 46 e 60 e na quinta entre 61 e 75. Escreva um programa que permita gerar e guardar de modo apropriado um cartão de bingo. Escreva um segundo programa que permita visualizar um cartão de bingo. Vejamos a solução para a primeira questão:
import random def bingo(): nome = 'BINGO' cartao = dict() for i,letra in enumerate(nome): lista = list(range(i*15 +1, i*15 + 16)) numeros = random.sample(lista,5) numeros.sort() cartao[letra] = numeros return cartaoO que tem de especial a solução? Desde logo usamos um dicionário para guardar a representação de um cartão. A chave é uma das letras de ‘BINGO’ e o valor são os 5 números. Usamos o método sample do módulo random para gerar os 5 números. Este método garante que os números serão todos diferentes. Finalmente usamos o método enumerate para poder ter uma forma simples de gerar os diferentes intervalos dos números.
A segunda questão era a da visualização do cartão. Aqui vai a solução:
def mostra_bingo(cartao): numeros_colunas = list(cartao.values()) numeros_linhas = list(zip(*numeros_colunas)) print('%2s\t%2s\t%2s\t%2s\t%2s\t'% tuple('BINGO')) print('_' * 35) for linha in numeros_linhas: print('%2s\t%s\t%s\t%s\t%s\t'% linha)Qual era a dificuldade deste problema? O facto de termos de passar de listas de números associados a letras para uma visualização por colunas. Esta é uma situação onde a operação zip mostra todo o seu esplendor. O facto de fazermos:
numeros_linhas = list(zip(*numeros_colunas))tem a seguinte explicação. Primeiro, zip é um iterador pelo que para obtermos todos os seus elementos de uma vez temos que usar list sobre o resultado de zip. Depois, o asterisco (*) resulta de zip se aplicar a uma sequência de argumentos e numeros_colunas ter apenas um. numeros_colunas é uma lista em que cada elemento é uma lista de 5 listas cada uma com 5 números. Com o asterisco passamos a ter as 5 listas como argumentos do zip.
B I N G O __________________ 2 17 33 49 61 5 18 34 50 62 8 26 35 56 66 11 27 37 57 72 13 28 40 60 74
Sem comentários:
Enviar um comentário