Buenos días

Este ciclo while se detiene tan pronto como una de las variables row1check se convierte en True? Quiero que el bucle continúe hasta que las 3 variables sean Verdaderas. ¿Estoy usando el bucle correctamente?

def x_turn ():
global row1check
global row2check
global row3check
while (row1check == False) and (row2check == False) and (row3check == False):
    move = raw_input("Player X Enter coordinates 'row,col': ")

    row = move[0]
    column = move[2]

    if row == "1" and column == "1" and row1[0] == " ":
        row1[0] = "x"
        draw_matrix()
        check_game()
        end_game()
        o_turn()
    if row == "1" and column == "2" and row1[1] == " ":
        row1[1] = "x"
        draw_matrix()
        check_game()
        end_game()
        o_turn()
    if row == "1" and column == "3" and row1[2] == " ":
        row1[2] = "x"
        draw_matrix()
        check_game()
        end_game()
        o_turn()
    if row == "2" and column == "1" and row2[0] == " ":
        row2[0] = "x"
        draw_matrix()
        check_game()
        end_game()
        o_turn()
    if row == "2" and column == "2" and row2[1] == " ":
        row2[1] = "x"
        draw_matrix()
        check_game()
        end_game()
        o_turn()
    if row == "2" and column == "3" and row2[2] == " ":
        row2[2] = "x"
        draw_matrix()
        check_game()
        end_game()
        o_turn()
0
Thomas 8 may. 2016 a las 16:00

4 respuestas

La mejor respuesta

Cambie a or en lugar de and:

while (row1check == False) or (row2check == False) or (row3check == False):

De esta manera, solo cuando las 3 condiciones sean True, dejará de repetir.

P.S también puedes usar all:

>>> data = [False, False, False]
>>> not all(data)
True
0
Idos 8 may. 2016 a las 13:09

También puede usar el operador and de esta manera:

row1check = False
row2check = False
row3check = False

def x_turn():
    global row1check
    global row2check
    global row3check
    while not (row1check and row2check and row3check):
        print('Looping...')
        row1check = True
        row2check = True
        row3check = True

if __name__ == '__main__':
    x_turn()

Este ciclo while se detiene cuando row1check, row2check, row3check son verdaderas.

0
bwangel 8 may. 2016 a las 13:23

Puede utilizar la función all para esto:

while not all([row1check, row2check, row3check]):

Que se detendrá solo cuando todos sean Verdaderos.

1
dnit13 8 may. 2016 a las 13:09

Su sintaxis del bucle while es correcta. Pero en función de sus requisitos, debe usar:

while (row1check == False) or (row2check == False) or (row3check == False):

Usar or aquí significa que debe continuar ejecutando el código siempre que cualquiera de estas condiciones sea verdadera. Es decir, mientras cualquiera de row1check, row2check o row3check es falso.

0
K Mehta 8 may. 2016 a las 13:06