一、案例背景:同事家小孩子要上小学了,准备给小孩练习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-8from 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_valuereturn 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_litarget_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._elementr.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)    #写入wordwrite_to_word(target_list)

四附件:

1.配置文件

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

3.生成后的效果:

转载于:https://www.cnblogs.com/octmonth/p/11102972.html

用python给小孩随机生成一组10以内加减法相关推荐

  1. python加法例子_用python给小孩随机生成一组10以内加减法

    一.案例背景:同事家小孩子要上小学了,准备给小孩练习10以内加减法,为了解决出题的烦恼,希望我用python帮他实现,并保存到word里.近期在学习python,就当练手了,以后我们家娃也能用.代码简 ...

  2. java随机数带字母_随机生成一组随机数(带字母和数字)

    随机生成一组随机数(带字母和数字) package com.qfx.util; import java.util.Random; public class CharacterUtils { // 得到 ...

  3. PTA13、随机生成密码 (10 分)

    13.随机生成密码 (10 分) 新建一个字符列表,这个列表中的内容从前到后依次包含小写字母.大写字母.数字. 形如['a',...,'z','A',...,'Z','0',...'9'] 建议:使用 ...

  4. 十以内的加减java编写程序_Java实现随机出题,10道10以内加减法计算代码实例

    本文实例为大家分享了Java实现随机出题,10道10以内加减法计算l的具体代码,供大家参考,具体内容如下 package com.swift; import java.awt.Toolkit; imp ...

  5. python随机出100道加法题_自动出题随机100题-20以内加减法全部算式

    班  级: 姓  名: 12-8= 19-4= 11-11= 14-10= 18-1= 1+14= 17-2= 6+12= 15-1= 13-4= 17-8= 19-19= 14-3= 4+15= 1 ...

  6. java10以内的加减法_Java实现随机10道10以内加减法的代码详解

    Java实现随机出题,10道10以内加减法计算代码实例 本文实例为大家分享了Java实现随机出题,10道10以内加减法计算l的具体代码,供大家参考,具体内容如下 package com.swift; ...

  7. java编程10以内随机数字乘除,Java实现随机出题,10道10以内加减法计算代码实例...

    本文实例为大家分享了java实现随机出题,10道10以内加减法计算l的具体代码,供大家参考,具体内容如下 package com.swift; import java.awt.toolkit; imp ...

  8. java小学生加减法_Java实现随机出题,10道10以内加减法计算代码实例|chu

    本文实例为大家分享了Java实现随机出题,10道10以内加减法计算l的具体代码,供大家参考,具体内容如下 package com.swift; import java.awt.Toolkit; imp ...

  9. java随机出题_Java实现随机出题,10道10以内加减法计算代码实例

    Java实现随机出题,10道10以内加减法计算代码实例 发布于 2020-3-10| 复制链接 摘记: 本文实例为大家分享了Java实现随机出题,10道10以内加减法计算l的具体代码,供大家参考,具体 ...

最新文章

  1. C++ Primer 5th笔记(3)字符串、向量和数组:向量vector
  2. php 5.3 require,PHP5.3提示PHP Wrequire(./xx.php)arning: [function.require]: failed to open stream
  3. 网络协议分层及报文格式大全
  4. 电商系统的积分(即金币)的设计方案
  5. 7450清零_兄弟MFC-7450打印机硒鼓加粉 兄弟MFC-7450打印机怎么清零【图文】
  6. 数字经济发展指标体系和测算(含互联网宽带、电话普及率等多指标 内附原始数据) 2011-2020年
  7. ubuntu系统安装TP-Link无线网卡驱动
  8. 取模运算和求余运算的区别
  9. 产品经理之「用户故事实战」
  10. Handsontable 给力的仿Excel JQuery插件
  11. 带上萌宠去上班 | IT办公室宠物报告
  12. es6删除数组某一项_什么时候用集合,什么时候用数组?一文帮你清晰界定
  13. 网页模板UI素材推荐 精品 小众
  14. 怎么把计算机硬盘里面的软件放到桌面,怎样将应用放到桌面上
  15. mysql的锁机制,你真的了解吗?进来吧!用图表告诉你
  16. 【恩墨学院】为什么用尽了办法你的系统性能还是不见改善?
  17. 回归预测 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多输入单输出
  18. 计算机配置64位,win10 64位系统最低配置要求_win10系统 64位最低电脑配置要求多少...
  19. 铁头乔:开源社区那些事
  20. android倒计时停止,Android 使用 Timer 做倒计时。实现开始 (start),取消 (cancel),暂停 (pause),重开 (resume)功能...

热门文章

  1. 让Android应用程序支持安装到SD卡(APP2SD)
  2. 8位并行左移串行转换电路_双向移位寄存器 8位双向移位寄存器电路设计
  3. 【数据结构】布隆过滤器:BloomFilter原理及Java实现
  4. 译言网、东西网创始人赵嘉敏访谈
  5. 原创]师大往事——我在川师的几年青春岁月
  6. ubuntu14.04 splash安装
  7. MMORPG游戏中AOI视野算法解析
  8. 深入理解awgn函数如何向信号中添加高斯白噪声
  9. Python-QRCode使用
  10. 解决:GET http://localhost:**/static/js/jquery.min.js net::ERR_ABORTED 404