闺女上小学,计算题总觉得有问题,想提供些题目给她练练,家里也有打印机,就做一个吧。底部提供下载

import random, os
import PySimpleGUI as sg
from docx import Document
from docx.shared import RGBColor, Pt, Mm, Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn'''
该程序产生口算题doc文件:'''
document = Document()'''
生成随机数,默认产生2位数的随机数
'''def randomtoNUM(bit=2):if bit == 2:return random.randint(10, 99)elif bit == 3:return random.randint(100, 999)elif bit == 1:return random.randint(1, 9)'''
2位数减法(含退位)
'''def chutijian():jia1_10 = random.randint(1, 9)jia1_1 = random.randint(0, 8)jia1 = int(str(jia1_10) + str(jia1_1))# print(8-int(str(jia1)[0]))jia2_max10 = int(str(jia1)[0]) - 1if jia2_max10 < 1:jia2_10 = jia2_max10else:jia2_10 = random.randint(0, jia2_max10)if int(str(jia1)[1]) + 1 >= 9:jia2_1 = 9else:jia2_1 = random.randint(int(str(jia1)[1]) + 1, 9)jia2 = int(str(jia2_10) + str(jia2_1))# print(eval("{} + {}".format(jia1,jia2)))return "{:<2d} - {:>2d}".format(jia1, jia2)'''
2位数加法(含进位)
'''def chutiAdd():jia1_10 = random.randint(1, 8)jia1_1 = randomtoNUM(1)jia1 = int(str(jia1_10) + str(jia1_1))# print(8-int(str(jia1)[0]))jia2_max10 = 8 - int(str(jia1)[0])if jia2_max10 <= 1:jia2_10 = abs(jia2_max10)else:jia2_10 = random.randint(1, jia2_max10)if 10 - int(str(jia1)[1]) >= 9:jia2_1 = 9else:jia2_1 = random.randint(10 - int(str(jia1)[1]), 9)jia2 = int(str(jia2_10) + str(jia2_1))# print(eval("{} + {}".format(jia1,jia2)))if random.randint(0, 1):return "{:<2d} + {:>2d}".format(jia1, jia2)else:return "{:<2d} + {:>2d}".format(jia2, jia1)'''
1位数加法(含进位)
'''def chuti1BitAddH():jia1 = randomtoNUM(1)jia2 = 10 - jia1  # 第二个数最小值if jia2 == 1:jia2 = 9else:jia2 = random.randint(10 - jia1, 9)if random.randint(0, 1):return "{:<2d} + {:>2d}".format(jia1, jia2)else:return "{:<2d} + {:>2d}".format(jia2, jia1)'''
1位数加法(不含进位)
'''def chuti1BitAdd():jia1 = random.randint(1, 8)jia2 = 9 - jia1  # 第二个数最大值if jia2 <= 1:jia2 = 1else:jia2 = random.randint(1, jia2)if random.randint(0, 1):return "{:<2d} + {:>2d}".format(jia1, jia2)else:return "{:<2d} + {:>2d}".format(jia2, jia1)'''
1位数减法
'''def chuti1Bitsub():jian1 = random.randint(2, 9)jian2 = jian1 - 1if jian2 <= 1:jian2 = 1else:jian2 = random.randint(1, jian2)return "{:<2d} - {:>2d}".format(jian1, jian2)'''
产生2个相减需退位的数,即第1个数小于第二个数
'''
def gtTenSub():jia1 = random.randint(0, 8)jia2 = jia1+1if jia2 >= 9:jia2 = 9else:jia2 = random.randint(jia2, 9)return jia1, jia2'''
产生2个相减不退位的数,第1个数大于第二个数
'''def ltTenSub():jia1 = random.randint(2, 9)jia2 = jia1-1  # 第二个数最大值if jia2 <= 1:jia2 = 1else:jia2 = random.randint(1, jia2)return jia1, jia2'''
产生2个相加进位的数
'''def gtTen():jia1 = random.randint(1, 9)jia2 = 9 - jia1if jia2 >= 9:jia2 = 9else:jia2 = random.randint(jia2 + 1, 9)return jia1, jia2'''
产生2个相加不进位的数
'''def ltTen():jia1 = random.randint(1, 8)jia2 = 9 - jia1  # 第二个数最大值if jia2 <= 1:jia2 = 1else:jia2 = random.randint(1, jia2)return jia1, jia2'''
3位数相加'''def chuti3BitAdd():listone = []listtwo = []gttenNum = random.randint(1, 3)  # 选出需要进位的个数for i in range(gttenNum):one, two = gtTen()listone.append(str(one))listtwo.append(str(two))for j in range(3 - gttenNum):one, two = ltTen()listone.append(str(one))listtwo.append(str(two))#print('完整:', ''.join(listone), ''.join(listtwo))if random.randint(0, 1):return "{:>8s} \n+ {:>5s}\n ̄ ̄ ̄ ̄ ̄\n\n".format(''.join(listone), ''.join(listtwo))else:return "{:>8s} \n+ {:>5s}\n ̄ ̄ ̄ ̄ ̄\n\n".format(''.join(listtwo), ''.join(listone))'''
3位数相减'''def chuti3BitSub():listone = []listtwo = []gttenNum = random.randint(1, 2)  # 选出需要退位的个数for i in range(gttenNum):one, two = gtTenSub()listone.append(str(one))listtwo.append(str(two))for j in range(3 - gttenNum):one, two = ltTenSub()listone.append(str(one))listtwo.append(str(two))#print('完整:', ''.join(listone), ''.join(listtwo))listone.reverse()listtwo.reverse()return "{:>8s} \n- {:>5d}\n ̄ ̄ ̄ ̄ ̄\n\n".format(''.join(listone), int(''.join(listtwo)))'''整十或整百加减
'''def allplugsub():localhandleFunctionlist = ['chuti1BitAdd', 'chuti1BitAddH', 'chuti1Bitsub', 'chutiAdd', 'chutijian']resulttemp = eval(random.choice(localhandleFunctionlist) + "()")strarr = resulttemp.split('-')isFlagplugsub = len(strarr)  # 是1为加法,2为减法beishu = random.choice(['0', '00'])if isFlagplugsub == 2:  # 减法jian1 = strarr[0].strip() + beishujian2 = strarr[1].strip() + beishureturn "{:<2d} - {:>2d}".format(int(jian1), int(jian2))else:  # 加法strarr = resulttemp.split('+')jia1 = strarr[0].strip() + beishujia2 = strarr[1].strip() + beishuif random.randint(0, 1):return "{:<2d} + {:>2d}".format(int(jia1), int(jia2))else:return "{:<2d} + {:>2d}".format(int(jia2), int(jia1))'''
产生doc文档
'''def makedoc(handlelist,pagenum):'''p = document.add_paragraph()p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTERrun = p.add_run(u'小学生计算题练习 ')run.font.color.rgb = RGBColor(0, 0, 0)run.font.size = Pt(28)p.space_before = Pt(40)p.add_run().add_break(break_type=6)'''document.styles['Normal'].font.name = u'宋体'document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')document.styles['Normal'].font.size = Pt(16)ti = document.add_paragraph()ti.alignment = WD_ALIGN_PARAGRAPH.LEFTfor nump in range(pagenum):tishu = 45if len(handlelist) ==1 and ('chuti3BitAdd' in handlelist or 'chuti3BitSub' in handlelist):tishu = 21if len(handlelist) ==2 and ('chuti3BitAdd' in handlelist and 'chuti3BitSub' in handlelist):tishu = 21for i in range(tishu):  # 产生45题口算题# 根据函数名称随机选择题目类型,handlelist list的值,可用的函数'chutiAdd', 'chutijian','chuti1BitAddH','chuti1BitAdd'if tishu == 45:content = u"{:<7}=".format(eval(random.choice(handlelist) + "()"))run1 = ti.add_run("{:<40}".format(content))elif tishu == 21:content = u"{}".format(eval(random.choice(handlelist) + "()"))if i==20 and nump==pagenum-1:content=content.strip('\n\n')run1 = ti.add_run("{}".format(content))run1.font.color.rgb = RGBColor(0, 0, 0)run1.font.size = Pt(16)if tishu == 45:ti.paragraph_format.line_spacing = Pt(45)#print(len(document.sections))for section in document.sections:header = section.headerparagraph = header.paragraphs[0]paragraph.text = '                     小学生计算题练习                  'paragraph.style = document.styles["Header"]section.top_margin = Inches(0.7)section.bottom_margin = Inches(0.7)section.left_margin = Inches(0.7)section.right_margin = Inches(0.7)# Columns = 1sectPr = section._sectPrcols = sectPr.xpath('./w:cols')[0]cols.set(qn('w:num'), '3')document.save('test.docx')  # 可以设置其他路径os.startfile("test.docx")# ff     GreenTan
sg.ChangeLookAndFeel('LightGreen')
ok_btn = sg.SimpleButton('生成习题', size=(10, 2), font=("微软雅黑", 12), button_color=('white', 'firebrick3'))
cancel_btn = sg.Button('关闭程序', size=(10, 2), font=("微软雅黑", 12))
layout = [[sg.Checkbox('1位数加,不进位', default=False, size=(35, 2), font=("微软雅黑", 12))],[sg.Checkbox('1位数加,进位', size=(35, 2), font=("微软雅黑", 12))],[sg.Checkbox('1位数减', size=(35, 2), font=("微软雅黑", 12))],[sg.Checkbox('2位数加,进位', size=(35, 2), font=("微软雅黑", 12))],[sg.Checkbox('2位数减,退位', size=(35, 2), font=("微软雅黑", 12))],[sg.Checkbox('整十或整百加减', size=(35, 2), font=("微软雅黑", 12))],[sg.Checkbox('3位数相加,进位,只能与竖式同时选择', size=(35, 2),text_color=('blue'), font=("微软雅黑", 12))],[sg.Checkbox('3位数减法,退位,只能与竖式同时选择', size=(35, 2),text_color=('blue'), font=("微软雅黑", 12))],# [sg.Slider(range=(1,5), orientation='h',size=(35, 10),  font=("微软雅黑", 12))],#[sg.Text('This is some text', font='Courier 12', text_color='blue', background_color='green')],#[sg.Spin([1,2,3,4,5], size=(35, 10),  font=("微软雅黑", 12))],
[sg.Text('要生成几页:',auto_size_text=True,size=(15, 1), font=("微软雅黑", 12))],
[sg.Slider(range=(1,6), orientation='h',size=(35, 15),  font=("微软雅黑", 12))],[ok_btn, cancel_btn],[sg.StatusBar('作者: 邮箱:45251289@qq.com\n编写语言:python  版本日期:2020-4-8',size=(400,10), font=("微软雅黑", 12))]]window = sg.Window('小学生计算题生成器', default_element_size=(40, 2), size=(400, 485)).Layout(layout)handleFunctionlist = ['chuti1BitAdd', 'chuti1BitAddH', 'chuti1Bitsub', 'chutiAdd', 'chutijian', 'allplugsub','chuti3BitAdd','chuti3BitSub']
while True:event, values = window.read()if event in (None, '关闭程序'):# User closed the Window or hit the Cancel buttonbreakelif event in (None, '生成习题'):# sg.Popup(event, values)handlelist = []#print(values)for i in values:if type(values[i])==bool and values[i]:handlelist.append(handleFunctionlist[i])#print(handlelist)pagenum=int(values[8])#print(pagenum)makedoc(handlelist,pagenum)breakwindow.close()

打包后的exe:下载链接

小学生计算题生成器的python实现相关推荐

  1. 【运算】超长小学生计算题

    超长小学生计算题 给你一个序列,序列长2e6,接下来给出你2e7个运算操作,包括加减乘除四种操作,其中,加减操作是单点修改,除法操作是全局修改,对于除法操作我们保证不会产生分数,也就是说这个过程中一定 ...

  2. 第15周-小学生计算题(0-10的随机数乘法运算记分系统)

    问题及代码: /* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:questions.cpp *作 者:单昕昕 *完成日期 ...

  3. python计算公式程序_小学生计算题的自动程序Python,生成,python

    小学生的计算题自动生成小程序「python」 #!/usr/bin/python # -*- coding: UTF-8 -*- #liuqiping fred from docx import Do ...

  4. 小学生计算题软件产品设计

    原型设计加用户规格说明 蔡晨旸349 蔺皓雯369 工具:墨刀 博客作业:https://edu.cnblogs.com/campus/fzzcxy/2016SE/homework/2180 原型链接 ...

  5. 中国式小学生计算题软件规格说明书

    功能规格说明书 此次作业说明:原型设计 + 用户规格说明书 原型设计工具:墨刀 作业效果:MathExam 开发者 ?? 335 吴沂章 ?? 318 林锃寒 一.引言 编写目的 明确MathExam ...

  6. 小学生最爱的计算题生成器

    最可爱的标题 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 • Estimate • 估计 ...

  7. 第三周1 小学生计算题的随机生成

    /* *Copyright (c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:text.cpp *作者:李德彪 *完成日期:2015年3月17日 *版本号: ...

  8. 小学计算题生成器横式(C语言版)

    #include <stdio.h> #include <stdlib.h> #include<math.h>int main(void) {float a;flo ...

  9. c语言编译小学生计算题,小学生基本运算习题-给小学生编写练习20以内加减法计算的c程序.要求:#61548 爱问知识人...

    /*有于网吧机器没有编译器,程序尚为调试,不过估计问题不大,而且没有做任何异常处理,增加可以以自己修改*/ #include #include #include #include void main( ...

  10. 懒人版小学生1-6年级计算题练习(口算练习)可直接电脑上答题或者打印题目

    [懒人版]小学生1-6年级计算题练习 欢迎使用 软件编程语言 软件功能 软件操作流程 下载地址 软件使用到的工具 欢迎使用 网上众多小学生计算题练习(小学生口算练习)软件使用起来都不是很方便.网上现有 ...

最新文章

  1. java二维数组从键盘更改_互换二维数组的行列。要求数组的行数、列数以及各元素均从键盘输入;输出互换前数组内容和互换后数组内容。(要求循环输入进行测试)Java...
  2. jdk、jre、jvm有什么区别?
  3. 前端开发神器 vscode 常用快捷键
  4. TutorialsTeacher 中文系列教程【翻译完成】
  5. easypoi导入合并单元格_1分钟不到就能合并100个Excel工作表,这功能太强大了!...
  6. ubuntu 的问题,我一个人使用,却显示两人登录?
  7. cordova与android通信_使用Cordova插件实现两个app之间的相互调用和通讯
  8. YYKit系列之——YYModel使用
  9. virtualxposed使用教程_VirtualXposed
  10. 10个提高工作效率的超实用工具
  11. python画成绩正态分布图_数据分析基础(1)——神奇的正态分布
  12. IP地址后面/24/26/27/28/29/30网关数量分别是多少?如何计算?
  13. linux修改默认22端口失败,【原创文章】修改亚马逊AWS EC2 LINUX系统SSH默认22端口失败的原因和解决办法...
  14. 纽约州立计算机科学,纽约州立大学布法罗分校计算机科学computer science专业排名第176~200名(2020THE泰晤士高等教育世界大学排名)...
  15. 教师计算机培训考勤表,之江汇平台的使用-信息技术培训
  16. Mobile-Former来了!微软提出:MobileNet+Transformer轻量化并行网络
  17. mac下git使用ssh时候的一个小问题:Permission denied (publickey). fatal: Could not read from remote repository.
  18. anychat-极简纯净的websocket聊天插件推荐
  19. 解析html网页原理,深入浅出浏览器渲染原理
  20. pyinstaller打包——将多个py文件+图片打包(最细教程)

热门文章

  1. 爬虫练习生|爬虫前奏(爬虫介绍、工具的安装、爬虫分类、爬虫须知)
  2. 在小写与大写之间加下划线
  3. Java进阶诀窍httpwww.china-pub.com44147
  4. 微信云开发实现点赞收藏评论功能
  5. android手机微信收藏功能实现,微信小程序实现收藏功能
  6. Socket bind() error: invalid operands to binary expression
  7. html5gps定位经纬度,html5 定位 获得当前位置的经纬度
  8. 学以致用——Java源码——抛双骰儿游戏综合评估(游戏步数与胜率的关系,公平性,平均步数等)(Game of Craps Evaluation)
  9. (7)数据分析-秩和检验
  10. ios 纯代码怎么适配ipad_关于ios 适配ihone 和 ipad方式