Versión Completa : Ayuda: Bug en Triqui escrito en Python
Clown
febrero 3, 2006, 08:25
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!
kemark
febrero 4, 2006, 10:07
.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:
#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
febrero 8, 2006, 06:51
Bueno, el error lo corregí de esta manera:
en la parte:
#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:
#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
vBulletin®, Copyright ©2000-2008, Jelsoft Enterprises Ltd.