python - 如何使用循环编写此代码(这是井字游戏代码 - 通过返回角色来确定游戏的获胜者)
问题描述
代码如下,它应该返回一个游戏的符号值,排除“”空格。我正在尝试缩短它,但我是编码新手,所以很难。
你输入的棋盘格式如下:[["X", " ", "O"], ["O", "X", " "], ["O", " ", "X"]]
def winner(board):
term00 = board[0][0]
term01 = board[0][1]
term02 = board[0][2]
term10 = board[1][0]
term11 = board[1][1]
term12 = board[1][2]
term20 = board[2][0]
term21 = board[2][1]
term22 = board[2][2]
if term00 == term01 == term02:
if term00 == " ":
pass
else:
return term00
elif term00 == term10 == term20:
if term00 == " ":
pass
else:
return term00
elif term02 == term12 == term22:
if term02 == " ":
pass
else:
return term02
elif term20 == term21 == term22:
if term20 == " ":
pass
else:
return term20
elif term00 == term11 == term22:
if term00 == " ":
pass
else:
return term00
elif term02 == term11 == term20:
if term00 == " ":
pass
else:
return term00
return None
解决方案
一旦你了解了 Python 的更多功能方面,你就会看到它通常如何导致更简洁的代码。例如:
def winner(board):
for player in ["X", "O"]:
# Rows
res = any(all(col == player for col in row) for row in board)
# Columns
res |= any(all(row == player for row in col) for col in zip(*board))
# Main diagonal
res |= all(row[i] == player for i, row in enumerate(board))
# Secondary diagonal
res |= all(row[~i] == player for i, row in enumerate(board))
if res:
return player
return None
推荐阅读
- mysql - 添加外键约束的规则
- javascript - 如何让jquery动画函数并行运行?
- ios - Swift / iOS:发出 HTTP GET 请求而不跟随重定向
- struct - Solidity:在映射中创建包含映射的结构时出现问题
- javascript - 需要帮助来检索 Javascript 中的谷歌文档信息(我是新手)
- reactjs - 我可以在 React 中使用 MobX 完全摆脱 useCallback 和 useMemo 吗?
- lua - Why the script doesn't work on by line which is I wrote?
- reactjs - 如何在需要 React.Component 的地方使用 StyledComponent?
- php - 如果他们拥有相同的产品,如何将所有用户分组到产品列表中?
- c# - Login session in ASP.NET MVC