es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo hacer una declaración “if” con múltiples índices de una lista iguales a un objeto en la lista?

En Python, mi código actual funciona hasta cierto punto. Tengo otra función llamada check_X_win_status() que hace lo mismo que la de abajo, excepto que verifica si es 1 en lugar de -1. ¿Alguien tiene alguna idea de cómo hacer esto más compacto? Además, a veces obtengo un error en el que el código imprime “ganador” incluso si el estado del juego es -1, 1, -1, 0, 0, 0, 0, 0, 0

game_status = [-1, -1, -1, 0, 0, 0, 0, 0, 0]
def check_O_win_status():
    if game_status[0] and game_status[1] and game_status[2] == -1:
        print("¡Gana O!")
    if game_status[3] and game_status[4] and game_status[5] == -1:
        print("¡Gana O!")
    if game_status[6] and game_status[7] and game_status[8] == -1:
        print("¡Gana O!")
    if game_status[0] and game_status[3] and game_status[6] == -1:
        print("¡Gana O!")
    if game_status[1] and game_status[4] and game_status[7] == -1:
        print("¡Gana O!")
    if game_status[2] and game_status[5] and game_status[8] == -1:
        print("¡Gana O!")
    if game_status[0] and game_status[4] and game_status[8] == -1:
        print("¡Gana O!")
    if game_status[2] and game_status[4] and game_status[6] == -1:
        print("¡Gana O!")
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para hacer el código más compacto, podrías crear una función que tome el símbolo (-1 o 1) y el mensaje a imprimir si el símbolo gana. Esta función luego verificaría cada combinación ganadora posible y si todos los símbolos en la combinación coinciden con el símbolo dado, imprimiría el mensaje.
    Por ejemplo,

    estado_juego = [-1,-1,-1,0,0,0,0,0,0]
    
    def verificar_estado_ganador(simbolo, mensaje):
        if (estado_juego[0] == simbolo and estado_juego[1] == simbolo and estado_juego[2] == simbolo) or \
           (estado_juego[3] == simbolo and estado_juego[4] == simbolo and estado_juego[5] == simbolo) or \
           (estado_juego[6] == simbolo and estado_juego[7] == simbolo and estado_juego[8] == simbolo) or \
           (estado_juego[0] == simbolo and estado_juego[3] == simbolo and estado_juego[6] == simbolo) or \
           (estado_juego[1] == simbolo and estado_juego[4] == simbolo and estado_juego[7] == simbolo) or \
           (estado_juego[2] == simbolo and estado_juego[5] == simbolo and estado_juego[8] == simbolo) or \
           (estado_juego[0] == simbolo and estado_juego[4] == simbolo and estado_juego[8] == simbolo) or \
           (estado_juego[2] == simbolo and estado_juego[4] == simbolo and estado_juego[6] == simbolo):
            print(mensaje)
    
    verificar_estado_ganador(-1, "¡O gana!")
    verificar_estado_ganador(1, "¡X gana!")
    

    Este código verifica tanto -1 (para O) como 1 (para X) y muestra el mensaje apropiado si alguno gana. Si todavía te encuentras con el error en el que el código imprime “ganar” incluso si el estado_juego incluye una combinación de símbolos, podrías agregar una verificación adicional antes de llamar a la función verificar_estado_ganador. Por ejemplo, podrías agregar:

    if all(s == -1 or s == 0 for s in estado_juego):
        verificar_estado_ganador(-1, "¡O gana!")
    elif all(s == 1 or s == 0 for s in estado_juego):
        verificar_estado_ganador(1, "¡X gana!")
    

    Esto asegura que el código solo verifique una victoria si todos los símbolos en estado_juego son either -1 o 0 para O, o 1 o 0 para X.

Comments are closed.