⽤python给⼩孩随机⽣成⼀组10以内加减法
⼀、案例背景:同事家⼩孩⼦要上⼩学了,准备给⼩孩练习10以内加减法,为了解决出题的烦恼,希望我⽤python帮他实现,并保存到word⾥。近期在学习python,就当练⼿了,以后我们家娃也能⽤。代码简单,讲⼀下思路,后⾯直接贴源码了。不⾜之处,各位⾃⾏优化。最后⽤pyinstaller⽣成.exe时,遇到打包之后不到default.docx,是项⽬最⼤的收获了。解决⽅法是:
doc = Document(docx=os.path.wd(), '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 python100个python练手项目
# coding: utf-8
from docx import Document
from docx.shared import Pt
from docx.shared import Inches
l.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.wd(), '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.⽣成后的效果: