You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python if...else语句判断棋盘空位的逻辑表达式异常问题

问题原因

你的代码出现逻辑错误是因为误用了or逻辑运算符,违背了逻辑判断的基本规则:
你要实现的校验逻辑是当位置既不是空格也不是下划线时,判定为非法移动,但你写的(board[x][y] != ' ') or (board[x][y] != '_')条件永远为真:

  • 如果当前位置是空格:满足!= '_'的条件,整个or表达式返回真
  • 如果当前位置是下划线:满足!= ' '的条件,整个or表达式返回真
  • 如果当前位置是其他字符:两个条件都满足,or表达式也返回真
    只有当一个字符同时是空格和下划线时这个表达式才会返回假,不可能存在这种情况,所以所有移动都会被判定为非法。

修正方案

方案1:将or替换为and

while not valid_move:
    # check for unoccupied position
    if (board[x][y] != ' ') and (board[x][y] != '_'):
        valid_move = False
        print('Invalid move detected.')
        print(board[x][y])
        get_user_input()
        getCoordinates(position)
    else:
        print('Valid move...')
        valid_move = True
        # update board with player position
        board[x][y] = player

方案2:先判断合法条件再取反(可读性更高,符合直觉)

while not valid_move:
    # check for unoccupied position
    if not (board[x][y] == ' ' or board[x][y] == '_'):
        valid_move = False
        print('Invalid move detected.')
        print(board[x][y])
        get_user_input()
        getCoordinates(position)
    else:
        print('Valid move...')
        valid_move = True
        # update board with player position
        board[x][y] = player

方案3:用in运算符简化判断(最简洁不易出错)

while not valid_move:
    # check for unoccupied position
    if board[x][y] not in (' ', '_'):
        valid_move = False
        print('Invalid move detected.')
        print(board[x][y])
        get_user_input()
        getCoordinates(position)
    else:
        print('Valid move...')
        valid_move = True
        # update board with player position
        board[x][y] = player

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:39:04