用python給小孩隨機生成一組10以內加減法


 

一、案例背景:同事家小孩子要上小學了,准備給小孩練習10以內加減法,為了解決出題的煩惱,希望我用python幫他實現,並保存到word里。近期在學習python,就當練手了,以后我們家娃也能用。代碼簡單,講一下思路,后面直接貼源碼了。不足之處,各位自行優化。最后用pyinstaller生成.exe時,遇到打包之后找不到default.docx,是項目最大的收獲了。解決方法是:

doc = Document(docx=os.path.join(os.getcwd(), 'default.docx')) 用本地的default.docx,這個文件可以在安裝python-docx的目錄搜索。

 

二、實現思路:

0.讀取配置文件選項range=10(加減法范圍) page=45(要生成加減法數量,一頁正好可以寫45個,總共155,也可以全部生成),配置文件保存目錄./conf/conf.ini

1.遍歷生成10以內所有加法和減法

2.把生成的加法和減法按page=45,生成目標列表

3.把目標列表隨機寫到word上,供小孩練習

 

三、核心代碼:

 

#!/usr/bin/env python
# coding: utf-8

from docx import Document
from docx.shared import Pt
from docx.shared import Inches
from docx.oxml.ns import qn
from random import randrange
import os


#加載配置文件信息
def load_conf(config_name):
    config_dic={}
    with open(config_name,'r') as f:
        lines = f.readlines()
        for config in lines:
            config_str=config.strip('\n')
            config_key=config_str.split('=')[0]
            config_value=config_str.split('=')[1]
            config_dic[config_key]=config_value
    return config_dic


#生成減法列表
def get_sub_list():
    sub_list = []
    for x in range(int(configs_dic['range'])):
        for y in range(x+1):
            sub_item=str(x) + " - " + str(y) + " = "
            sub_list.append(sub_item)
    return sub_list
#生成加法列表
def get_add_list():
    add_list = []
    for a in range(int(configs_dic['range'])):
        for b in range(int(configs_dic['range'])):
            add_item=str(a) + " + " + str(b) + " = "
            add_list.append(add_item)
    return add_list


#生成目標列表
def get_target_list(add_li,sub_li):
    all = add_li + sub_li
    target_list=[]
    for i in range(int(configs_dic['page'])):
        random_index = randrange(0,len(all))
        target_list.append(all[random_index])
    return target_list


#把目標列表寫入word
def write_to_word(target_list):
    row_size=int(len(target_list)//3)
    left_target_list=target_list[:row_size]
    middle_target_list=target_list[row_size:row_size*2]
    right_target_list=target_list[row_size*2:]
    #打開文檔
    document = Document(docx=os.path.join(os.getcwd(), 'default.docx'))

    #加入標題
    document.add_heading(u'10以內加減,加強練習',0)

    #添加文本

    for i in range(row_size):
        paragraph = document.add_paragraph()
        #設置中文字體
        run = paragraph.add_run(left_target_list[i]+"    "+middle_target_list[i]+"     "+right_target_list[i]+"     ")
        run.font.name=u'宋體'
        run.font.size = Pt(20)
        r = run._element
        r.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')
    #保存文件
    document.save(u'加減.docx')



if __name__ == '__main__':
   #讀取配置文件信息,range=10 范圍,page=45,每頁算術個數 config_name
='./conf/conf.ini' configs_dic=load_conf(config_name)
   #生成加、減法列表 add_li
=get_add_list() sub_li=get_sub_list()
   #生成目標列表,45個 target_list
= get_target_list(add_li,sub_li)
#寫入word write_to_word(target_list)

 

四附件:

1.配置文件

2.default.docx 要copy到工作目錄,不然生成exe是無法正常使用。

3.生成后的效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM