使用reversed(range)返回range_iterator对象,如何反向枚举游戏板行号?
解决Connect "M"游戏行号反向枚举问题
问题原因
- 直接打印迭代器对象:
reversed()返回的是迭代器实例,直接print(backwards)会输出迭代器的内存地址,而非实际行号。 - 循环逻辑错误:
reversed(range(r))仅对0到r-1的小范围反转,无法生成从最大行号到0的完整序列。
修改后的代码
假设你需要1-based行号(7到1,对应BOARD_ROWS=7),修改后的代码如下:
def print_board(self): # 打印列号 print(end=' ') for c in range(BOARD_COLS): print(f"{c} ", end="") print("") # 从最后一行(最大索引)开始遍历行 for r in reversed(range(BOARD_ROWS)): # 打印1-based反向行号(7→1) print(f"{r+1} ", end="") # 打印该行的所有格子 for c in range(BOARD_COLS): print(f" {self.board[r][c]}", end="") print("")
如果需要0-based行号(6→0,对应BOARD_ROWS=7的索引范围),只需把打印行号的代码替换为:
print(f"{r} ", end="")
关键说明
reversed(range(BOARD_ROWS))会生成从BOARD_ROWS-1到0的迭代器,完美实现从最后一行到第一行的遍历。- 通过
r+1直接转换为1-based行号,避免多余的迭代器操作,代码更简洁高效。
内容的提问来源于stack exchange,提问作者thenorthape
相关产品推荐
相关产品推荐

