python - 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)
解决方案
您应该使用==
而不是测试单元格!=
。此外,您应该更改您测试的同一单元格,而不是它下面的单元格:
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)
推荐阅读
- java - 在 Selenium Java 客户端中 addArguments 和 setPreference 方法有什么区别?
- powerbi - 有异常的索引列 - POWER BI / DAX / M
- python - 计算 Python 列表中重复的元素总数
- android - Android WebView:等待显示更新,直到页面渲染完成
- c# - 如何在winforms图表中拥有相同大小的列?
- flutter - Flutter Navigator 2.0 通过 Navigator() 路由
- plot - 用 plot_implicit 绘制两个隐式函数
- python - 如何在熊猫 groupby 之后跨列求和?
- php - 如何从录制状态回调中获取 From 和 To 号码
- amazon-web-services - 使用 S3 全球域名的 CloudFront 来源是否比区域域名表现更好?