Ayuda: Bug en Triqui escrito en Python

Clown

Lanero Reconocido
Se unió
21 Oct 2003
Mensajes
516
Buenas. Hice un Triqui, Tres en Raya, TicTacToe o como quieran llamarlo. Tengo un problema: hay un bug que no sé de dónde salió... Si se ocupan las tres primeras casillas de la primera fila, el programa se bloquea... De resto funciona perfectamente! Bueno, aquí publico el código fuente, sólo hay que cambiarle la extensión de .txt a .py. Iba a subirlo compilado a .exe (con py2exe) pero no se puede porque pesa más del tamaño permitido par adjuntos. Si alguien me puede a descubrir de donde proviene el bug, gracias!
 

Archivos adjuntos

  • Triqui.txt
    6 KB · Visitas: 846

kemark

Lanero Reconocido
Se unió
9 Abr 2003
Mensajes
2,500
.exe? para que? no los puedo ejecutar en mi linux.

en cualquier lenguaje si la funcion retorna algo, debes asegurarte de que realmente retorne algo y no someter eso a condiciones...

tu error esta en la funcion alguienGano(), debes quitar ese elif: del final y solo dejar el return false, asi:

Código:
	#Si llega hasta aqui es porque nadie ha ganado, revisar si hay empate
	elif (triqui[0]!=".") and (triqui[1]!=".") and (triqui[2]!="."):
		if (triqui[3]!=".") and (triqui[4]!=".") and (triqui[5]!="."):
			if (triqui[6]!=".") and (triqui[7]!=".") and (triqui[8]!="."):
				return empate
	return False

todos esos if que tienes en el chequeo de empate no tienen else y por tanto no retornan en caso de no cumplirse
 

Clown

Lanero Reconocido
Se unió
21 Oct 2003
Mensajes
516
Bueno, el error lo corregí de esta manera:

en la parte:
Código:
#Si llega hasta aqui es porque nadie ha ganado, revisar si hay empate
	elif (triqui[0]!=".") and (triqui[1]!=".") and (triqui[2]!="."):
		if (triqui[3]!=".") and (triqui[4]!=".") and (triqui[5]!="."):
			if (triqui[6]!=".") and (triqui[7]!=".") and (triqui[8]!="."):
				return empate
	else:                
		return False

Se iba a un loop infinito si las tres primeras casillas estaban llenas pero las siguientes no.

Lo corregí de esta manera:

Código:
#Si llega hasta aqui es porque nadie ha ganado, revisar si hay empate
	elif "." not in triqui:
		return empate
	else:                
		return False

Ahora quiero hacer un Ahorcadito! jajajaja
 

lz22

Lanero Activo
Se unió
13 Nov 2013
Mensajes
1
Hola: me gustó mucho el código que utilizaste para hacer el triqui, pero no entiendo cual es la función de este bloque en el programa. Alguien podría ayudarme con eso?
def muestraTablero(tablero):
""" Muestra el tablero"""
print "%s %s %s\n%s %s %s\n%s %s %s" % tuple(tablero)
 

BY castel

Lanero Reconocido
Se unió
29 Jul 2005
Mensajes
7,342
Usted también hizo triqui reviviendo un tema tan viejo 7 Años

Enviado desde mi GT-N7100 usando Tapatalk 2
 
Arriba