Python井字棋:二维列表位置检测函数返回结果异常问题求助
问题排查:井字棋位置可用性检测函数异常原因分析
我来帮你搞定这个问题!你的available函数逻辑有个致命的小错误——它在第一次循环判断不匹配时就直接返回了False,根本没机会遍历完整个棋盘的所有位置。
错误原因拆解
看你写的问题代码:
board = [['7', '8', '9'], ['4', '5', '6'], ['1', '2', '3']] location = input(" Turn, select a number (1, 9): ") def available(location, board): for row in board: for col in row: if col==location: return True else: return False # 这里是核心问题! print(available(location,board))
函数进入嵌套循环后,第一个检查的元素是board[0][0]也就是'7':
- 如果输入的location是
'7',会正常返回True; - 但如果是其他值(比如
'8'),第一次判断col != location时,就直接执行return False跳出了函数,后面的'8'、'9'、'4'这些元素根本不会被检查到!
而你的对比代码是遍历每个元素逐个打印结果,不会中途退出,所以能正常运行,但这和函数的逻辑完全不同——函数需要找到任意一个匹配项就返回True,只有所有元素都不匹配才返回False。
修正后的代码
把return False移到嵌套循环的外面,确保遍历完所有元素后再返回结果:
board = [['7', '8', '9'], ['4', '5', '6'], ['1', '2', '3']] location = input(" Turn, select a number (1, 9): ") def available(location, board): for row in board: for col in row: if col == location: return True # 找到匹配项,立即返回True # 遍历完整个棋盘都没找到匹配,才返回False return False print(available(location, board))
这样修改后,函数会完整遍历整个二维列表,只要存在和输入location匹配的位置,就会返回True;只有所有位置都不匹配时,才会返回False,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Aldaron47
相关产品推荐
相关产品推荐

