程序员老爸坑娃之自动生成十以内加减法试卷

最近购置了打印机,给小孩打印一些学习材料。小孩在家无聊,就安排起数学试题打发时间。

随手一搜,好多都要付费下载,例如下面

点开百度文库,还需要花9元开通一个VIP,才能下载。定睛一看居然还有2000多人下载



正要付款,转念一想,要不要自己写脚本生成试试。又一想,我应该不是第一个有这个需求的程序猿了,抬手搜了一下,没看两页就找到一个比较合适的。

参考:
https://www.cnblogs.com/hiuhungwan/p/9314751.html

代码:

# !/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Hiuhung Wan
 
import random
 
def add_test(sum_value, count):
    '''
    返回指定个数(count)的计算题,以计算某数(sum_value)以内的加法
    :param sum_value: 指定某数以内(的加法)
    :param count: 随机生成多少题
    :return: 返回count个计算题
    '''
 
    questions = ''
    count_temp = 0   # 计数器
 
    while True:
        i = random.randrange(1, sum_value)       # 随机生成 第一个加数
        j = random.randrange(2, sum_value + 1)   # 随机生成 和
        l = j - i                                # 第二个加数
        if l > 0:
            str_temp = str(i) + ' + ' + str(l) + '' + ' =    \n'
            questions += str_temp
            count_temp += 1
            if count_temp >= count:
                break
 
    return questions
 
def main():
    sum_value, count = 10, 150      # 随机出150题,10以内的加法
    q = add_test(sum_value, count)
    str_title = '%d以内加法算术题%d题.doc' % (sum_value, count)
    with open(str_title, "w") as f:
        f.write(q)
    f.close()
 
if __name__ == '__main__':
    main()

可惜只能生成加法,还差点减法的。动手改了一下,增加随机生成减法的功能。哈哈。最后打印出来的时候,成就感满满

# !/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Hiuhung Wan
 
import random
 
def add_test(sum_value, count, column_count=0):
    '''
    返回指定个数(count)的计算题,以计算某数(sum_value)以内的加法
    :param sum_value: 指定某数以内(的加法)
    :param count: 随机生成多少题
    :return: 返回count个计算题
    '''
 
    questions = ''
    count_temp = 0   # 计数器
 
    while True:
        calc_type = random.randrange(0,1)
        i = random.randrange(1, sum_value)       # 随机生成 第一个加数
        j = random.randrange(2, sum_value + 1)   # 随机生成 和
        l = j - i                              # 第二个加数
        if l > 0:
            str_temp = str(i) + ' + ' + str(l) + '' + ' =    \n'
            questions += str_temp
            count_temp += 1
        elif(l< 0):
            str_temp = str(i)+ ' - ' + str(abs(l)) + '' + ' =    \n'
            questions += str_temp
            count_temp += 1
            print(str_temp)
        else :
            if(random.randrange(0,1)):
                str_temp = str(i)+ ' - ' + str(l) + '' + ' =    \n'
            else:
                str_temp = str(i)+ ' + ' + str(l) + '' + ' =    \n'
            questions += str_temp
            count_temp += 1
        if count_temp >= count:
            break
    return questions
 
def main():
    sum_value, count = 10, 350      # 随机出150题,10以内的加法
    q = add_test(sum_value, count)
    str_title = '%d以内加法算术题%d题.doc' % (sum_value, count)
    with open(str_title, "w") as f:
        f.write(q)
    f.close()
 
if __name__ == '__main__':
    main()

唯一一点缺陷,就是生成出来的试题是单列的,比较废纸。要想美观和最大限度利用纸,还要手动排版。等有时间再优化一下。




不知到我家小孩如果知道试题是我随机生成的,而且还能无限续杯,哈哈,是不是会哭晕过去O(∩_∩)O

原文链接:,转发请注明来源!