吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 28071|回复: 527
上一主题 下一主题
收起左侧

[原创工具] 【小学生作业自动生成】自动生成小学加减法作业

    [复制链接]
跳转到指定楼层
楼主
深山霜枫 发表于 2021-11-4 22:37 回帖奖励

简易自动生成小学生作业【开源】

自动生成三位数以内的小学生加减法作业,并生成A4大小的PDF文件便于打印,效果如图所示:

便捷使用

  • 下载已经编译好的程序 点我直达下载
  • 解压文件,注意解压出来的四个文件必须在同一文件夹下
  • 运行homeworkProduce.exe,第一次运行会自动下载Chrome driver
  • 根据提示填入需要生成多少张作业,每张试卷口算练习题数量,竖式计算题数量,然后回车
  • output文件夹下会生成指定数量张的作业

实现思路

  • 作业模板基于HTML+CSS,使用jinja2模板引擎动态渲染数据传入HTML
  • 基于Chrome headlessApiHTML打印成PDF,这里使用Pyppeteer

自行编译

  • 支持Python3.6Python3.7Python3.8Python3.9、注意WIn7不支持Python3.8以上
  • pip install jinja2
    pip install pyppeteer

代码写得很烂

# -*- coding: utf-8 -*-
from jinja2 import Environment, FileSystemLoader
import random
import asyncio
import os
from pyppeteer import launch

def initPractice1(num):
    list = []
    plusOrminus = ['+','-']
    for i in range(num):
        val1 = random.randint(100,999)
        val2 = random.randint(100,999)
        randomSymbol = plusOrminus[random.randint(0,1)]
        if (randomSymbol == '-'):
            val2 = random.randint(100,val1)
        if (randomSymbol == '+'):
            while val1+val2 > 999:
                val1 = random.randint(100,999)
                val2 = random.randint(100,999)  
        str = f'<li>{val1}  {randomSymbol}  {val2}  =</li>'
        list.append(str)
    return list;

def initPractice2(num):
    list = []
    plusOrminus = ['+','-']
    for i in range(num):
        from builtins import str
        valn = random.randint(100,999)
        valm = random.randint(100,999)
        valstr = ""
        randomSymbol = plusOrminus[random.randint(0,1)]
        if (randomSymbol == '-'):
            bfw = random.randint(0,int(valn/100));
            sw = random.randint(0,(int(valn/10))%10);
            gw = random.randint(0,valn%10)
            valstr = str(bfw) + str(sw) + str(gw)
        if (randomSymbol == '+'):
            while valn+valm > 999:
                valn = random.randint(100,999)
                valm = random.randint(100,999)
        strn = str(valn)
        strm = str(valm)
        val1 = strn[0]
        val2 = strn[1]
        val3 = strn[2]
        val4 = strm[0]
        val5 = strm[1]
        val6 = strm[2]
        if (randomSymbol == '-'):
            val4 = valstr[0]
            val5 = valstr[1]
            val6 = valstr[2]
        str = f'''<li>
                <div class="top">
                    {val1}     {val2}     {val3}
                </div>
                <div class="middle">
                    <span>{randomSymbol}</span
                    >{val4}     {val5}     {val6}
                </div>
                <div class="down clearfix">
                    <div></div>
                    <div></div>
                    <div></div>
                </div>
                </li>'''
        list.append(str)
    return list

def generate_html(practice1,practice2):
    env = Environment(loader=FileSystemLoader('./'))
    template = env.get_template('template.html')     
    with open("result.html",'w',encoding="utf-8") as fout:   
        html_content = template.render(practice1=practice1,practice2=practice2)
        fout.write(html_content)

async def html2pdf(fileName):
    browser = await launch()
    page = await browser.newPage()
    await page.goto(os.path.join(os.getcwd(),"result.html"))
    await page.pdf({
        "path": "output/"+fileName+".pdf", "format": 'A4'})
    await browser.close()

if __name__ == "__main__":
    count = int(input("输入生成多少张试卷:"))
    practice1Num = int(input("每张试卷 口算练习 题目数量:"))
    practice2Num = int(input("每张试卷 竖式计算 题目数量:"))
    for i in range(count):
        print(f"正在生成第{i+1}张试卷......")
        practice1 = initPractice1(practice1Num)
        practice2 = initPractice2(practice2Num)   
        generate_html(practice1,practice2)     
        asyncio.get_event_loop().run_until_complete(html2pdf(str(i+1)))
    print("全部生成完毕!按任意键退出程序")
    os.system('pause')

免费评分

参与人数 123吾爱币 +102 热心值 +107 收起 理由
cjy9219 + 1 + 1 谢谢@Thanks!
eq2008iq + 1 + 1 谢谢@Thanks!
a2003320a + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
111222uuufa + 1 + 1 谢谢@Thanks!
babo27 + 1 我很赞同!
disiwei + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
chao8709 + 1 + 1 我很赞同!
MassRount + 1 + 1 我很赞同!太棒了
jacobjacob + 1 + 1 我很赞同!
taylorwhite + 1 + 1 我很赞同!
qiwei8242 + 1 + 1 谢谢@Thanks!
zebracarl + 1 + 1 谢谢@Thanks!
zss12314 + 1 + 1 热心回复!
小二上茶 + 1 建议加入加减乘除可选择,不一定非得三位数
gongmingtao0601 + 1 + 1 我很赞同!
BlueSky2000 + 1 + 1 我很赞同!
jylsky99 + 1 我很赞同!
cc5720 + 1 我很赞同!
3qingmi + 1 + 1 我很赞同!
ywzzt + 1 谢谢@Thanks!
qweasdasd + 1 我很赞同!
三伏天逛沙漠 + 1 感谢分享python代码
月光晒被 + 1 + 1 谢谢@Thanks!
hetoxue1223 + 1 用心讨论,共获提升!
qiacn + 1 + 1 我很赞同!
kfkhfj + 1 我很赞同!
52ping + 1 + 1 谢谢@Thanks!
agendafailure + 1 + 1 我很赞同!
sean0301 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wmy19890322 + 1 + 1 我很赞同!
xky8399 + 1 + 1 可以改成20以内的加减和20以内的连加连减吗,儿子才1年级
zhomu + 1 + 1 谢谢@Thanks!
uyucn + 1 + 1 我很赞同!
超_珍藏版╮ + 1 谢谢
lichaozheng + 1 + 1 我很赞同!
diliuyue + 1 谢谢@Thanks!
neal5808 + 1 热心回复!
comzq008 + 1 + 1 谢谢@Thanks!
江米小枣 + 1 热心回复!
翰墨留香 + 1 + 1 用心讨论,共获提升!
南天风语 + 1 + 1 谢谢@Thanks!
whan852 + 1 + 1 谢谢@Thanks!
rocsheng + 1 + 1 谢谢@Thanks!
heroalex + 1 + 1 我很赞同!
羽未 + 1 + 1 我很赞同!
云朵妈妈2014 + 1 希望新增加减乘除混合运算,能够选择两位数还是个位数还是三位数。这样更适.
jasonyuan + 1 + 1 我很赞同!
AYaoCryForYou + 1 + 1 我很赞同!
Leoken + 1 + 1 谢谢@Thanks!
feiben + 1 用心讨论,共获提升!
dreamrise + 1 + 1 做了个扩展, 支持2-3位小学加减乘除法 https://gitee.com/dreamrise/mathg.
jackydengjie + 1 谢谢@Thanks!
dyl1113 + 1 + 1 热心回复!
wb5878474 + 1 我很赞同!
Gsai + 1 我很赞同!
pseasy + 1 谢谢@Thanks!
34000920 + 1 谢谢@Thanks!
yhlslkj + 1 + 1 可否添加自定义竖式范围
QD00001 + 1 + 1 我很赞同!
Gezelligheidk + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
huih78 + 1 我很赞同!
sanant + 1 + 1 谢谢@Thanks!
呋喃呐 + 1 + 1 我很赞同!
duanzhaohua + 1 + 1 谢谢@Thanks!
panpan1169 + 1 + 1 谢谢@Thanks!
wszgw2014 + 1 鼓励转贴优秀软件安全工具和文档!
chuohaogulang + 1 我很赞同!
青春白菜 + 1 + 1 我很赞同!
FreeCaptain + 1 + 1 用心讨论,共获提升!
heimaojingzhang + 1 可以加上加减乘除,或者是在题库里随机抽简单应用题吗?
RXF9527 + 1 + 1 我很赞同!
3210qzqz + 1 + 1 谢谢@Thanks!
Xljiang + 1 谢谢@Thanks!
ruanjiandiguo + 1 + 1 小学生的噩梦在吾爱~
海贼王路飞 + 1 + 1 不是老师,也用不到,但还是为楼主这样的创意和分享精神点赞
levelhan + 1 + 1 我很赞同!
李旭军 + 1 + 1 我很赞同!
lyk1995 + 1 我很赞同!
zengyijun + 1 + 1 好家伙
行胜于言丶 + 1 + 1 谢谢@Thanks!
Boom018 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
准备做大神 + 1 + 1 我很赞同!
ylym8888 + 1 用心讨论,共获提升!
zs77871441 + 1 + 1 我很赞同!
别再哭泣 + 1 + 1 谢谢@Thanks!
19190575385 + 1 + 1 谢谢@Thanks!
精妹 + 1 我很赞同!
petter110 + 1 我很赞同!
ysh1979 + 1 + 1 马上给家里的小孩安排上
daiqwertyu + 1 + 1 谢谢@Thanks!
a85401234 + 1 谢谢@Thanks!
lmlxlmlx + 1 牛牛亚
weefun92 + 1 用心讨论,共获提升!
pinpo + 1 我很赞同!
yuyang890909 + 1 + 1 真的挺好
lolool + 1 + 1 我很赞同!
ljawlq + 1 + 1 乘除法有考虑么。
yuriko0527 + 1 + 1 我很赞同!
goh123 + 1 我很赞同!
w12351 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
shakespark 发表于 2021-11-6 04:02
python写的,厉害了
推荐
xjh0610 发表于 2021-11-6 07:56
沙发
我在路上 发表于 2021-11-5 19:35
感谢发布原创作品,吾爱破解论坛因你更精彩!
3#
sfsren 发表于 2021-11-5 20:09
下载一下试试
4#
xkf8201 发表于 2021-11-5 22:16
这个非常好
5#
nmy124 发表于 2021-11-5 23:24
这个非常好,收藏了
6#
17771425895 发表于 2021-11-5 23:48
值得学习
7#
LHCAILGT 发表于 2021-11-6 01:04
这个不错。
8#
fxd680126 发表于 2021-11-6 03:20
漂亮简洁方便。家长的福音!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-26 08:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表