6443
Comentário:
|
7102
|
Deleções são marcadas assim. | Adições são marcadas assim. |
Linha 3: | Linha 3: |
Estou pensando em implementar alguns operadores principalmente na classe Cartela, pois será um bom exemplo do uso de operadores na linguagem python como: str, repr, comparação. Deixaria o codigo bem mais elegante, se niguem fizer em breve devo fazer e postar aqui. | 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. |
Linha 7: | Linha 7: |
{{{ #!/usr/bin/python |
{{{#!/usr/bin/python |
Linha 53: | Linha 52: |
return("Cartela n %d" % (self.chave)) | return("Cartela %s" % (self.chave)) |
Linha 60: | Linha 59: |
print "Cartela n %d" % (self.chave) | print "Cartela %s" % (self.chave) |
Linha 121: | Linha 120: |
def adicionaCartela(self,chave): | def adicionaCartela(self,cartela): |
Linha 125: | Linha 124: |
self.cartelas.append(self.confereCartela(Cartela(self.pedras,chave))) | self.cartelas.append(self.confereCartela(cartela)) |
Linha 139: | Linha 138: |
del comparar # codigo feio daqui para baixo (ainda tem q decidir como tratar esse caso) print "Cartela FALSA" sys.exit() return(False) |
comparar = self.confereCartela(Cartela(self.pedras,comparar.chave)) |
Linha 164: | Linha 159: |
b.adicionaCartela(x+1) | b.adicionaCartela(Cartela(b.pedras,x+1)) |
Linha 167: | Linha 162: |
#Demostração que cartelas repetidas não entram na lista de cartelas print b.cartelas[0] #eu gostaria de ter tirado uma copia do objeto aqui mas nao sei como fazer #desta forma apenas uma copia do endereço do conteudo do objeto foi feita #ou seja a fala é exatamente a mesma primeira cartela falsa = b.cartelas[0] #quando altero a chave da falsa estou alterando a chave da primera tb falsa.chave = "Falsa" falsa.exibeCartela() b.adicionaCartela(falsa) #e isso a prova q uma mesma cartela (levando em cosideração os numeros) não #é adicionada duas vezes na lista de cartela do bingo b.cartelas[x+1].exibeCartela() #isso é a prova de que nao foi feito uma copia b.cartelas[0].exibeCartela() |
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()
}}}