You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python井字棋项目中for (i, spot)搭配enumerate的语法疑问

代码功能总览

这段代码是井字棋项目里用来获取当前所有合法落子位置的方法,最终会返回一个装满可用位置编号的列表。

语法部分讲解

1. enumerate() 内置函数

enumerate() 是Python自带的工具,专门用来遍历列表、元组这类可迭代对象,特点是遍历的时候可以同时拿到「元素的位置索引」和「元素本身的值」。
你代码里的self.board就是存储棋盘状态的列表,通常是长度为9的列表(对应3×3井字棋的9个格子),每个元素的值是' '(空)、'X'或者'O'。

2. for (i, spot) 元组解包

enumerate() 每次迭代都会返回一个格式为(索引, 元素值)的元组,这里的(i, spot)就是把这个元组直接拆成两个变量:

  • i 接收当前格子的位置编号(比如0对应第一行第一格,8对应第三行第三格)
  • spot 接收当前格子的状态(是空、是X还是O)
    这里的括号可以省略,直接写for i, spot in enumerate(self.board)效果完全一样,加括号只是更直观体现是元组解包。

逻辑部分拆解

整段方法的执行逻辑非常清晰:

  • 首先初始化一个空列表moves,用来存所有可以落子的位置编号
  • 遍历棋盘的每一个格子:
    • 如果当前格子的状态是' '(也就是还没人落子),就把这个格子的编号i加到moves列表里
  • 遍历完成后,把存了所有合法落子位的moves列表返回

举个实际例子方便理解:如果当前棋盘状态是:
self.board = ['X', ' ', 'O', ' ', 'X', ' ', ' ', ' ', 'O']
调用这个方法后返回的moves就是[1, 3, 5, 6, 7],对应棋盘上所有还空着的位置编号。

内容的提问来源于stack exchange,提问作者black fire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:36:04