简介:小学二年级数学“认识方向”是空间方位启蒙的关键内容,这份2021-2022年收藏的优质练习资料,围绕东南西北、八个方向、简单路线图等核心知识点,提供了可打印的专项训练。全文为1个doc文档,体积仅1.28MB,便于下载后直接打印或反复使用,目前已有80位学习者下载使用。文档内题型丰富,既有看图填方向、根据太阳和北极星判断方位的基础题,也有按路线描述行走方向、绘制位置示意图的进阶题,还结合生活情境设计了“小猪到小猴家怎么走”“公交车路线查询”等趣味练习,并穿插了地图方向规则、树叶茂密方向等常识性判断。这些内容可帮助二年级学生从不同角度理解方向词的含义,提升实际应用能力,适合家长课后辅导或教师布置分层作业使用,是一份很实用的低年级数学方位练习材料。
1. 这份认识方向练习题 doc 为什么值得当工程资料处理
电脑里躺着一份“优秀资料(2021-2022年收藏)小学二年级数学认识方向练习题.doc”,双击之后,Word 2003 的兼容模式、错位的方向板、宋体二号标题,瞬间把人拉回十年前。这类文件的价值并不在于格式,而在于里面的题目结构:填方向、辨左右、走路线。真正麻烦的是它需要被反复使用:打印、转 PDF、改难度、加答案、对比另一个年级同一主题的资料有没有重复题。与其每次手工另存,不如把这十几个字当成一个文档工程任务来处理。下面这套做法面向需要整理教育类 doc 的工程师、教务老师和动手能力强的家长,目标是让每一份“认识方向练习题”都能变成可维护、可打印、可自动批改的规范文档。
2. 认识方向练习题的题型拆解:方向板、相对方向、路线图
要处理一份 doc,第一步不是打开 Word,而是想清楚这份考卷在考什么。小学二年级的“认识方向”看起来只是背八个词,实际上它考的是两个能力:把纸面上的四个方向固定下来,以及以某个观察者为原点判断其他物体的相对方位。题目一旦变成“面向某个方向,左手边是什么”,就涉及视角旋转,不再只是左右。
2.1 东南西北与上下左右混用是第一层陷阱
教材的标准说法是“上北下南,左西右东”。这里的“上、下、左、右”指的是地图平面,不是学生自己的身体。很多孩子能背出这句话,但遇到“小明面向东站着,他的左手边是什么”就无从下手。题目恰恰喜欢把这两种参照系混在一起。在文档里,这类题通常以填空题出现,题干里会出现“面向”“左边”“右边”等词,答案则是一个方向词。做文档处理时,可以先通过关键词把这些题筛出来,统一生成。
这类题目在 doc 里的排版特征是:题干很短,括号很抢眼,答案区往往没有对齐。旧版 Word 里常用大量空格来对齐括号,转成 PDF 后经常错位。批量清洗时,把连续空格替换成固定宽度的下划线或表格,是更稳的做法。
2.2 相对方向描述等价于一次坐标偏移
从代码角度看,方向题可以建模成二维空间的向量。北、南、西、东分别对应四个方向向量。以“面向北”为例:前方是北,后方是南,左侧是西,右侧是东。观察者转向后,四个方向整体旋转。用顺序表来实现这一旋转,比写四个 if 判断更简洁、不容易漏:
# 方向向量:按地图“上北下南左西右东”定义坐标偏移 DIRS = { "北": (0, 1), "南": (0, -1), "西": (-1, 0), "东": (1, 0), } def turn_right(direction, times=1): """将当前朝向顺时针旋转 times 次,每次 90 度""" order = ["北", "东", "南", "西"] idx = order.index(direction) return order[(idx + times) % 4] print(turn_right("北")) # 东 print(turn_right("北", 2)) # 南 print(turn_right("北", 3)) # 西,也就是面向北时的左面这段代码里,DIRS定义了四个方向的坐标偏移,虽然目前只用了键名,但后面要判断“A 在 B 的哪个方向”时,直接比较坐标即可。turn_right的order列表固定了旋转顺序,times参数允许一次转 90 度、180 度或 270 度。“左边”就是顺时针转三次,也就是逆时针一次。借助这个函数,能派生出“面向北,左面是什么”的答案。
这种建模方式还有一个用处:生成题目时,先随机选一个朝向,再调用turn_right算出标准答案,避免人工录入答案出错。题目看起来在变,但背后的参数只有朝向和旋转次数。
2.3 常见题干模板与答案形态
把历年练习卷里的方向题归类后,基本逃不出下面四种模板。理解这些模板,才能决定生成 doc 时用段落还是表格:
| 题型 | 题干模板 | 答案形态 | 文档组件 |
|---|---|---|---|
| 填方向板 | 在()里填出东、南、西、北 | 方向词 | 3×3 表格 |
| 相对方向 | 小华面向( ),他的左边是( ) | 方向词 | 普通段落 |
| 路线描述 | 从家向()走到学校 | 连续方向词 | 段落+箭头符号 |
| 判断位置 | 商店在学校的()面 | 方向词 | 填空或选择 |
方向板题用表格最好实现,四边四角的位置天然对齐;相对方向题和判断位置题用普通段落就能承载;路线描述题最麻烦,因为旧文档里常画箭头或贴图片,清洗时容易丢。下一章的生成脚本会以这三种常见排版为例。
3. 用 python-docx 生成二年级认识方向练习题的最小实现
题目模型定了,接下来就是生成文档。python-docx 是目前最顺手的 docx 生成库,它支持标题、表格、字体设置,并且能跑在 Windows、Linux 和 macOS 上。唯一的限制是不支持老式 .doc,所以我一般会先生成 .docx,再用 LibreOffice 转成 .doc 或 PDF。这套流程对单份练习卷和批量出题都适用。
3.1 先跑通一个 20 行的出题脚本
from docx import Document from docx.shared import Pt from docx.oxml.ns import qn doc = Document() style = doc.styles["Normal"] style.font.name = "Times New Roman" style.element.rPr.rFonts.set(qn("w:eastAsia"), "宋体") doc.add_heading("认识方向练习题(二年级)", level=1) doc.add_paragraph("姓名:__________ 班级:__________ 日期:__________") questions = [ "1. 早晨太阳升起的方向是( )。", "2. 地图上的方向通常是上( )、下( )、左( )、右( )。", "3. 小华面向北,他的左面是( ),右面是( )。", ] for q in questions: doc.add_paragraph(q) doc.add_page_break() doc.save("认识方向练习题.docx")这份代码虽然短,但已经把一份练习卷的骨架搭出来了:一个标题、一个信息栏、三道填空题、一个分页符。add_heading(level=1)生成的标题会出现在 Word 导航窗格里,方便后面做答案页跳转。w:eastAsia那行针对的是中文环境,英文用 Times New Roman,中文回退到宋体。如果不设置,部分 Linux 上的 LibreOffice 转 PDF 时会把中文渲染成方框。
3.2 把方向组合写进题库模板,控制难度
很多老师想要的不是一份卷子,而是每个孩子拿到的题都不太一样。让题目随机化的基础,就是把题干拆成固定部分和可变部分。上面的模板里,有三个变量直接决定题干内容:
| 变量 | 取值范围 | 作用 |
|---|---|---|
| people | 小明、小红、小刚 | 题干主语,避免每份卷子都一样 |
| places | 学校、书店、公园 | 方向板的中心参照物 |
| facing | 北、东、南、西 | 人的朝向,决定左右答案 |
import random people = ["小明", "小红", "小刚", "小丽", "小军"] def make_question(facing): t = random.choice(people) left = turn_right(facing, 3) right = turn_right(facing, 1) return (f"{t}面向{facing},他的左面是( ),右面是( )。", left, right) questions = [make_question(d) for d in random.choices(["北", "东", "南", "西"], k=5)]这里random.choices(..., k=5)允许同一个方向出现多次,正好用来制造“同一道题换个主语再做一遍”的重复练习。变量全部集中在函数头部,以后要调整难度,比如加入“东北”“西南”,只需改DIRS和make_question里的方向列表。
3.3 在 Word 里插入方向板图形与网格表格
方向板是这份练习题的标志性组件。与其用绘图工具画圆形箭头,不如直接用一个 3×3 表格。生成的结果就是一张带边框的九宫格,中心格写参照物,周围八格填方向。打印后孩子可以直接在格子里写字。
directions = [["西北", "北", "东北"], ["西", "★", "东"], ["西南", "南", "东南"]] table = doc.add_table(rows=3, cols=3) table.style = "Table Grid" for r in range(3): for c in range(3): cell = table.cell(r, c) cell.text = directions[r][c] if directions[r][c] != "★" else "学校"add_table(rows=3, cols=3)生成一个 3×3 的表格,Table Grid样式给格子加边框。中心格的内容可以从directions里排除掉,单独写为题干里指定的观察点。与用文本框绘图相比,表格的优势是各方向自动对齐,孩子们填起来不会歪。如果以后要做高年级版本,把表格扩成 5×5,加入“东北偏北”这类细方向也容易。
3.4 从 doc 到 docx:老资料的转换
标题里的文件是.doc后缀,而 python-docx 生成的是.docx。如果必须拿到旧格式,用 LibreOffice 单文件转换即可:
soffice --headless --convert-to docx --outdir converted "优秀资料(2021-2022年收藏)小学二年级数学认识方向练习题.doc"参数--headless表示后台执行,不会弹窗口;--convert-to docx后面的docx是目标格式,也可以直接写成pdf拿打印版。文件名里有中文和括号,所以命令里要用双引号包住整个路径。转换成功后,用 python-docx 打开新文件,原先的表格和图片大多能保留;个别用文本框画的方向板会错位,需要检查。
4. 面向 doc 资料库的批量整理与查重
现实中不可能只有一份这样的资料。打开一个教学资源文件夹,经常看到“优秀资料(2021-2022年收藏)”“最新整理”“打印版”等名字混在一起。批量整理的前提是先批量转换格式,再从内容层面去重。
4.1 用 LibreOffice 无头模式批量转换
mkdir -p converted for f in *.doc; do soffice --headless --convert-to docx --outdir converted "$f" done循环里用"$f"把文件名包起来,兼容中文和空格。--outdir converted确保所有输出进同一个目录,不污染原文件。批量转换对电脑内存的消耗不大,但如果文件夹里有几百份带复杂图片的 doc,建议分批跑,一次 50 个左右,方便定位是哪一份文件导致soffice卡住。转换失败时,先单独跑一个文件,看终端有没有字体或 OLE 报错。
4.2 从 docx 里提取题干与答案的脚本
docx 本质是 zip 包,正文在word/document.xml。用 python 解压并剥掉 XML 标签,能快速拿到纯文本:
import zipfile, re def docx_text(path): with zipfile.ZipFile(path) as z: xml = z.read("word/document.xml").decode("utf-8") xml = xml.replace("</w:p>", "\n") xml = re.sub(r"<w:tab[^>]*/>", "\t", xml) xml = re.sub(r"<w:br[^>]*/>", "\n", xml) text = re.sub(r"<[^>]+>", "", xml) return text text = docx_text("converted/优秀资料(2021-2022年收藏)小学二年级数学认识方向练习题.docx") print(text[:500])word/document.xml是正文;如果要抽图片,还得看word/media/,这里先不管。先给段落结束标签</w:p>补换行,避免所有段落挤成一大段,再处理 tab 和换行符,最后删掉所有标签。得到的文本里通常能看到“1. 早晨太阳升起的方向是( )。”这样的题干,下一步就能做查重。
4.3 查重时只看题目骨架,不看排版
老资料最大的痛点是同一套题被换个字体、改个编号后再次上传。查重不能看排版,只能看去掉空白和括号后的题干骨架。
| 原始文本 | 归一化骨架 |
|---|---|
| 1. 早晨,太阳从( )升起。 | 早晨太阳从升起 |
| 早晨太阳从( )升起 | 早晨太阳从升起 |
| 2. 地图上北下南左西右东 | 地图上北下南左西右东 |
def skeleton(line): line = line.replace("( )", "").replace("( )", "").replace("()", "") return re.sub(r"[\s,。0-9.、]", "", line) lines = [skeleton(l) for l in text.splitlines() if l.strip()] unique = list(dict.fromkeys(lines))skeleton把括号、标点、数字和空白全部抽掉,只留汉字。dict.fromkeys在保持顺序的同时去重,适合做同一份卷子里的重复题检查。如果做跨文件查重,把每个文件的unique集合存起来,两两比较交集就能找出重复资料。这里要注意,方向题里的“左右”很容易被误判为相同题,所以只对长度在 10 个字以上的句子做骨架归并,效果更稳。
5. 让方向题可以被机器自动校验的几个技巧
到这一层,已经能生成和整理练习卷了。最后提三个我在实际使用中会做的小处理,它们能让方向题从“能打印”变成“能自动判”。
5.1 用方向顺序表核对互斥答案
方向题里有一些天然约束:北的对面是南,东的对面是西;“面向北”时左面一定是西,右面一定是东。检查答案页时,用这个函数比用 if 判断更直观:
order = ["北", "东", "南", "西"] def opposite(direction): return order[(order.index(direction) + 2) % 4] assert opposite("北") == "南" assert opposite("东") == "西"order.index找到当前方向在顺序表里的位置,+2得到 180 度后的方向,取余保证不越界。把生成的标准答案传入这个函数,立即能发现“北的对面还是北”这种低级错误。如果题目扩展到八方向,只要把order改成["北", "东北", "东", "东南", "南", "西南", "西", "西北"],左边就对应+6,右边对应+2。
5.2 打印前用 PDF 固定排版
老 doc 的分页在换电脑后会变。把练习卷转成 PDF 再打印,是最省事的验证方式。执行soffice --headless --convert-to pdf "认识方向练习题.docx"后,看 PDF 里的表格是否跨页、括号是否对齐。如果字体缺失,页面上会出现方块,这时需要回到 python-docx 脚本里,把w:eastAsia字体改成系统里已安装的中文字体,或者改用字体文件名对应的字体名称。
5.3 用文件名约定管理难度和答案页
生成多份卷子后,文件名本身可以变成元数据。我的习惯是“方向练习-基础-12题-无答案.docx”和“方向练习-基础-12题-答案.docx”成对存放。脚本检查到文件名含“答案”时,把标准答案写入页脚,否则留空。这样在资料库里检索时只看文件名就能决定给哪个班用。命名规则固定后,下次从收藏夹拖回一份同名资源,也能在五秒内决定要不要覆盖。
本文还有配套的精品资源,点击获取