Board类to_strings方法修复及from_strings参数问题排查
修正Python Board类的四个核心问题
针对你遇到的Board类实现问题,以下是逐一修复方案及完整代码:
问题1:to_strings方法输出扁平化字符列表
修复方案:将网格中每一行的字符列表拼接为单个字符串,返回字符串列表而非扁平化字符。
问题2:无效输入断言错误格式不正确
修复方案:遍历输入行时记录行号,断言失败时抛出指定格式的错误信息,确保行号准确对应。
问题3:from_strings参数未正确初始化grid
修复方案:在构造器中先初始化默认网格,若传入from_strings则验证输入合法性后,将每行字符串转为字符列表替换默认网格。
问题4:确保to_strings与from_strings格式一致
修复方案:to_strings返回的字符串列表结构与from_strings输入完全匹配——每行对应一个字符串,长度与网格尺寸一致。
完整修正代码
# 定义合法字符集合(可根据实际需求调整) VALID_CHARS = {'X', 'O', ' '} class Board: def __init__(self, size=3, from_strings=None): self.size = size # 初始化默认空网格 self.grid = [[' ' for _ in range(size)] for _ in range(size)] # 处理from_strings初始化参数 if from_strings is not None: # 验证输入行数是否匹配网格尺寸 assert len(from_strings) == size, f"expected {size} rows, got {len(from_strings)}" # 逐行验证并初始化网格 for row_idx, row_str in enumerate(from_strings): # 验证行长度是否匹配网格尺寸 assert len(row_str) == size, f"row {row_idx} has length {len(row_str)}, expected {size}" # 验证每个字符是否合法 for char in row_str: assert char in VALID_CHARS, f"invalid character in row {row_idx}" # 将字符串转为字符列表存入网格 self.grid[row_idx] = list(row_str) def to_strings(self): # 将每行字符列表拼接为字符串,返回格式匹配的字符串列表 return [''.join(row) for row in self.grid]
测试验证
# 测试双向格式一致性 input_rows = ["X O", " O ", "XXO"] board = Board(size=3, from_strings=input_rows) output_rows = board.to_strings() print(output_rows) # 输出: ['X O', ' O ', 'XXO'],与输入完全一致 # 测试无效输入报错 try: invalid_input = ["X O", "OXX", "X Z"] Board(from_strings=invalid_input) except AssertionError as err: print(err) # 输出: invalid character in row 2
内容的提问来源于stack exchange,提问作者Anne_Music
相关产品推荐
相关产品推荐

