Saa*_*dat 5 python arrays loops boolean break
我正在尝试编写一个代码来确定井字游戏的获胜者。(这是一个大学作业)
为此,我编写了以下函数:
这段代码只检查水平线,我没有添加其余的。我觉得这是需要一些硬编码的东西。
def iswinner(board, decorator):
win = True
for row in range(len(board)):
for col in range(len(board)):
if board[row][col] == decorator:
win = True
else:
win = False
break
Run Code Online (Sandbox Code Playgroud)
其中“board”是大小为 n^2 的二维数组,“decorator”是“X”或“O”值
我希望完成的是该函数循环遍历二维数组的行。然后循环遍历每一行中的值。如果该元素与“装饰器”匹配,则它继续并检查下一个,但如果不匹配,则它从第一个循环中断并转到下一行。它会这样做,直到在同一行中找到 n 个元素。然后它会给出一个布尔值 True 否则为 False。
代码似乎没有这样做,即使我检查了以下“板”,它也给了我“真”的输出
Run Code Online (Sandbox Code Playgroud)check_list = [['O', 'X', 'X'], ['O', 'X', 'O'], ['O', 'X', 'X']]
非常感谢!
最好的,赛义德
您可以只制作一组每一行,并检查其长度。如果它只包含一个元素,那么游戏就赢了。
def returnWinner(board):
for row in board:
if len(set(row)) == 1:
return row[0]
return -1
Run Code Online (Sandbox Code Playgroud)
如果有一整行“O”,则返回“O”,如果有一行“X”,则返回“X”,否则返回 -1。
下面是一个完整的井字棋检查器的代码,应该不难理解,但不要犹豫,问:
import numpy as np
def checkRows(board):
for row in board:
if len(set(row)) == 1:
return row[0]
return 0
def checkDiagonals(board):
if len(set([board[i][i] for i in range(len(board))])) == 1:
return board[0][0]
if len(set([board[i][len(board)-i-1] for i in range(len(board))])) == 1:
return board[0][len(board)-1]
return 0
def checkWin(board):
#transposition to check rows, then columns
for newBoard in [board, np.transpose(board)]:
result = checkRows(newBoard)
if result:
return result
return checkDiagonals(board)
a = [['X', 'A', 'X'],
['A', 'X', 'A'],
['A', 'X', 'A']]
print(checkWin(a))
Run Code Online (Sandbox Code Playgroud)
请注意,无论您选择在井字游戏中放置什么符号(“O”和“X”与“bloop”和“!”一样好),并且对于任何大小的网格,只要它是一个正方形。
一种方法是创建一组所有可能的索引组合(生成器函数会更好)来检查获胜情况。然后循环遍历这些索引组合并检查它们是否都包含相同的值,如果是,则获胜。
def win_indexes(n):
# Rows
for r in range(n):
yield [(r, c) for c in range(n)]
# Columns
for c in range(n):
yield [(r, c) for r in range(n)]
# Diagonal top left to bottom right
yield [(i, i) for i in range(n)]
# Diagonal top right to bottom left
yield [(i, n - 1 - i) for i in range(n)
def is_winner(board, decorator):
n = len(board)
for indexes in win_indexes(n):
if all(board[r][c] == decorator for r, c in indexes):
return True
return False
Run Code Online (Sandbox Code Playgroud)