最近购置了打印机,给小孩打印一些学习材料。小孩在家无聊,就安排起数学试题打发时间。
随手一搜,好多都要付费下载,例如下面
点开百度文库,还需要花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