Ваше условие неверно, вы в основном хотите быть в цикле while, пока пользователь не введет либо X, либо O. Таким образом, это означает:
not (player1 == "X" or player1 =="O")
Это может немного смущать, особенно если выне знаком с булевой алгеброй.В основном у вас есть следующее:
X and Y
, поэтому not (X and Y)
логически эквивалентно not X or not Y
.В вашем случае у вас есть:
not (player1 == "X" or player1 =="O")
, что логически эквивалентно:
player1 != "X" and player1 != "O"
Если вы хотите узнать больше об этом, вы можете прочитать о законах Де Моргана