美文网首页
用Python帮小学生复习数学题 [2018-05-07]

用Python帮小学生复习数学题 [2018-05-07]

作者: 9bc600670843 | 来源:发表于2018-05-06 16:24 被阅读284次

人人都能用Python

最近有个需求,亲戚家小朋友上小学一年级,开始学简单的加减法。考试成绩不理想。

吃饭时,和我聊了这事情,因为懂一点 Python 的皮毛,于是我大包大揽,接下一个“软件外包”的活儿,为他开发一个小程序,随机生成一些加减法的题目,每天打印出来,给小朋友回家练习用。

其实目标很简单:每次随机生成大概约100道题目,使用打印机打印出来即可。

所有测试试题写入表格中,用 Word 的表格其实最方便,但 Word 的 docx 不好弄,遂决定用markdown的表格功能。

工具

  • Python 3.6.x
  • Markdown 编辑器 (Typora)
  • Python编辑器(notepad++之类就可以了,或者Pycharm)

思路

  1. 简单的加减法,a ± b,a 和 b 为 1~100 内的随机数;加法or减法也随机生成;小朋友还没学到三位数和负数,所以要满足 a+b < 100,a-b>0 这两个条件
  2. 进阶的加减法:a ± b ± c,同样,三个随机数
    • a + b + c < 100
    • 0 < a + b - c < 100
    • 0 < a - b + c < 100,且 a > b
    • 0 < a - b - c < 100,且 a > b
  3. 满足如上条件的题目,写入.md文件中,以表格的形式存在。使用Typora打开后,直接打印,or 存为PDF后打印
  4. 试题的数量可变,只需要修改表格的 row 和 column 的数量即可

开始

  1. 先看看 Typora 中表格的 markdown 格式。

    Typora中,使用 CTRL+T,然后输入 row 和 column 的数量,软件就会自动创建表格。

    接下来 CTRL + / 查看 markdown 表格的语法。

  2. 表格由三部分组成

    • 表格标题抬头:直接以 | 分隔,如 | 姓名 | 年龄 | 电话 |,抬头中的内容会加粗
    • 表格分割线:类似上面的,中间内容部分以 ----替换,比如 | ---- | ---- | ---- |
    • 表格内容:和抬头格式一致,如 | 张三 | 24岁 | 13512341234 |
  3. 搞定了表格的格式,直接在 Python 中把格式和内容放进去,以 |隔开就好了

  4. python中按行写入文件 .md 文件

开干

  • 使用 random.randint(1, 99)来生成 1~99 之间的随机数
  • 使用 ROWCOL 来控制表格的行和列
  • 还要弄一个数组来存放所有的答案:Answer100[],让小娃娃自己检查订正
先把100道题所有的答案设为0(本来想一张试卷只有100道题的,所以数组叫 Answer100
# coding: utf-8

import random

ROW = 26            # 表格的行数
COL = 5             # 表格的列数
COUNT = ROW * COL    # 行×列,一张试卷总共题目的数量

Answer100 = []      # 数组初始化
for i in range(0, COUNT):
    Answer100.append(0)
生成等式 & 把答案填入数组中
  1. 创建一个函数,作用是返回一个 string,string的内容是表格中的每一行,函数就叫 printLine() 好了
  2. 表格的标题行,运行一次函数
  3. 表格的分割线,填入 | ---- | ---- | ---- |
  4. 表格的内容行,反复运行多次函数
# n 是表格的行数,通过 n 可以方便计算数组下标,把答案写入Answer100[]中
def printLine(n):       

    output = '| '       # 该行中第一个 “|”
    count = 0           

    while (count < COL):
        a = random.randint(1, 99)
        b = random.randint(1, 99)
        op = random.randint(0, 1)  # +/-

        if op == 0 and (a + b) < 100:   # ADD
            # print('%d  +  %d  = ' % (num1, num2), ' | ', end='')
            count += 1
            Answer100[n * COL + count - 1] = a + b
            output += str(a) + ' + ' + str(b) + ' =   | '

        if op == 1 and (a > b) and (a - b) > 0:     # SUB
            # print('%d  -  %d  = ' % (num1, num2), ' | ', end='')
            count += 1
            Answer100[n * COL + count - 1] = a - b
            output += str(a) + ' - ' + str(b) + ' =   | '

    output += '\n'
    return output
main函数(懒得写了,直接调用printLine()吧)
with open("简单运算.md", 'w') as f:       # 写到硬盘中的 简单运算.md 文件中
    f.write(printLine(0))               # 表格标题行
    
    f.write('| ---- | ---- | ---- | ---- | ---- |\n')   
    # 表格分隔行,全是字符
    # 其实这里应该根据 COL 的数量来判断中间几个 “----” 的
    # 但是好像在Typora 中,这个错了不影响表格,那就这么样吧,懒得弄了
    
    for i in range(1, ROW):             # 写后面的内容行
        f.write(printLine(i))

    # 答案写在另一页,先来个二级标题
    f.write('## Answer \n')
    
    # 答案的标题行
    f.write('| ' + str(Answer100[0]) + ' | '
                 + str(Answer100[1]) + ' | '
                 + str(Answer100[2]) + ' | '
                 + str(Answer100[3]) + ' | '
                 + str(Answer100[4]) + ' | \n')
    # 答案的分隔行
    f.write('| ---- | ---- | ---- | ---- | ---- |\n')
    
    # 答案剩下的行
    for i in range(1, ROW):
        f.write('| ' + str(Answer100[i * 5]) + ' | '
                + str(Answer100[i * 5 + 1]) + ' | '
                + str(Answer100[i * 5 + 2]) + ' | '
                + str(Answer100[i * 5 + 3]) + ' | '
                + str(Answer100[i * 5 + 4]) + ' | \n')

OK,基本上完成了一个简单试卷了

测试一遍

C:\Users\haha>f:

F:\>cd exam

F:\exam>python easy.py

F:\exam>dir
 驱动器 F 中的卷是 ETC
 卷的序列号是 2EEE-AFDC

 F:\exam 的目录

2018/05/06 周日  16:13    <DIR>          .
2018/05/06 周日  16:13    <DIR>          ..
2018/05/06 周日  15:45             1,810 easy.py
2018/05/06 周日  16:13             2,713 简单运算.md
               2 个文件          4,523 字节
               2 个目录 14,612,041,728 可用字节

F:\exam>         

生成了 简单运算.md 文件,用typora可以正常打开,直接打印就OK了

效果如图所示:


01.png 02.png

后续

花了一个小时写完了两个脚本,后来去他家喝酒

感受到他儿子看着我仇视的眼神

我不禁产生了怀疑,我这是算造孽么??

相关文章

网友评论

      本文标题:用Python帮小学生复习数学题 [2018-05-07]

      本文链接:https://www.haomeiwen.com/subject/dkyurftx.html