Clase Numero 18 – Repaso general

Ejercicio de Matriz

"""
Ejemplo de Matriz y recorrerla
"""

import random as R

def crearMatriz(cf,cc,d,h):
    filas = []
    for f in range(cf):
        columnas = []
        col = R.randint(0,cc)
        for c in range(col):
            columnas.append(R.randint(d,h))
        filas.append(columnas)       
    return filas


def mostrar(mat):

    for f in range(len(mat)):
        for c in range(len(mat[f])):
            print("%8d" %mat[f][c],end = " ")
        print("")

def elMayorDeCadaFila(mat):
    mayoresF = []
    
    for f in range(len(mat)):
        max = 0
        for c in range(len(mat[f])):
            if mat[f][c] > max:
                max = mat[f][c]
        
        mayoresF.append(max) 

    return mayoresF

def elMayorDeCadaColumna(mat):
    mayores = []
    
    for c in range(len(mat[0])):
        max = 0
        for f in range(len(mat)):
            if mat[f][c] > max:
                max = mat[f][c]
        
        mayores.append(max) 

    return mayores

def filaSumaMas(mat):
    filaMax = 0
    maximo = 0
    for f in range(len(mat)):
        suma = 0
        for c in range(len(mat[0])):
            suma += mat[f][c]
        if suma > maximo:
            maximo = suma
            filamax = f
    return filaMax


def main():
    mat = crearMatriz(10,10,1,9)
    mostrar(mat)
    print(elMayorDeCadaFila(mat))
    #print(elMayorDeCadaColumna(mat))
    print("la fila que suma mas: ",filaSumaMas(mat))


main()

Resultado

>>> %Run matrix_ej.py
       6 
       5        1        6        1        4        2 
       8        3        1        4        9        6        7        5        7 
       2        6        8        8        4 
       2        5        9        9        5        4        7        4        3 
       6        8        7        9        8        2        6        3 
       4        7        8 
       9 
       5        8        5        6        6        5        6        8        3 
       3        8        8 
[6, 6, 9, 8, 9, 9, 8, 9, 8, 8]
la fila que suma mas:  0

Ejercicio Ta Te Ti con IA juega solo

import random as R


# LEER UN ENTERO CON CONTROL DE ERROR DE TIPO DE DATO

def leerInt(cartel, desde=-9999999999, hasta=9999999999):
    salir = False
    numero = 0
    while not salir:
        try:
            numero = int(input(cartel))
            if numero < desde or numero > hasta:
                print("ERROR ==> numero fuera de rango\n")
            else:
                salir = True
        except:
            print("ERROR ==> Ingrese un numero entero\n")
    return numero
# -------------------------------------------------------------------------


class Ficha:

    def __init__(self, caracter):
        self.caracter = caracter

    def __str__(self):
        return '['+self.caracter+']'


CRUZ = Ficha('X')
CIRC = Ficha('O')
NADA = Ficha(' ')

# -------------------------------------------------------------------------


class Tablero:
    
    def __init__(self, filas=3, columnas=3):
        self.cf = filas
        self.cc = columnas
        self.mat = []
        for f in range(self.cf):
            col = []
            for c in range(self.cc):
                col.append(NADA)
            self.mat.append(col)

    def __str__(self):
        cadena = ""
        for f in range(self.cf):
            for c in range(self.cc):
                cadena += str(self.mat[f][c])
            cadena += "\n"
        return cadena

    def poner(self, f, c, ficha):
        self.mat[f][c] = ficha

    def ver(self, f, c):
        return self.mat[f][c]

    def existe(self, ficha):
        for f in range(self.cf):
            for c in range(self.cc):
                if ficha == self.mat[f][c]:
                    return True
        return False

    def filaIgual(self, fila, ficha):
        for c in range(self.cc):
            if ficha != self.mat[fila][c]:
                return False
        return True

    def columnaIgual(self, columna, ficha):
        for f in range(self.cf):
            if ficha != self.mat[f][columna]:
                return False
        return True

    def digonalIgual(self, ficha):
        for x in range(self.cf):
            if self.mat[x][x] != ficha:
                return False
        return True

    def digonalSecIgual(self, ficha):
        f = 0
        c = self.cc-1
        while f < self.cf:
            if self.mat[f][c] != ficha:
                return False
            f += 1
            c -= 1
        return True

    def esEsquina(self, fila, columna):
        return self.esEsqSupIzq(fila, columna) or self.esEsqSupDer(fila, columna) or self.esEsqInfIzq(fila, columna) or self.esInfDer(fila, columna)

    def esEsqSupIzq(self, fila, columna):
        return fila == 0 and columna == 0

    def esEsqSupDer(self, fila, columna):
        return fila == 0 and columna == self.cc-1

    def esEsqInfIzq(self, fila, columna):
        return fila == self.cf-1 and columna == 0

    def esInfDer(self, fila, columna):
        return fila == self.cf-1 and columna == self.cc-1
# -------------------------------------------------------------------------


class Jugador(object):
    def __init__(self, nombre, ficha):
        self.nombre = nombre
        self.ficha = ficha

    def __str__(self):
        return self.nombre + " ==> "+str(self.ficha)

    def jugar(self, tablero):
        pass
# -------------------------------------------------------------------------


class Humano(Jugador):
    def __init__(self, nombre, ficha):
        Jugador.__init__(self, nombre, ficha)

    def jugar(self, tablero):
        salir = False
        while not salir:
            fila = leerInt("Fila: ", 0, tablero.cf-1)
            columna = leerInt("Columna: ", 0, tablero.cc-1)
            if tablero.ver(fila, columna) == NADA:
                salir = True
        return Coordenada(fila, columna)
# -------------------------------------------------------------------------


class Computadora(Jugador):
    def __init__(self, nombre, ficha):
        Jugador.__init__(self, nombre, ficha)

    def jugar(self, tablero):
        salir = False
        while not salir:
            fila = R.randint(0, tablero.cf-1)
            columna = R.randint(0, tablero.cc-1)
            if tablero.ver(fila, columna) == NADA:
                salir = True
        return Coordenada(fila, columna)
# -------------------------------------------------------------------------


class La_Muerte(Jugador):

    def __init__(self, nombre, ficha):
        Jugador.__init__(self, nombre, ficha)

    def jugar(self, tablero):
        salir = False
        while not salir:
            if self.estateti("O", tablero):
                f = self.qfila("O", tablero)
                # print(f)
                for c in range(tablero.cc):
                    if str(tablero.ver(f, c)) == str(Ficha(" ")):
                        fila = f
                        columna = c
                        salir = True
            else:
                if self.estateti2("O", tablero):
                    # print("holaas")
                    c = self.qcolumna("O", tablero)
                    #   print(c)
                    for f in range(tablero.cf):
                        if str(tablero.ver(f, c)) == str(Ficha(" ")):
                            fila = f
                            columna = c
                            salir = True
                else:
                    if self.estateti("X", tablero):
                        f = self.qfila("X", tablero)
                        for c in range(tablero.cc):
                            if str(tablero.ver(f, c)) == str(Ficha(" ")):
                                fila = f
                                columna = c
                                salir = True
                    else:
                        if self.estateti2("X", tablero):
                            # print("holaas")
                            c = self.qcolumna("X", tablero)
                        #   print(c)
                            for f in range(tablero.cf):
                                if str(tablero.ver(f, c)) == str(Ficha(" ")):
                                    fila = f
                                    columna = c
                                    salir = True
                        else:
                            if str(tablero.ver(2, 2)) == str(Ficha(" ")):
                                fila = 2
                                columna = 2
                                salir = True
                            elif str(tablero.ver(2, 2)) == str(Ficha("O")) and str(tablero.ver(2, 0)) == str(Ficha(" ")):
                                print("HOLA")
                                fila = 2
                                columna = 0
                                salir = True
                            elif str(tablero.ver(2, 2)) == str(Ficha("O")) and str(tablero.ver(2, 0)) == str(Ficha("O")) and str(tablero.ver(0, 2)) == str(Ficha(" ")):
                                fila = 0
                                columna = 2
                                salir = True
                            else:
                                if str(tablero.ver(0, 2)) == str(Ficha(" ")):
                                    fila = 0
                                    columna = 2
                                    salir = True
                                elif str(tablero.ver(0, 2)) == str(Ficha("O")) and str(tablero.ver(2, 2)) == str(Ficha(" ")):
                                    fila = 2
                                    columna = 2
                                    salir = True
                                elif str(tablero.ver(0, 2)) == str(Ficha("O")) and str(tablero.ver(0, 0)) == str(Ficha(" ")):
                                    fila = 0
                                    columna = 0
                                    salir = True
                                elif str(tablero.ver(0, 2)) == str(Ficha("O")) and str(tablero.ver(0, 0)) == str(Ficha("O")) and str(tablero.ver(2, 0)) == str(Ficha(" ")):
                                    fila = 2
                                    columna = 0
                                elif str(tablero.ver(0, 2)) == str(Ficha("O")) and str(tablero.ver(2, 2)) == str(Ficha("O")) and str(tablero.ver(2, 0)) == str(Ficha(" ")):
                                    fila = 2
                                    columna = 0
                                    salir = True
                                elif str(tablero.ver(0, 0)) == str(Ficha("X")) and str(tablero.ver(2, 2)) == str(Ficha("X")) and str(tablero.ver(1, 1)) == str(Ficha(" ")):
                                    fila = 1
                                    columna = 1
                                    salir = True
                                else:
                                    if str(tablero.ver(2, 0)) == str(Ficha(" ")):
                                        fila = 2
                                        columna = 0
                                        salir = True
                                    else:
                                        if str(tablero.ver(1, 1)) == str(Ficha(" ")):
                                            fila = 1
                                            columna = 1
                                            salir = True
                                        else:
                                            f = R.randint(0, tablero.cf-1)
                                            c = R.randint(0, tablero.cc-1)
                                            if str(tablero.ver(f, c)) == str(Ficha(" ")):
                                                fila = f
                                                columna = c
                                                salir = True

        return Coordenada(fila, columna)

    def qfila(self, ficha, tablero):
        for fila in range(tablero.cf):
            cont = 0
            blanco = 0
            for columna in range(tablero.cc):
                if str(tablero.ver(fila, columna)) == str(Ficha(ficha)):
                    cont += 1
                if str(tablero.ver(fila, columna)) == str(Ficha(" ")):
                    blanco += 1
            if cont == 2 and blanco == 1:
                return fila

    def qcolumna(self, ficha, tablero):
        for columna in range(tablero.cc):
            cont = 0
            blanco = 0
            for fila in range(tablero.cf):
                # print("acacacacacacac")
                if str(tablero.ver(fila, columna)) == str(Ficha(ficha)):
                    cont += 1
                if str(tablero.ver(fila, columna)) == str(Ficha(" ")):
                    blanco += 1
            if cont == 2 and blanco == 1:
                return columna

    def estateti2(self, ficha, tablero):
        for columna in range(tablero.cc):
            cont = 0
            blanco = 0
            for fila in range(tablero.cf):
                if str(tablero.ver(fila, columna)) == str(Ficha(ficha)):
                    cont += 1
                if str(tablero.ver(fila, columna)) == str(Ficha(" ")):
                    blanco += 1
            if cont == 2 and blanco == 1:
                return True

    def estateti(self, ficha, tablero):
        for fila in range(tablero.cf):
            cont = 0
            blanco = 0
            for columna in range(tablero.cc):
                if str(tablero.ver(fila, columna)) == str(Ficha(ficha)):
                    cont += 1
                if str(tablero.ver(fila, columna)) == str(Ficha(" ")):
                    blanco += 1
            if cont == 2 and blanco == 1:
                return True


class CompuPiola(Jugador):
    def __init__(self, nombre, ficha):
        Jugador.__init__(self, nombre, ficha)

    def esTateti(self, tablero, ficha):
        for fila in range(tablero.cf):
            if tablero.filaIgual(fila, ficha):
                return True
        for columna in range(tablero.cc):
            if tablero.columnaIgual(columna, ficha):
                return True
        return tablero.digonalIgual(ficha) or tablero.digonalSecIgual(ficha)

    def jugar(self, tablero):
        for f in range(tablero.cf):
            for c in range(tablero.cc):
                if tablero.ver(f, c) == NADA:
                    tablero.poner(f, c, self.ficha)
                    if self.esTateti(tablero, self.ficha):
                        tablero.poner(f, c, NADA)
                        return Coordenada(f, c)
                    else:
                        tablero.poner(f, c, NADA)

        if self.ficha == CIRC:
            otra = CRUZ
        else:
            otra = CIRC

        for f in range(tablero.cf):
            for c in range(tablero.cc):
                if tablero.ver(f, c) == NADA:
                    tablero.poner(f, c, otra)
                    if self.esTateti(tablero, otra):
                        tablero.poner(f, c, NADA)
                        return Coordenada(f, c)
                    else:
                        tablero.poner(f, c, NADA)
        salir = False
        fila = 0
        columna = 0

        while not salir:
            fila = R.randint(0, tablero.cf-1)
            columna = R.randint(0, tablero.cc-1)
            if tablero.ver(fila, columna) == NADA:
                salir = True
        return Coordenada(fila, columna)


class ReCompuPiola(Jugador):
    def __init__(self, nombre, ficha):
        Jugador.__init__(self, nombre, ficha)

    def jugar(self, tablero):
        for f in range(tablero.cf):
            for c in range(tablero.cc):
                if tablero.ver(f, c) == NADA:
                    tablero.poner(f, c, self.ficha)
                    if self.esTateti(tablero, self.ficha):
                        tablero.poner(f, c, NADA)
                        return Coordenada(f, c)
                    else:
                        tablero.poner(f, c, NADA)

        if self.ficha == CIRC:
            otra = CRUZ
        else:
            otra = CIRC

        for f in range(tablero.cf):
            for c in range(tablero.cc):
                if tablero.ver(f, c) == NADA:
                    tablero.poner(f, c, otra)
                    if self.esTateti(tablero, otra):
                        tablero.poner(f, c, NADA)
                        return Coordenada(f, c)
                    else:
                        tablero.poner(f, c, NADA)
        salir = False
        fila = 0
        columna = 0

        while not salir:
            fila = R.randint(0, tablero.cf-1)
            columna = R.randint(0, tablero.cc-1)
            if tablero.ver(fila, columna) == NADA:
                salir = True
        return Coordenada(fila, columna)

    def esTateti(self, tablero, ficha):
        for fila in range(tablero.cf):
            if tablero.filaIgual(fila, ficha):
                return True
        for columna in range(tablero.cc):
            if tablero.columnaIgual(columna, ficha):
                return True
        return tablero.digonalIgual(ficha) or tablero.digonalSecIgual(ficha)

# -------------------------------------------------------------------------


class Coordenada:
    def __init__(self, fila=0, columna=0):
        self.fila = fila
        self.columna = columna
# -------------------------------------------------------------------------


class Tateti:
    def __init__(self, jug1, jug2):
        self.jug1 = jug1
        self.jug2 = jug2
        self.tablero = Tablero()

    def jugarTateti(self):
        if R.randint(0, 1) == 0:
            jugAux = self.jug1
        else:
            jugAux = self.jug2
        ganar = False
        print(str(self.tablero))
        while not ganar and self.tablero.existe(NADA):
            print("JUEGA: " + str(jugAux))
            coor = jugAux.jugar(self.tablero)
            self.tablero.poner(coor.fila, coor.columna, jugAux.ficha)
            print(str(self.tablero))
            if self.esTateti(jugAux.ficha):
                ganar = True
            else:
                jugAux = self.elOtro(jugAux)
        if ganar:
            print("Ganador: " + str(jugAux))
        else:
            print("Empate!!!!!!!")

    def elOtro(self, humano):
        if humano == self.jug2:
            return self.jug1
        return self.jug2

    def esTateti(self, ficha):
        for fila in range(self.tablero.cf):
            if self.tablero.filaIgual(fila, ficha):
                return True
        for columna in range(self.tablero.cc):
            if self.tablero.columnaIgual(columna, ficha):
                return True
        return self.tablero.digonalIgual(ficha) or self.tablero.digonalSecIgual(ficha)
# -------------------------------------------------------------------------


def main():
    laMu = La_Muerte("Sr Morte",CIRC)
    jugHumano = Humano("Juan", CIRC)
    jugCompu1 = CompuPiola("CompuPiola", CRUZ)
    jugCompu2 = CompuPiola("CompuDos", CRUZ)

    juego = Tateti(laMu, jugCompu2)

    juego.jugarTateti()


# -------------------------------------------------------------------------
main()

Resultado


JUEGA: Sr Morte ==> [O]
[X][O][X]
[X][O][ ]
[O][X][O]

JUEGA: CompuDos ==> [X]
[X][O][X]
[X][O][X]
[O][X][O]

Empate!!!!!!!

Ejemplo de Herencia

"""
Ejercicio para msotrar HERENCIA

"""

class Humano(object):
    EDAD_MAXIMA = 110

    def __init__(self,edad=0,sexo=' '):
        self.edad = edad
        self.sexo = sexo

    def __str__(self):
        return "Edad: " + str(self.edad) + " Sexo: " + str(self.sexo)

class Persona(Humano):

    def __init__(self,edad,sexo,nombre,documento):
        Humano.__init__(self,edad,sexo)
        self.nombre = nombre
        self.documento = documento

    def __str__(self):
        return Humano.__str__(self) + " Nombre: " + self.nombre + " Dni: " + str(self.documento)



def main():
    h = Humano(14,'F')
    print(str(h))

    p = Persona(22,'M',"juan",12345678)
    print(str(p))

main()

Resultado

>>> %Run herencia.py
Edad: 14 Sexo: F
Edad: 22 Sexo: M Nombre: juan Dni: 12345678

Ejercicio Practica Clases

Recurso Clases, objetos

"""
practica de clases, objetos, atributos y metodos
"""
class Personaje(): # CLASE que representa al personaje principal
    def __init__(self): # METODO que establece los Atributos del Objeto
        self.nombre = "Alberto"
        self.sexo = "M"
        self.puntos_impacto_max = 80
        self.puntos_impacto_actuales = 50
        self.vel_max = 20
        self.escudo = 21
    
    def __str__(self):
        
        return "Nombre: " + str (self.nombre) + "\nSexo: " + str (self.sexo) \
         + "\nPuntos de Impacto: " + str (self.puntos_impacto_max) \
         + "\nPuntos Impacto Actuales: " + str (self.puntos_impacto_actuales) \
         + "\nVelocidad Maxima: " + str (self.vel_max) + "\nEscudo: " + str (self.escudo)
    

p = Personaje()
print ("Personaje Principal: \n") 
print (str(p))

#/////////////////////////////////////////////////
"""
Ejemplo dos
"""
class Direccion(): # tiene todos los campos para una direccion
    def __init__(self):
        self.nombre = ""
        self.calle1 = ""
        self.calle2 = ""
        self.ciudad = ""
        self.localidad = ""
        self.cp = ""
        
# La CLASE esta DEFINIDA pero NO creada, para CREARLA debemos definir una instancia de la Clase Direccion

casa_direccion = Direccion() # creamos una direccion

# definimos los campos de la Direccion

casa_direccion.nombre = "Alberto"
casa_direccion.calle1 = "Jonte"
casa_direccion2 = "San Nicolas"
casa_direccion.ciudad = "CABA"
casa_direccion.localidad = "Monte Castro"
casa_direccion.cp = "1407GOS"


print ("\nLa direccion de " + casa_direccion.nombre + " es: " + casa_direccion.calle1)

Resultado

Personaje Principal: 

Nombre: Alberto
Sexo: M
Puntos de Impacto: 80
Puntos Impacto Actuales: 50
Velocidad Maxima: 20
Escudo: 21

La direccion de Alberto es: Jonte

Leave a Reply

Your email address will not be published. Required fields are marked *