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
"""
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