从表格生成字符网格时输出倒置,求Python代码修复方案
问题
我需要将包含网格坐标与字符的表格转换为字符网格,目标是呈现大写字母F,但运行代码后输出的网格是倒置的。以下是我的实现代码:
import requests from bs4 import BeautifulSoup webpage_response = requests.get('https://docs.google.com/document/d/e/2PACX-1vRMx5YQlZNa3ra8dYYxmv-QIQ3YJe8tbI3kqcuC7lQiZm-CSEznKfN_HYNSpoXcZIV3Y_O3YoUB1ecq/pub') webpage = webpage_response.content soup = BeautifulSoup(webpage, 'html.parser') table = soup.find('table') rows = table.find_all('tr') data = [] for row in rows[1:]: cells = row.find_all('td') character = cells[1].text.strip() x = cells[0].text.strip() y = cells[2].text.strip() data.append((character,x,y)) max_x = max(x for _,x,_ in data) max_y = max(y for _, _,y in data) grid = [[' ' for _ in range(int(max_x) + 1)] for _ in range(int(max_y) + 1)] for character, x, y in data: grid[int(y)][int(x)] = character for row in grid: print(''.join(row))
解决方法
问题根源是坐标系方向不匹配:
- 表格中的y坐标是从上到下递增的(比如字母F的顶部对应较小的y值,底部对应较大的y值)
- 而Python列表的遍历打印是从第一个元素开始,也就是网格列表的第0行会显示在输出的最上方,相当于y轴方向与表格相反
有两种简单的修复方式:
方式一:填充网格时反转y坐标
修改填充网格的逻辑,用最大y值减去当前y值,实现坐标系对齐:
# 替换原填充代码 for character, x, y in data: grid[int(max_y) - int(y)][int(x)] = character
方式二:打印时反转网格列表
保持填充逻辑不变,打印时将网格列表反转:
# 替换原打印代码 for row in reversed(grid): print(''.join(row))
两种方法都能让输出的字母F恢复正确方向,核心是让表格的y轴顶部对应输出的视觉顶部。
内容的提问来源于stack exchange,提问作者Salem Maley
相关产品推荐
相关产品推荐

