首页 > 解决方案 > Python 不会在第一个之后执行任何 elif 语句

问题描述

我正在编写一个基本的 Connect 4 游戏,将板子内置到命令行等中。我的问题是我无法让代码在第二个 elif 语句之后执行。我对其进行了设置,以便如果网格中的某个单元格没有下划线,它应该继续将该块放在下一行中。但是,以下移动始终只替换第 2 行单元格中的任何部分。我尝试从底部 2 行以外的行开始,只是为了尝试排除故障,但它永远不会超过第一个 elif 语句。谁能告诉我我的elifs哪里出了问题?

board = []

for x in range(0, 6):
    board.append(["_"] * 7)

def print_board(board):
    for i in range(1,7):
        print(i, end=" ")
    print(7)
    for row in board:
        print("|".join(row))

print_board(board)

for turn in range(42):
    print('Turn', turn+1)
    if turn % 2 == 0:
        player1 = int(input('Player 1, choose your column: '))
        while player1 not in range(1,8):
            player1 = int(input('You must enter a column number from 1-7: '))
        if board[5][player1-1] == '_':
            board[5][player1-1] = 'O'
        elif board[5][player1-1] != '_':
            board[4][player1-1] = 'O'
        elif board[4][player1-1] != '_':
            board[3][player1-1] = 'O'
        elif board[3][player1-1] != '_':
            board[2][player1-1] = 'O'
        elif board[2][player1-1] != '_':
            board[1][player1-1] = 'O'
        elif board[1][player1-1] != '_':
            board[0][player1-1] = 'O'
        print_board(board)
    elif turn % 2 != 0:
        player2 = int(input('Player 2, choose your column: '))
        while player2 not in range(1,8):
            player2 = int(input('You must enter a column number from 1-7: '))
        if board[5][player2-1] == '_':
            board[5][player2-1] = 'X'
        elif board[5][player2-1] != '_':
            board[4][player2-1] = 'X'
        elif board[4][player2-1] != '_':
            board[3][player2-1] = 'X'
        elif board[3][player2-1] != '_':
            board[2][player2-1] = 'X'
        elif board[2][player2-1] != '_':
            board[1][player2-1] = 'X'
        elif board[1][player2-1] != '_':
            board[0][player2-1] = 'X'
        print_board(board)

标签: pythonpython-3.x

解决方案


您应该使用==而不是测试单元格!=。此外,您应该更改您测试的同一单元格,而不是它下面的单元格:

board = []

for x in range(0, 6):
    board.append(["_"] * 7)

def print_board(board):
    for i in range(1,7):
        print(i, end=" ")
    print(7)
    for row in board:
        print("|".join(row))

print_board(board)

for turn in range(42):
    print('Turn', turn+1)
    if turn % 2 == 0:
        player1 = int(input('Player 1, choose your column: '))
        while player1 not in range(1,8):
            player1 = int(input('You must enter a column number from 1-7: '))
        if board[5][player1-1] == '_':
            board[5][player1-1] = 'O'
        elif board[4][player1-1] == '_':
            board[4][player1-1] = 'O'
        elif board[3][player1-1] == '_':
            board[3][player1-1] = 'O'
        elif board[2][player1-1] == '_':
            board[2][player1-1] = 'O'
        elif board[1][player1-1] == '_':
            board[1][player1-1] = 'O'
        elif board[0][player1-1] == '_':
            board[0][player1-1] = 'O'
        print_board(board)
    elif turn % 2 != 0:
        player2 = int(input('Player 2, choose your column: '))
        while player2 not in range(1,8):
            player2 = int(input('You must enter a column number from 1-7: '))
        if board[5][player2-1] == '_':
            board[5][player2-1] = 'X'
        elif board[4][player2-1] == '_':
            board[4][player2-1] = 'X'
        elif board[3][player2-1] == '_':
            board[3][player2-1] = 'X'
        elif board[2][player2-1] == '_':
            board[2][player2-1] = 'X'
        elif board[1][player2-1] == '_':
            board[1][player2-1] = 'X'
        elif board[0][player2-1] == '_':
            board[0][player2-1] = 'X'
        print_board(board)

推荐阅读