版权声明:本文为博主原创文章,欢迎转载,并请注明出处。联系方式: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开发小学二年级口算自动出题程序的更多相关文章

  1. 悲催的二柱子们做小学二年级四则运算题(Javaweb)

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  2. Python开发(二):列表、字典、元组与文件处理

    Python开发(二):列表.字典.元组与文件处理 一:列表二:元组三:字典四:文件处理 一:列表   为什么需要列表 可以通过列表可以对数据实现最方便的存储.修改等操作.字符串是不能修改的,所以无法 ...

  3. python开发基础(二)运算符以及数据类型之bool(布尔值))

    # encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...

  4. python开发基础(二)运算符以及数据类型之dict(字典)

    # encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...

  5. python开发基础(二)运算符以及数据类型之tuple(元组)

    # encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...

  6. python开发基础(二)运算符以及数据类型之float(浮点类型)

    # encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...

  7. python开发基础(二)运算符以及数据类型之list(列表)

    # encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...

  8. python开发基础(二)运算符以及数据类型之str(字符串)

    # encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...

  9. python开发基础(二)运算符以及数据类型之int(数字)

    # encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...

随机推荐

  1. WPF 界面如何绑定Command

    WPF中,我们使用MVVM,在ViewModel中定义Command和其业务逻辑,界面绑定Command. 那么是不是所有的事件都可以定义Command呢,然后将业务全部放在ViewModel中呢? ...

  2. JavaScript 条件语句

    if语句     有些代码块只能在一定条件下运行,通过if.if else.else代码块,可以让你的代码按条件执行. // 控制流 var foo = true; var bar = false; ...

  3. python爬虫项目-爬取雪球网金融数据(关注、持续更新)

    (一)python金融数据爬虫项目 爬取目标:雪球网(起始url:https://xueqiu.com/hq#exchange=CN&firstName=1&secondName=1_ ...

  4. Asp.Net MVC @Html.TextBox 只允许输入数字问题

    转到Html.TextBox()看可以看出 Html.TextBox()方法,创建文本框[<input type="text"/>],并且可以带上name,value和 ...

  5. 【Dojo 1.x】笔记7 配置对象dojoConfig的内容1:has属性、加载器的属性

    说完了出身,即出身自dojo/_base/目录下的config模块,那就要好好讲讲这对象有什么可以写的属性了. 1. has属性 官方说是用于更好的特征检测的,具体有什么用现在还不得知. 例如: &l ...

  6. 如何开启红米手机4X的ROOT超级权限

    红米手机4X通过什么方法拥有了root权限?大家都清楚,Android机器有root权限,如果手机拥有了root相关权限,可以实现更强的功能,举个栗子大家公司的营销部门同事,使用大多数营销软件都需要在 ...

  7. Android下获取FPS的几种方法

    FPS(Frames Per Second)是关乎Android用户体验最为重要的指标之一,而在VR中更是如此.为了评估VR系统.VR SDK及Unity应用的性能,通常会实时获取FPS并将其显示出来 ...

  8. 关于MongoDB时间格式转换和时间段聚合统计的用法总结

    一 . 背景需求 在日常的业务需求中,我们往往会根据时间段来统计数据.例如,统计每小时的下单量:每天的库存变化,这类信息数据对运营管理很重要. 这类数据统计依赖于各个时间维度,年月日.时分秒都有可能. ...

  9. C#中Activator.CreateInstance()方法用法分析

    本文实例讲述了C#中Activator.CreateInstance()方法用法. Activator 类 包含特定的方法,用以在本地或从远程创建对象类型,或获取对现有远程对象的引用. C#在类工厂中 ...

  10. Windows server2008R2 企业内部搭建虚拟专用网络服务

    VPN英文全称是“Virtual Private Network”,就是“虚拟专用网络”.可以远程帮助用户.分公司.商业伙伴及供应商同公司的内部网建立可信的安全连接,用于经济有效地连接到商业伙伴和用户 ...