如何用for循环判断棋盘所有格子是否已满?代码问题求助
修复2x2棋盘的平局判断函数问题
嘿,我来帮你搞定这个棋盘全满判断的问题!你的checkfortie函数现在有两个关键问题,导致它无法正确判断棋盘是否全满:
原代码的问题分析
- 循环范围错误:你用了
range(w-1)和range(h-1),当w=2、h=2时,这两个循环只会遍历i=0和j=0,也就是只检查了board[0][0]这一个格子,其他三个格子完全没被检查到。 - 逻辑方向反了:原代码只要发现某个格子非0就打印平局,但我们需要的是所有格子都不为0的时候才判定平局,逻辑刚好搞反啦。
正确的实现方式
这里给你两种靠谱的写法,选你觉得顺手的就行:
方法一:逐格遍历检查
这种方式直观,适合新手理解:
w = 2 h = 2 board = [[0] * h for i in range(w)] def printboard(): for row in board: print(" ".join([str(cell) for cell in row])) def checkfortie(): # 遍历棋盘的每一个格子 for i in range(w): for j in range(h): # 只要找到一个空格子(值为0),就说明棋盘没满 if board[i][j] == 0: return False # 所有格子都遍历完了,没找到空的,说明棋盘全满 return True # 使用示例:调用函数并根据结果输出提示 if checkfortie(): print("The board is full") else: print("The board is not full yet")
方法二:用Python内置函数简化代码
如果想让代码更简洁,可以用all()函数嵌套,一行搞定判断:
def checkfortie(): # 检查每一行的所有元素都不为0 return all(all(cell != 0 for cell in row) for row in board)
all()函数会检查可迭代对象里的所有元素是否都为True,这里先检查每一行的每个格子是否非0,再检查所有行是否都满足这个条件,完美实现全满判断。
测试一下
比如当你把棋盘填满:
board = [[1,2],[3,4]] printboard() # 输出: # 1 2 # 3 4 if checkfortie(): print("The board is full") # 这行会被打印出来
如果棋盘还有空格子:
board = [[1,0],[3,4]] if checkfortie(): print("The board is full") else: print("The board is not full yet") # 这行被打印
内容的提问来源于stack exchange,提问作者Dibbs
相关产品推荐
相关产品推荐

