按索引遍历列表:用for循环简化实验中多矩形(含目标矩形)创建代码
没问题,咱们用带索引的循环来重构这段代码,既能简化结构,又能让逻辑更清晰,完全符合你想要节省开发时间和代码空间的需求。
首先,利用Python的enumerate()函数,它能在遍历列表时同时拿到元素索引和对应的坐标值,刚好可以用来区分目标矩形(索引0)和其他普通矩形。直接上重构后的代码:
# 初始化一个列表用来存储所有矩形(方便后续实验操作,可选) all_rectangles = [] # 遍历打乱后的坐标列表,同时获取索引和坐标 for idx, coord in enumerate(xy_list): # 判断当前是否是目标矩形(对应原代码中的xy_list[0]) if idx == 0: # 创建目标矩形,沿用你定义的样式 current_rect = visual.Rect( win=mywin4, width=45, height=90, pos=coord, lineColor='white', fillColor='blue', ori=orientations_list[1] ) else: # 创建普通矩形,这里可以根据你的实验需求调整样式 # 示例:白色边框、无填充,方向可以用默认或对应列表值 current_rect = visual.Rect( win=mywin4, width=45, height=90, pos=coord, lineColor='white', fillColor=None # 如果普通矩形需要不同方向,可改成 ori=orientations_list[idx] ) # 绘制当前矩形 current_rect.draw() # 把矩形存入列表,方便后续交互(比如点击检测、位置更新等) all_rectangles.append(current_rect)
为什么这么写?
- 统一逻辑:把目标矩形和普通矩形的创建、绘制逻辑合并到一个循环里,不用单独写目标矩形的代码块,减少冗余。
- 灵活扩展:如果后续要调整矩形样式(比如修改尺寸、颜色),只需要在循环里修改对应部分即可,不用逐个修改单独的代码。
- 可复用性:存入
all_rectangles列表后,后续实验中可以轻松通过索引访问目标矩形(all_rectangles[0])或其他任意矩形,方便做交互逻辑(比如判断被点击的是哪个矩形)。
如果不需要存储矩形,也可以去掉all_rectangles相关的代码,只保留循环内的创建和绘制部分,代码会更精简。
内容的提问来源于stack exchange,提问作者Minne
相关产品推荐
相关产品推荐

