用Python开发小学二年级口算自动出题程序
版权声明:本文为博主原创文章,欢迎转载,并请注明出处。联系方式:460356155@qq.com
武汉光谷一小二年级要求家长每天要给小孩出口算题目,让孩子练习。
根据老师出题要求编写了Python程序自动出题,结果保存为txt文件,打印出来作为练习用,这样就不用每天繁琐地人工出题了,其中的数字用randint随机产生。
程序如下:
# -*- coding:utf-8 -*- __author__ = 'zhengbiqing 460356155@qq.com'
__doc__ = """武汉市光谷一小二年级数学口算自动出题程序 2017-05-31""" from random import randint sym = [' + ', ' - '] # 当前文件夹下创建口算题目文件math.txt
fobj = open('math.txt', 'w') def base_exei_oneline(pmin, pmax, mmin, mmax, multimin, multimax, divmin, divmax):
'''
pmin,pmax:加数、被加数最小最大值
mmin,mmax:减法转换成加法后,加数、被加数最小最大值
multimin,multimax:乘数、被乘数最小最大值
divmin,divmax:除法转换成乘法后,乘数、被乘数最小最大值
''' # plus:加法算式,rjust(2):按2位数右对齐
plus = str(randint(pmin, pmax)).rjust(2) + ' + ' + str(randint(pmin, pmax)).rjust(2) + ' =' # minus:减法算式
minus1 = randint(mmin, mmax)
minus2 = randint(mmin, mmax)
minussum = minus1 + minus2
minus = str(minussum).rjust(2) + ' - ' + str(minus1).rjust(2) + ' =' # multi:乘法算式
multi1 = randint(multimin, multimax)
multi2 = randint(multimin, multimax)
multi = str(multi1).rjust(2) + ' x ' + str(multi2).rjust(2) + ' =' # div:除法算式
div1 = randint(divmin, divmax)
div2 = randint(divmin, divmax)
divmulti = div1 * div2
div = str(divmulti).rjust(2) + ' /' + str(div1).rjust(2) + ' =' lineitem = [plus, minus, multi, div]
line = (18 * ' ').join(lineitem)
print line
fobj.writelines(line + '\r\n') # 4列x10行道加、减、乘、除基本题,每行加、减、乘、除题各1道
def base_exeicise():
for col in range(10):
base_exei_oneline(1, 20, 1, 50, 1, 9, 1, 9) # 类型1算式:... +/- ... +/- ...
def type1_str(summin=1, summax=100):
'''
summin,summax:允许总和的最小最大值
'''
sym1 = sym[randint(0, 1)]
sym2 = sym[randint(0, 1)] if sym1 == ' + ' and sym2 == ' + ':
sum_ = randint(summin + 2, summax)
first = randint(summin, sum_ - 2)
second = sum_ - first
second = randint(summin, second - 1)
third = sum_ - first - second
elif sym1 == ' + ' and sym2 == ' - ':
sum_ = randint(summin + 1, summax)
first = randint(summin, sum_ - 1)
second = sum_ - first
third = randint(summin, sum_)
elif sym1 == ' - ' and sym2 == ' + ':
first = randint(summin + 1, summax)
second = randint(summin, first)
third = randint(first - second, summax)
elif sym1 == ' - ' and sym2 == ' - ':
first = randint(summin + 2, summax)
second = randint(summin, first)
third = first - second
third = randint(summin, third) arithmetic = str(first).rjust(2) + sym1 + str(second).rjust(2) + sym2 + str(third).rjust(2)
print arithmetic
return arithmetic # 类型2算式:... +/- ... x ...
def type2_str(multimin=1, multimax=9, summin=1, summax=100):
'''
multimin,multimax:乘数、被乘数最小最大值
summin,summax:允许总和的最小最大值
'''
sym1 = sym[randint(0, 1)]
second = randint(multimin, multimax)
third = randint(multimin, multimax)
multi = second * third if sym1 == ' + ':
first = randint(summin, summax - multi)
else:
first = randint(multi, summax) arithmetic = str(first).rjust(2) + sym1 + str(second).rjust(2) + ' x ' + str(third).rjust(2)
print arithmetic
return arithmetic # 类型3算式:(... +/- ...) / ...
def type3_str(multimin=1, multimax=9, summin=1, summax=100):
'''
multimin,multimax:乘数、被乘数最小最大值
summin,summax:允许总和的最小最大值
'''
sym1 = sym[randint(0, 1)]
second = randint(multimin, multimax)
third = randint(multimin, multimax)
multi = second * third if sym1 == ' + ':
first = randint(summin, multi)
second = multi - first
else:
second = randint(summin, summax - multi)
first = multi + second arithmetic = '(' + str(first).rjust(2) + sym1 + str(second).rjust(2) + ')' + ' / ' + str(third).rjust(2)
print arithmetic
return arithmetic # 生成一套题
def oneday_homework():
# 基本题
base_exeicise()
# 类型1题
plus1 = type1_str()
plus2 = type1_str()
# 类型2题
plus3 = type2_str()
# 类型3题
plus4 = type3_str()
plus5 = type3_str() # 类型1、2题打印一行
line = [plus1, plus2, plus3]
lines = (29 * ' ').join(line)
print lines
fobj.writelines(lines + '\r\n' * 4) # 类型3题打印一行
line = [plus4, plus5]
lines = (29 * ' ').join(line)
print lines
fobj.writelines(lines + '\r\n' * 4)
fobj.writelines(r'用时______分钟 对______题(共45题) 家长签名:') # 一张A4纸上下各打印1份
oneday_homework()
fobj.writelines('\r\n' * 6)
oneday_homework()
fobj.close()
结果如下:

用Python开发小学二年级口算自动出题程序的更多相关文章
- 悲催的二柱子们做小学二年级四则运算题(Javaweb)
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- Python开发(二):列表、字典、元组与文件处理
Python开发(二):列表.字典.元组与文件处理 一:列表二:元组三:字典四:文件处理 一:列表 为什么需要列表 可以通过列表可以对数据实现最方便的存储.修改等操作.字符串是不能修改的,所以无法 ...
- python开发基础(二)运算符以及数据类型之bool(布尔值))
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...
- python开发基础(二)运算符以及数据类型之dict(字典)
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...
- python开发基础(二)运算符以及数据类型之tuple(元组)
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...
- python开发基础(二)运算符以及数据类型之float(浮点类型)
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...
- python开发基础(二)运算符以及数据类型之list(列表)
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...
- python开发基础(二)运算符以及数据类型之str(字符串)
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...
- python开发基础(二)运算符以及数据类型之int(数字)
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...
随机推荐
- Paypal 支付功能的 C# .NET / JS 实现
说明 最近用到了 Paypal 支付功能,英语一般般的我也不得不硬着头皮踩一踩这样的坑.经过近乎半个月的作,终于实现了简单的支付功能,那么首先就说说使用 Paypal 必定要知道的几点(当前日期 20 ...
- VSTO中Word的Range复制方式
VSTO中Word的Range复制方式 前言 VSTO是一套用于创建自定义Office应用程序的Visual Studio工具包,通过Interop提供的增强Office对象,可以对Word文档进行编 ...
- 史上最全python面试题详解(四)(附带详细答案(关注、持续更新))
python高级进阶-网络编程和并发(?道题详解) 1.简述 OSI 七层协议. OSI是Open System Interconnection的缩写,意为开放式系统互联. OSI七层协议模型主要是: ...
- TS学习随笔(三)->接口
终于来到了比较重要的知识,接口,有多重要呢,反正是很重要好啵 在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型. 那什么是接口呢,在面向对象语言中,接口(Interf ...
- 35.Odoo产品分析 (四) – 工具板块(6) – 午餐管理(1)
查看Odoo产品分析系列--目录 很多公司为都会为员工提供午餐.然而,公司内部的午餐需要适当的管理,特别是在员工或供应商数量非常重要的时候."午餐订单"模块的开发,使管理更容易,也 ...
- 命令行以及Python交互模式下python程序的编写
一.命令行模式 在Windows开始菜单选择“命令提示符”,就进入到命令行模式,它的提示符类似C:\>: 二.Python交互模式 在命令行模式下敲命令python,就看到类似如下的一堆文本输出 ...
- Neutron server的运行原理(未完待续)
1.Neutron server首先是一个web server, 对于http和https协议的报文进行响应. 2.Neutron server进程里面包含了一个WSGI 应用程序,以及不同模块的pl ...
- java新知识系列 二
1:数据库事务隔离以及事务隔离的级别 数据库事务隔离: 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别:为了解决更新丢失,脏读,不可重读(包括虚读和幻读)等问题在标准SQL规 ...
- 第三篇 Html-label标签
label标签 用户获取文字,使得关联的标签获取光标 <!DOCTYPE html> <html lang="en"> <head> <m ...
- Spring 事务与脏读、不可重复读、幻读
索引: 目录索引 参看代码 GitHub: 1.Spring 事务 2.事务行为 一.Spring 事务: Spring 的事务机制是用统一的机制来处理不同数据访问技术的事务处理. Spring 的事 ...