吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5112|回复: 14
收起左侧

[Python 转载] 小学加减乘除法(竖式)

   关闭 [复制链接]
dreamrise 发表于 2021-11-19 14:48
本帖最后由 dreamrise 于 2021-11-21 21:25 编辑

源自: https://www.52pojie.cn/thread-1538498-1-1.html 作者: 深山霜枫
闲的无聊,扩展了乘除功能, 目前支持 2-3位的加减乘除,横式与竖式
除法竖式用到了:https://gitee.com/tmnet/formula  
继续开源.完整内容在: https://gitee.com/dreamrise/mathgen
输出结果请看output下面的样本.

Snipaste_2021-11-19_14-46-48.PNG
[Python] 纯文本查看 复制代码
# -*- 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(10,100)
        randomSymbol = plusOrminus[random.randint(0,1)]
        if (randomSymbol == '÷'):
            # 除法用乘法反向出题 : 
            # 999*999=998001 以内的除法  
            while val1*val2 > 998000:
                val1 = random.randint(100,999)
                val2 = random.randint(100,999)      
            val1 = val1*val2  # 用乘积做除数         
            val2 = val2  # 用其中一个数做除数     
        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 multiply(num):
    list = []
    plusOrminus = ['×']
    for i in range(num):
        from builtins import str
        valn = random.randint(100,999)
        valm = random.randint( 10,200)
        valstr = ""
        randomSymbol = plusOrminus[0]
        strn = str(valn)
        strm = str(valm)
        val1 = strn[0]
        val2 = strn[1]
        val3 = strn[2]
        if valm > 100: 
            val4 = strm[-3]
        else:
            val4 = "&#8194;"
        # 半角空格: https://blog.csdn.net/u014781844/article/details/84859693
        val5 = strm[-2]
        val6 = strm[-1]
        string = f'''<li>
                <div class="top">
                    {val1}     {val2}     {val3}
                </div>
                <div class="middle">
                    <span>{randomSymbol}</span>{val4}     {val5}     {val6}
                </div>
                <div class="multilines">
                    <div></div>
                </div>
                </li>'''
        list.append(string)
    return list

def division(num):
    list = []
    for i in range(num):
        val1 = random.randint(100,999)
        val2 = random.randint(100,999)        
        while val1*val2 > 998000:
            val1 = random.randint(100,999)
            val2 = random.randint(100,999)
        valn = val1*val2  # 用乘积做除数         
        valm = val2  # 用其中一个数做除数     
        strn = str(valn)
        strm = str(valm)
        string = f'''<li>
                <div class="top">
                    <division>{strn}/{strm}</division>
                </div>
                <div class="division">
                    <div></div>
                </div>
                </li>'''
        list.append(string)
    return list;


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

async def html2pdf(fileName):
    # 设置环境变量
    os.environ['no_proxy']="localhost,127.0.0.1"
    browser = await launch()
    # browser = await launch(options={'args': ['--no-sandbox']})
    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("输入生成多少张试卷:"))    
    multiplyNum = int(input("每张试卷 竖式计算 乘法题目数量:"))
    divisionnum = int(input("每张试卷 竖式计算 除法题目数量:"))
    # count, multiplyNum,divisionnum = 1, 8, 8
    import time
    time_ext = time.strftime('%Y-%m-%d_%H-%M-%S', time.localtime(time.time()))
    for i in range(count):
        print(f"正在生成第{i+1}张试卷......")
        practice2 = multiply(multiplyNum)   
        practice3 = division(divisionnum) 
        generate_html(practice2,practice3)     
        asyncio.get_event_loop().run_until_complete(html2pdf(time_ext + "_" + str(i+1)))
    print("全部生成完毕!按任意键退出程序")
    os.system('pause')


免费评分

参与人数 2吾爱币 +8 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
wwfbzyy + 1 谢谢@Thanks!

查看全部评分

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

shiwowo 发表于 2022-1-20 11:41
dreamrise 发表于 2022-1-19 09:41
安装python,官网下载.
然后安装两个包:
pip install jinja2 pyppeteer

谢谢老铁耐心回复。 再问问,pip install jinja2 pyppeteer  这两个包 怎么安装在哪里下载。了
 楼主| dreamrise 发表于 2022-1-20 15:20
shiwowo 发表于 2022-1-20 11:41
谢谢老铁耐心回复。 再问问,pip install jinja2 pyppeteer  这两个包 怎么安装在哪里下载。了

不需要单独下载, 这个命令会自动联网从Python库的服务器下载.
首席技术官 发表于 2021-11-25 22:26
sense_seek 发表于 2021-12-15 09:50
哪位大佬能编译一个版本吗,感谢了
52ping 发表于 2022-1-10 16:57
非常棒的工具,可惜自己不会编译。
shiwowo 发表于 2022-1-16 08:07
请教一下 这些代码怎么用可以 详细说说一下  普度一下众生吗啊
 楼主| dreamrise 发表于 2022-1-19 09:41
shiwowo 发表于 2022-1-16 08:07
请教一下 这些代码怎么用可以 详细说说一下  普度一下众生吗啊

安装python,官网下载.
然后安装两个包:
pip install jinja2 pyppeteer
然后运行即可.

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
shiwowo + 1 + 1 我很赞同!

查看全部评分

hipda987 发表于 2022-1-20 13:58
收藏 ,等孩子长大使用
谢谢
shiwowo 发表于 2022-1-21 09:34
dreamrise 发表于 2022-1-20 15:20
不需要单独下载, 这个命令会自动联网从Python库的服务器下载.

是安装好只要输入上边的代码就可以了吧
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 21:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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