如何用Colorama实现扫雷棋盘元素值的差异化着色打印?
扫雷脚本Colorama着色与网格显示修复方案
核心问题解决要点
- 正确初始化Colorama并开启自动颜色重置,避免颜色污染后续文本
- 定义数字/标记与颜色的映射表,统一管理着色规则
- 固定每个单元格的显示宽度,彻底解决网格压缩问题
具体实现步骤
1. 初始化Colorama并定义颜色映射
from colorama import init, Fore # 初始化Colorama,自动重置颜色 init(autoreset=True) # 定义颜色映射表,可根据需求调整 COLOR_MAP = { '0': Fore.WHITE, '1': Fore.BLUE, '2': Fore.GREEN, '3': Fore.RED, '4': Fore.MAGENTA, '5': Fore.CYAN, '6': Fore.YELLOW, '7': Fore.BLACK, '8': Fore.GRAY, 'f': Fore.YELLOW # 疑似地雷标记用黄色高亮 }
2. 修复后的print_grid函数
该函数通过固定单元格宽度(3字符)保证网格对齐,同时应用颜色映射:
def print_grid(grid): # 打印列标题(a、b、c...类国际象棋坐标) print(" ", end="") for col_idx in range(len(grid[0])): print(f"{chr(ord('a') + col_idx):^3}", end="") print() # 打印每行内容,带行号(1、2、3...) for row_idx, row in enumerate(grid, start=1): print(f"{row_idx:^3}", end="") for cell in row: cell_str = str(cell) # 获取对应颜色,默认白色 color = COLOR_MAP.get(cell_str, Fore.WHITE) # 固定3字符宽度居中显示,确保网格对齐 print(f"{color}{cell_str:^3}", end="") print()
关键说明
autoreset=True:每次输出带颜色的文本后自动重置颜色,避免后续单元格继承错误颜色- 固定宽度格式化
{cell_str:^3}:强制每个单元格占3个字符宽度,不管是否包含颜色代码,都能保证网格整齐,彻底解决压缩问题 - 类国际象棋坐标生成:通过
chr(ord('a') + col_idx)自动生成列标题,行号从1开始枚举,符合需求
内容的提问来源于stack exchange,提问作者Katharine
相关产品推荐
相关产品推荐

