То ли я дурак, то ли Python не едет

Такая тема. Хочу сделать крестики нолики на Python. Простенькие, в консоле. Пишу код и столкнулся с проблемой. В функции player_move, если игрок хочет занять уже занятое поле, должно срабатывать ветвление и, с помощью, цикла while возвращать его обратно к выбору. Но, оно не работает. Нет, оно работает, но не так, как я задумывал. Оно просто игнорирует то, что поле уже занято, поэтому его можно занять опять. Подскажите, пожалуйста, как это можно исправить. Спасибо

board = ["-", "-", "-",
              "-", "-", "-",
              "-", "-", "-"]

x = "X"
o = "O"


def display_board():
    print(board[0] + "|" + board[1] + "|" + board[2])
    print(board[3] + "|" + board[4] + "|" + board[5])
    print(board[6] + "|" + board[7] + "|" + board[8])


def player_move(c):
    cond = 1
    while cond == 1:
        position = input("Выберите поле: ")
        position = int(position) - 1
        print(board[position])
        if board[position] != "X" or "O":
            board[position] = c
            cond = 0
        elif board[position] == "X" or "O":
            print("Повторите ещё раз")
    display_board()


def play_game():
    display_board()
    player_move(x)
    player_move(o)
    player_move(x)
    player_move(o)


play_game()

Так нельзя, надо

board[position] != "X" and board[position] != "O"

Отладкой надо заниматься в таких случаях :slight_smile:
:arrow_down:

1 лайк

Спасибо за ответ! Всё заработало, но это пока я не начал дописывать код. :smiley: Да, я пользовался отладчиком и тогда вообще в край запутался, ветвление просто игнорировало, что поле занято, как я думал. Мне, действительно, срочно, нужна резиновая уточка)