如何简化Python中网格渲染字典的批量打印逻辑?
优化网格打印的冗余代码
问题描述
当前通过手动编写多条print语句逐个指定gridRender字典的坐标键来打印网格,代码冗余度极高,扩大网格规模时工作量剧增。原始代码如下:
grid = {} coord = {} gridRender = {} yCoord = -10 for xGrid in range(-5, 6): for yGrid in range(-5, 6): gridRender[xGrid, yGrid] = "░░" gridRender[0, yGrid] = "▒▒" gridRender[xGrid, 0] = "▒▒" for xCoord in range(-5, 6): try: yCoord = round(sin(xCoord)) except: yCoord = -10 gridRender[xCoord, yCoord] = "██" print(gridRender[-5, 5] + gridRender[-4, 5] + gridRender[-3, 5] + gridRender[-2, 5] + gridRender[-1, 5] + gridRender[0, 5] + gridRender[1, 5] + gridRender[2, 5] + gridRender[3, 5] + gridRender[4, 5] + gridRender[5, 5]) print(gridRender[-5, 4] + gridRender[-4, 4] + gridRender[-3, 4] + gridRender[-2, 4] + gridRender[-1, 4] + gridRender[0, 4] + gridRender[1, 4] + gridRender[2, 4] + gridRender[3, 4] + gridRender[4, 4] + gridRender[5, 4]) print(gridRender[-5, 3] + gridRender[-4, 3] + gridRender[-3, 3] + gridRender[-2, 3] + gridRender[-1, 3] + gridRender[0, 3] + gridRender[1, 3] + gridRender[2, 3] + gridRender[3, 3] + gridRender[4, 3] + gridRender[5, 3]) print(gridRender[-5, 2] + gridRender[-4, 2] + gridRender[-3, 2] + gridRender[-2, 2] + gridRender[-1, 2] + gridRender[0, 2] + gridRender[1, 2] + gridRender[2, 2] + gridRender[3, 2] + gridRender[4, 2] + gridRender[5, 2]) print(gridRender[-5, 1] + gridRender[-4, 1] + gridRender[-3, 1] + gridRender[-2, 1] + gridRender[-1, 1] + gridRender[0, 1] + gridRender[1, 1] + gridRender[2, 1] + gridRender[3, 1] + gridRender[4, 1] + gridRender[5, 1]) print(gridRender[-5, 0] + gridRender[-4, 0] + gridRender[-3, 0] + gridRender[-2, 0] + gridRender[-1, 0] + gridRender[0, 0] + gridRender[1, 0] + gridRender[2, 0] + gridRender[3, 0] + gridRender[4, 0] + gridRender[5, 0]) print(gridRender[-5, -1] + gridRender[-4, -1] + gridRender[-3, -1] + gridRender[-2, -1] + gridRender[-1, -1] + gridRender[0, -1] + gridRender[1, -1] + gridRender[2, -1] + gridRender[3, -1] + gridRender[4, -1] + gridRender[5, -1]) print(gridRender[-5, -2] + gridRender[-4, -2] + gridRender[-3, -2] + gridRender[-2, -2] + gridRender[-1, -2] + gridRender[0, -2] + gridRender[1, -2] + gridRender[2, -2] + gridRender[3, -2] + gridRender[4, -2] + gridRender[5, -2]) print(gridRender[-5, -3] + gridRender[-4, -3] + gridRender[-3, -3] + gridRender[-2, -3] + gridRender[-1, -3] + gridRender[0, -3] + gridRender[1, -3] + gridRender[2, -3] + gridRender[3, -3] + gridRender[4, -3] + gridRender[5, -3]) print(gridRender[-5, -4] + gridRender[-4, -4] + gridRender[-3, -4] + gridRender[-2, -4] + gridRender[-1, -4] + gridRender[0, -4] + gridRender[1, -4] + gridRender[2, -4] + gridRender[3, -4] + gridRender[4, -4] + gridRender[5, -4]) print(gridRender[-5, -5] + gridRender[-4, -5] + gridRender[-3, -5] + gridRender[-2, -5] + gridRender[-1, -5] + gridRender[0, -5] + gridRender[1, -5] + gridRender[2, -5] + gridRender[3, -5] + gridRender[4, -5] + gridRender[5, -5])
优化方案
可以通过循环遍历坐标范围替代手动编写的print语句,同时抽离网格边界参数,方便后续调整规模。优化后的代码如下:
import math # 抽离网格边界参数,调整大小只需修改这两个值 min_coord = -5 max_coord = 5 gridRender = {} # 初始化网格 for xGrid in range(min_coord, max_coord + 1): for yGrid in range(min_coord, max_coord + 1): gridRender[xGrid, yGrid] = "░░" gridRender[0, yGrid] = "▒▒" gridRender[xGrid, 0] = "▒▒" # 绘制正弦曲线点 for xCoord in range(min_coord, max_coord + 1): try: yCoord = round(math.sin(xCoord)) # 确保坐标在网格范围内,避免键不存在错误 if min_coord <= yCoord <= max_coord: gridRender[xCoord, yCoord] = "██" except: pass # 循环打印每一行(y从大到小遍历,保证网格从上到下显示正确) for y in range(max_coord, min_coord - 1, -1): row = "".join([gridRender[x, y] for x in range(min_coord, max_coord + 1)]) print(row)
优化点说明
- 参数化边界:将
min_coord和max_coord设为变量,调整网格大小无需改动核心逻辑代码。 - 循环生成打印内容:外层循环遍历y坐标,内层用列表推导式拼接整行字符,一行代码完成整行打印,彻底消除冗余。
- 越界判断:添加
yCoord范围检查,避免因计算出的坐标超出网格导致的字典键不存在错误。 - 简化代码:删除未使用的
grid和coord变量,精简代码结构。
内容的提问来源于stack exchange,提问作者Crossbow4000
相关产品推荐
相关产品推荐

