python - 数字井字游戏获胜条件
问题描述
这是一个数字井字游戏。我尝试将行、列或对角线的获胜条件加起来为 15。但是,' '
不能将其更改为整数。我能做些什么来避免这种情况?
这是主要问题部分:
local_board = [[ '','0','1','2'],
['0',' ',' ',' '],
['1',' ',' ',' '],
['2',' ',' ',' ']]
def isWinner(self):
if int(local_board[1][1]) + int(local_board[1][2]) + int(local_board[1][3]) == 15\
or int(local_board[2][1]) + int(local_board[2][2]) + int(local_board[2][3]) == 15\
or int(local_board[3][1]) + int(local_board[3][2]) + int(local_board[3][3]) == 15\
or int(local_board[1][1]) + int(local_board[2][1]) + int(local_board[3][1]) == 15\
or int(local_board[1][2]) + int(local_board[2][2]) + int(local_board[3][2]) == 15\
or int(local_board[1][3]) + int(local_board[2][3]) + int(local_board[3][3]) == 15\
or int(local_board[1][1]) + int(local_board[2][2]) + int(local_board[3][3]) == 15\
or int(local_board[1][3]) + int(local_board[2][2]) + int(local_board[3][1]) == 15:
print('Player '+ self.player +' wins. Congrats!')
self.continue_game = False
解决方案
创建一个 2D numpy 数组,而不是 2D 列表。可以用 NaN 替换的空格。其他所有内容都作为整数输入。然后你可以使用 numpy.nansum 函数来计算你有兴趣计算的总和。
这是一些示例代码。我没有测试它。
import numpy as np
local_board = [[np.nan,0,1,2],
[0,np.nan,np.nan,np.nan],
[1,np.nan,np.nan,np.nan],
[2,np.nan,np.nan,np.nan]]
local_board = np.array(local_board)
def isWinner(self):
if np.nansum(local_board[1][1] + local_board[1][2] + local_board[1][3]) == 15\
or np.nansum(local_board[2][1] + local_board[2][2] + local_board[2][3]) == 15\
or np.nansum(local_board[3][1] + local_board[3][2] + local_board[3][3]) == 15\
or np.nansum(local_board[1][1] + local_board[2][1] + local_board[3][1]) == 15\
or np.nansum(local_board[1][2] + local_board[2][2] + local_board[3][2]) == 15\
or np.nansum(local_board[1][3] + local_board[2][3] + local_board[3][3]) == 15\
or np.nansum(local_board[1][1] + local_board[2][2] + local_board[3][3]) == 15\
or np.nansum(local_board[1][3] + local_board[2][2] + local_board[3][1]) == 15:
pr'Player '+ self.player +' wins. Congrats!')
self.continue_game = False
推荐阅读
- java - 在分布式计算期间防止死锁
- javascript - 为什么 AngularJS $onChanges 没有注意到数组发生了变化?
- android - 未找到可绘制资源,但它们存在于可绘制文件夹中
- wpf - 如何在 WPF 中编辑完整的 ToggleButton 模板的副本?缺少一些触发器
- angular - Angular 无法连接到 docker compose 中的 Spring Boot 端点
- sql - 删除它为空的记录并连接到另一个表
- javascript - 在 Node.js 中解析 XML 文件
- c++ - 如何在适当时获取模板函数以在插入器上使用 back_inserter
- angular - 如何使用节点包“ng-multiselect-dropdown”加载动态数据
- ajax - 使用 HTTP DELETE 请求 (JavaScript) 配置删除按钮