Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/09/2010, 09:26
Saturnoyo
 
Fecha de Ingreso: septiembre-2010
Mensajes: 8
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Novato. Fallo usando distintas clases (Python 3)

Hola, estoy aprendiendo Python (3) por mi cuenta pero parece que me he atrancado un poco.

He realizado programas simples de una sola clase y sin problema, pero al usar más de una clase tengo muchas dudas.

El primer problema gordo lo he tenido con los import, al tener varios ficheros cada uno con una clase (tengo 2 clases además del "main"), no me quería reconocer las clases nuevas y me daba fallos en el import todo el rato. Al final decidí dejar ese paso para cuando todo lo demás funcione, asi que he puestos las 3 clases en el mismo archivo para corregir los fallos que tenga e ir probando, como no son muy largas no es dificil.

Tras eso he tenido problemas con el "self". He acabado entendiendo que es como el "this" en java, solo que parece que hay que ponerlo siempre que te refieras a algún método/atributo de la clase en la que trabajas (en java solo se pone cuando hay varios atributos que se llaman igual o cuando haces referencia al objeto en el que estás). Si alguien me lo deja más claro lo agradecería.

Ahora mismo el problema que tengo es que cuando corro el programa no me ejecuta la mayoría de las cosas (no da error pero las variables se quedan a cero, los objetos no se crean...). No se que hacer ya, cuando lo ejecuto paso por paso escribiendolo (usando el shell), las cosas funcionan, pero cuando lo pongo en el programa y ejecuto nada funciona como debería.

¿Quien me ayuda? Lo más seguro es que los errores sean muy tontos, por ser novato y tal. Solo necesito a alguien que me clarifique un poco las cosas. Os dejo el código que estoy usando, es un juego del bingo MUY CUTRE. Se le podrían modificar mil cosas, pero solo quiero probar lo de las clases.

En resumen, estoy creando 3 clases: Bombo, Tablero y el main que se llama Bingo. En el bombo están las bolas que van saliendo, el tablero son los numeros que tu juegas (se juega contra el ordenador) y el main solo va llamando a un par de cosas.

Código:
#Filename: bombo.py
import random

class Bombo:
    largo=0
    lista_bolas=[True,]


    def __init__(self, n):
        for i in range(n-1):
            self.lista_bolas.append(True)
        self.largo=n


    def total_bolas(self):
        j=0
        for i in range(self.largo):
            if(self.lista_bolas[i]==True):
                j+=1
        return j


    def saca_bola(self):
        alea=0
        while(self.lista_bolas[alea]==False):
            alea=int(random.random()*largo)
            if(self.lista_bolas[alea]==True):
                self.lista_bolas[alea].append(False)
                return alea
        return alea


    def mete_bola(self, n):
        self.lista_bolas[n]=True


    def quedan_bolas(self):
        for i in range(self.largo):
            if (self.lista_bolas[i]==True):
                return True
        return False









#Filename: tablero.py

class Tablero:
    sw=0
    lista_tablero=[[],[],[]]
    filas=0
    columnas=0


    def __init__(self, f, c, bolas):
        self.filas=f-1
        self.columnas=c-1
        bombo = Bombo(bolas)
        for i in range (f-1):
            for j in range (c-1):
                self.lista_tablero[i].append(bombo.saca_bola())

                
    def pintar_tablero(self):
        for i in range (self.filas):
            self.lista_tablero[i]


    def buscar_valor(self, n):
        for i in range (self.filas):
            for j in range (self.columnas):
                if (self.lista_tablero[i][j] == n):
                    self.lista_tablero[i][j] = 0


    def linea(self):
        for i in range (self.filas):
            cont = 0
            for j in range (self.columnas):
                if (self.lista_tablero[i][j] == 0):
                    cont += 1
                    if (cont == self.columnas):
                        print ("Canto linea")
                        return True
        return False


    def bingo(self):
        for i in range (self.filas):
            for j in range (self.columnas):
                if (self.lista_tablero[i][j]!=0):
                    return False
        print ("El juego acabó, se ha cantado bingo")
        return True



#Filename: bingo.py
#Realmente es el main.
class Bingo:
    bola = 0
    cont = 1
    fin = False
    tablero_h = Tablero(3, 5, 90)
    tablero_c = Tablero(3, 5, 90)
    bombi = Bombo(90)
    print ("Bienvenido al juego del bingo")
    print ("Este es su tablero:")
    tablero_h.pintar_tablero()
    print ("Este es el tablero de la CPU:")
    tablero_c.pintar_tablero()
    while (bombi.quedan_bolas() == True and fin == False ):
        print ("Turno ", cont)
        cont += 1
        print ("Sacando una bola")
        bola = bombi.saca_bola()
        print ("Ha salido la bola ", bola)
        tablero_h.buscar_valor (bola)
        print ("Su tablero ha quedado asi:")
        tablero_h.pintar_tablero()
        tablero_c.buscar_valor (bola)
        print ("El tablero de la CPU ha quedado asi:")
        tablero_c.pintar_tablero()
        if (tablero_c.bingo() == True or tablero_h.bingo() == True):
                fin = True
De verdad, no pretendo molestar ni que me lo expliquen todo, pero creo que estoy un poco perdido cuando salgo de Java. A ver si alguien puede echarme un cable, creo que podría gustarme Python (aunque el autocompletar de IDLE sea tan feo jaja).

Antes de nada, gracias.