Código que postei na intenção de aprender a usar o wiki, espero que ele ajude alguem aprender python, fiz esse código na intenção de mostrar para meu primo que está aprendendo algumas coisas básicas da linguagem.
Como era de se esperar a brincadeira com python está muito divertida o que acabou resultando em mais códigos, fiz alguns operadores para classe cartela e algumas melhoras no funcionamento do programa. Tenho um amigo que inicio uma interface, daqui a pouco ela aparece por aqui.
Código
{{{#!/usr/bin/python # -*- coding: utf-8 -*- import random import sys
class Numeros:
- """ Gera os numeros para cada letra do bingo. O bingo inicia em 1 até o numero 75, dividido em 5 colunas B de 1 a 15, I de 16 a 30, N de 31 a 45, G de 46 a 60 e O de 61 a 75 """
def init(self):
self.numeros = ],[],[],[],[ for x in range(0,5):
- for y in range(x*15+1,(x+1)*15+1):
- self.numeros[x].append(y)
- for y in range(x*15+1,(x+1)*15+1):
class Cartela:
- """ Gerencia as cartelas do bingo. Cria uma nova cartela gerada apartir de numeros aletorio preenchendo cada coluna da cartela do bingo de acordo com a quantidade de numeros informadas nos parametros de inicialização da classe """
def init(self,num,chave,b=5,i=5,n=5,g=5,o=5):
- self.pedrasmarcadas = 0
self.cartela = ],[],[],[],[ self.quantidade = [b,i,n,g,o] self.chave = chave for x in range(0,5):
- self.cartela[x] = random.sample(num.numeros[x],self.quantidade[x]) self.cartela[x].sort()
def eq(self,other):
- """ Compara duas cartelas. """ return(self.cartela == other.cartela)
def str(self):
- """ Texto com a chave da cartela. """ return("Cartela %s" % (self.chave))
- """ Imprime na saida padrão os numeros da cartela. """ print "=" * 3*5 print "Cartela %s" % (self.chave) print "=" * 3*5 print "%3s%3s%3s%3s%3s" % ("B","I","N","G","O") for x in range(0,5):
- print "%3d%3d%3d%3d%3d" % (self.cartela[0][x],self.cartela[1][x], \ self.cartela[2][x],self.cartela[3][x],self.cartela[4][x])
- """ Verifica a existencia da pedra na cartela. Identifica a qual coluna a pedra pertence em seguida verifica se nesta coluna existe a pedra,que é usada como retorno, ou uma lista vazia é retornada caso não exista a pedra na cartela """ col = pedra / 15 if pedra % 15 == 0:
- col = col - 1
- self.pedrasmarcadas = 0
# retorno = [] # for x in self.cartela[col]: # if pedra == x: # retorno = [x] # return(retorno)
# O mesmo codigo pode ser escrito como abaixo:
- return([x for x in self.cartela[col] if pedra == x])
class Bingo:
def init(self):
- """ Iniciando o bingo. É inicializado o vetor de cartelas, as pedras restantes (no inicio do bingo: todas as pedras são as restantes) e as pedras do bingo separadas por coluna 5 colunas B I N G O. """ self.cartelas = [] self.restantes = range(1,76) self.pedras = Numeros()
- """ Remove um numero da lista de numeros restantes no bingo. Cada numero da lista de restantes é comparado com o numero a ser removido, apenas os restantes diferentes do numero a ser removido são inseridos na nova lista. Incrementa-se pedras marcadas nas cartelas que possuem o numero a ser removido. """ self.restantes = filter(lambda arg:arg != numero,self.restantes) #Verificando quais cartelas possuem o numero removido para incrementar # o numero de pedras marcadas nas cartelas for cartela in self.cartelas:
- if cartela.existePedra(numero):
# cartela.pedrasmarcadas = cartela.pedrasmarcadas + 1
- cartela.pedrasmarcadas += 1
- def adicionaCartela(self,cartela):
- """ Adiciona uma nova cartela a lista de cartelas do Bingo. """ self.cartelas.append(self.confereCartela(cartela))
# self.cartelas.append(Cartela(self.pedras,chave))
- def confereCartela(self,comparar):
- """ Compara se uma cartela exite idêntica na lista de cartelas do bingo. Retorna a cartela comparada caso não exista uma com os mesmos numeros na lista de cartelas do bingo e False caso ela exista na lista """ for x in self.cartelas:
# if x.cartela == comparar.cartela: # Agora usando a implementação de igualdade eq da classe Cartela
- if x == comparar:
- comparar = self.confereCartela(Cartela(self.pedras,comparar.chave)) break
- return(comparar)
- def sorteaPedra(self):
- """ Escolhe uma pedra entre as restantes no bingo. """ return(random.choice(self.restantes))
def inicio():
- """ iniciando o bingo. Simulação de utilização do aplicativo Bingo. """ b = Bingo() #Criando Cartelas for x in range(0,100):
- b.adicionaCartela(Cartela(b.pedras,x+1)) print b.cartelas[x]
- pedrasorteada = b.sorteaPedra() print pedrasorteada, b.removeNumerodosrestantes(pedrasorteada) for cartela in b.cartelas:
- if cartela.pedrasmarcadas == 25:
- print print "BATEU" print "Faltavam %d" % (len(b.restantes)) print b.restantes cartela.exibeCartela() sys.exit()
- if cartela.pedrasmarcadas == 25:
#Executando o aplicativo se for chamado diretamente if name == 'main':
- inicio()
}}}