python IndexError:child index out of range

使用yolo进行数据训练将xml文件转换为yolo所需的归一化txt文件时,出现以下错误:

在这里插入图片描述

xml转换为txt文件代码:

import glob
import xml.etree.ElementTree as ET

#  类名
class_names = ['helmet','person']
#  xml文件路径,train_images只需改为val_images就可以处理val_images的了
path = r''  # xml文件路径
save_path = r''  # 归一化后txt文件保存的路径


#  转换一个xml文件为txt
def single_xml_to_txt(xml_file):
    tree = ET.parse(xml_file)
    root = tree.getroot()
    # 保存的txt文件路径
    tmp = xml_file.split('\\')[-1]
    num = tmp.split('.')[0]
    print("fileName = ", num
### 使用Python Tkinter创建扫雷游戏 #### 创建基本窗口和布局 为了启动扫雷游戏,首先需要导入`Tkinter`模块并设置基础的游戏窗口。 ```python import tkinter as tk from tkinter import messagebox import random class Minesweeper: def __init__(self, master): self.master = master self.frame = tk.Frame(self.master) self.grid_size = 10 # 设置网格大小为10x10 self.mine_count = 10 # 地雷数量设为10 self.create_widgets() def create_widgets(self): for row in range(self.grid_size): for col in range(self.grid_size): button = tk.Button( self.master, width=2, height=1, command=lambda r=row, c=col: self.reveal(r, c), ) button.grid(row=row, column=col) def main(): root = tk.Tk() app = Minesweeper(root) root.mainloop() if __name__ == '__main__': main() ``` 这段代码初始化了一个带有按钮矩阵的窗口[^1]。每个按钮代表游戏中的一格方块,点击这些按钮可以触发相应的动作。 #### 添加地雷逻辑 接下来,在上述基础上增加放置地雷的功能以及计算周围地雷数目的机制: ```python def place_mines(self): mines = set() while len(mines) < self.mine_count: mine_x = random.randint(0, self.grid_size - 1) mine_y = random.randint(0, self.grid_size - 1) mines.add((mine_x, mine_y)) self.board = [[0]*self.grid_size for _ in range(self.grid_size)] for (x,y) in mines: self.board[x][y]=-1 def count_adjacent_mines(self,x,y): adjacent_offsets=[(-1,-1),(0,-1),(1,-1),(-1,0),(1,0),(-1,1),(0,1),(1,1)] count=sum([self.is_mine(x+offset[0], y+offset[1])for offset in adjacent_offsets]) return count if not self.is_mine(x,y)else -1 def is_mine(self,x,y): try:return self.board[x][y]==-1 and x>=0 and y>=0 except IndexError:return False ``` 此部分实现了随机分布的地雷位置,并能够统计任意坐标周围的地雷数目[^2]。 #### 实现揭示功能与胜利条件判断 最后一步是完善当玩家点击某个单元格后的响应行为——即展示该处是否有地雷或是空白区域;同时还需要加入检测是否赢得比赛的逻辑。 ```python revealed_cells=set() def reveal(self,row,col): global revealed_cells cell=self.count_adjacent_mines(row,col) btns=[[child for child in self.master.children.values()][row*self.grid_size+col]] if cell==-1:# Hit a mine messagebox.showinfo('Game Over','You hit a mine!') self.reset_game() elif str(btns[0]['text'])=='': revealed_cells|={(row,col)} btns[0].config(text=str(cell)if cell>0 else '') if len(revealed_cells)==self.grid_size**2-self.mine_count: messagebox.showinfo('Congratulations!', 'You win the game.') self.reset_game() def reset_game(self): self.place_mines() buttons=[widget for widget in self.master.winfo_children()] for b in buttons:b.config(text='') global revealed_cells;revealed_cells.clear() ``` 通过以上步骤,已经完成了一个简易版本的扫雷小游戏开发过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值