Buenas, ahora mismo estoy intentando hacer el 3 en raya o TicTacToe y tengo un problema, cuando alguien introduce mal una fila o columna se le da la oportunidad (o mas bien se le obliga) de introducir de nuevo la fila y columna. Esta oportunidad es una definición. Si los datos introducidos son correctos sale de la definición y pasa a la siguiente que es convertir esos datos en otros para que no salte IndexError(ya que tengo el tablero donde se juega como si fuera una lista). En esta definición de convertir los datos coje los datos introducidos al principio de todo (los que están mal) y no los que salen de la anterior definición donde te obligan a volver a ponerlos, cuando quiero que obviamente coja los que están bien.
Os dejo los códigos:
Código:
# x son los datos de fila y columna
def AnalizarFilaColumna(x): #Hacer que x sea posicion para que las siguientes definiciones cojan esta y no la que está mal
if x[0] not in('1', '2', '3') or x[1] not in('a', 'b', 'c', 'A', 'B', 'C'):
while x[0] not in (1, 2, 3) or x[1] not in('a', 'b', 'c'):
x = input("La fila o columna introducida es inválida, responde de nuevo a la pregunta (fila,columna): ").split(',')
if x[0] in('1', '2', '3') and x[1] in('a', 'b', 'c', 'A', 'B', 'C'):
# x son los nuevos datos introducidos y que son correctos
return x
break
def ConvertirCoordenadas(x):
#x aparece como los datos introducidos al principio de todo (los que están mal)
print(x)
x[0] = int(x[0]) - 1 #Fila para matriz (0,1,2)
x[1] = x[1].lower()
if x[1] == 'a':
x[1] = 0
elif x[1] == 'b':
x[1] = 1
elif x[1] == 'c':
x[1] = 2
De paso aprovecho para preguntar si la función return hace que modifique la variable global. No se si me explico, yo al ejecutar las definiciones lo cambio por posicion
Código:
posicion = input("Dime en que posicion (fila,columna) quieres jugar: ").split(',')
#Y ejecuto así:
AnalizarFilaColumna(posicion)
ConvertirCoordenadas(posicion)
Si falta algún dato que necesiteis saber avisad.