登录|注册|帮助中心|联系我们

导航
首页 综合百科 生活常识 数码科技 明星名人 传统文化 互联网 健康 影视 美食 教育 旅游 汽车 职场 时尚 运动 游戏 家电 地理 房产 金融 节日 服饰 乐器 歌曲 动物 植物
当前位置:首页 > 互联网

口算题生成器哪个好(口算题自动生成的小程序分享)

发布时间:2023年1月2日责任编辑:赵小果标签:小程序生成器

编程、写代码属于脑力劳动,做软件开发似乎是个制作虚拟之物的工作,但电脑程序大都是用途明确的,而且好的程序都是很实用。

学python也讲究学以致用,这点越早越好,我们现在就用python编个实用的程序来,不仅仅可以自家重复使用,而且可以发给别人用:给小学生生成口算题。

首先我们要把目标再具体、明确些 – 确定需求:

    ?生成百以内的加减法口算题 ?一次运行,连续出10题供使用的人练习,一题一题地做; ?如果有做错的题目,把它们打印出来给使用的人看

按照 自学Python进阶-把代码变成程序,软件 讲的方式,我们将把实现这些功能的代码全部放在一个文件里:mathExam.py。编写完成后,你就可以把这个文件重复运行,多次使用,也可以发给同学家、好友用。

为了提高程序出题的效果,我们期望每次题目都会有大变化 – 编程里常称为:随机。这个功能可以使用python基础库里的: random库,我们仅仅用里面的 randint 函数来随机生成一个整数。

这里我们提到了编程上一个新概念:函数。Python程序代码里的函数和数学书本上的函数,形式不同,但是功用十分类似。定义Python的一个函数格式如下:

def functionName(p1, p2, p3): ???functionBody ???return result

其中的 def 是python的关键字,说明我们要开始定义一个函数了,而后面的 functionName是函数名字 – 这部分你可以自己想个名字的,后面括号及其里面逗号隔开的部分就是函数的参数 – 它们可以在使用函数时临时一一提供,这样即能重复利用它下面的代码又能灵活变化,这正是函数的威力和魅力。

python代码

函数是所有现代编程语言里最基本、最重要的代码组织形式,代码重复利用方式, 它在所有的软件代码里几乎无处不在。前面提到的random库里面就提供好些随机生成数据的函数,我们下面会用到里面的 randint函数。

函数的 functionBody 部分就是我们要编码实现功能的地方,最后的 return result 就是把我们工作的结果返回给使用我们函数的人。

就像python自身的基础库里有很多函数一样,我们也可以在我们的mathExam.py里写多个函数,用函数来组织我们的代码。

首先 我们定义一个函数解决需求 1 的部分:

# 随机生成一个口算题及其正确结果的函数def genoneExercise(): ???opt = random.randint(0, 1) ?# 在0和1中随机取一个值 ???if opt == 1: ?# 如果随机得到的是 1,我们就生成加法口算题 ???????a = random.randint(1, 99) ???# 注意这里是 99 ???????b = random.randint(1, 100-a) ?# 这是保证百以内加法的地方 ???????result = a + b ???????return a, opt, b, result ???else: ?????# 如果随机得到的是 0,我们就生成减法口算题 ???????a = random.randint(1, 100) ???????b = random.randint(1, 100) ???????if a > b: ???????????result = a - b ???????????return a, opt, b, result ???????else: ???????????result = b - a ?# 这里是避免出现减数不够的地方 ???????????return b, opt, a, result

我们这个函数第一行的定义括号里是空的,意味着使用它时不需要提供参数。这个函数每使用一次,程序员的说法是调用一次,就生成一个满足上面需求1的结果。里面的 randint(start, end)函数,调用它可以获得一个数,这个数是从a开始(包含a)到b结束(包含b)的范围里随机选取的。

口算的题目和结果,我们存在一个元组里了,并用1,0来分别表示加,减运算。我们不能把+,-符号存在变量里,因为这两个符号在python语言里是特殊的类型符号,它们不同于数字或字符串类型的数据。所以随机的加减运算在记录、存储到变量里时我们转换了一下,同样下面输出提示时也要相应转换。

下面看看需求2里的代码长什么样:

def doExercises(times): ???random.seed(time.time()) ?????# 为了保障随机效果,每次运行时给随机系统一个变化的种子 ????errorList = [] ?????i = 0 ?????while i < times: ???????x, op, y, res = genoneExercise() ???????if op == 1: ???????????tip = str(x) + \\\' + \\\' + str(y) + \\\' = \\\' ???????else: ???????????tip = str(x) + \\\' - \\\' + str(y) + \\\' = \\\' ???????????ret = int(input(tip)) # 注意把输入的字符串类型转换成数学计算的整型 ???????if ret != res: ?????# 只有口算结果错了时才记录 ???????????record = (x, op, y, res, ret) ?# 把一次口算错误的信息组织成一个元组 ???????????errorList.append( record ) ???????????i = i + 1 ???return errorList

注意这个函数的定义我们指定了参数变量 times – 做口算题的次数,这样我们在调用的地方就可以方便地规定一次做多少道口算题目了。这里我们把口算的题目的提示转换成字符串的日常数学式子后,放在python内部自带的函数 input里当作参数:输出到屏幕上,并等待你输一个数字给程序。

我们把回答不对的口算题记录在一个列表变量里,做完后就是把这个变量里的记录信息输出来查看 – 完成需求3的功能:

# 打印口算结果def printErrors(errors): ???if len(errors) > 0: ???????print("口算错误的题目:") ???????for error in errors: ???????????a, op, b, result, yourInput = error ?????????????if op == 1: ????????????????????tip = str(a) + \\\' + \\\' + str(b) + \\\' = \\\' + str(result) + ", 你的错误答案:" + str(yourInput) ?????????????????else: ???????????????????????tip = str(a) + \\\' - \\\' + str(b) + \\\' = \\\' + str(result) + ", 你的错误答案:" + str(yourInput) ?????????????????print(tip) ?????else: ???????????print("恭喜你全部答对!")

可以看到,这个函数末尾没有return语句 – 我们不期望从它获取什么返回数据,让它把信息直接输出在屏幕上给我们看到即可。

到此我们把需求的3个功能都做完了,离可用起来还差一点:还必须把它们组织保持到文件里, 并在文件的执行入口里调用(还记得 自学Python进阶-把代码变成程序,软件 说明的地方么?)。

下面是代码完整地放到文件里的样子:

#!/usr/bin/env python3import time    # 这行代码让我们能够使用python基础库的time库里函数import random  # 这行代码让我们能够使用python生成随机数的函数# 随机生成一个口算题及其正确结果的函数def genoneExercise(): ?opt = random.randint(0, 1) ?# 在0和1中随机取一个值 ???if opt == 1: ?# 如果随机得到的是 1,我们就生成加法口算题 ???????a = random.randint(1, 99) ???# 注意这里是 99 ???????b = random.randint(1, 100-a) ?# 这是保证百以内加法的地方 ???????result = a + b ???????return a, opt, b, result ???else: ?????# 如果随机得到的是 0,我们就生成减法口算题 ???????a = random.randint(1, 100) ???????b = random.randint(1, 100) ???????if a > b: ???????????result = a - b ???????????return a, opt, b, result ???????else: ???????????result = b - a ?# 这里是避免出现减数不够的地方 ???????????return b, opt, a, result# 做口算练习, 做的题目个数通过函数参数指定def doExercises(times): ???random.seed(time.time()) ?# 为了保障随机效果,每次运行时给随机系统一个变化的种子 ???errorList = [] ???i = 0 ???while i < times: ???????x, op, y, res = genoneExercise() ???????if op == 1: ?????tip = str(x) + \\\' + \\\' + str(y) + \\\' = \\\' ???????else: ???????????tip = str(x) + \\\' - \\\' + str(y) + \\\' = \\\' ???ret = int(input(tip)) ?# 注意把输入的字符串类型转换成数学计算的整型 ????if ret != res: ?????# 只有口算结果错了时才记录 ????????record = (x, op, y, res, ret) ?# 把一次口算错误的信息组织成一个元组 ???????????errorList.append( record ) ???i = i + 1 ?return errorList# 打印口算结果def printErrors(errors): ???if len(errors) > 0: ???????print("口算错误的题目:") ???????for error in errors: ?????a, op, b, result, yourInput = error ???????????if op == 1: ???????????????tip = str(a) + \\\' + \\\' + str(b) + \\\' = \\\' + str(result) + ", 你的错误答案:" + str(yourInput) ???????????else: ???????????????tip = str(a) + \\\' - \\\' + str(b) + \\\' = \\\' + str(result) + ", 你的错误答案:" + str(yourInput) ???????????print(tip) ???else: ???????print("恭喜你全部答对!")# 本文件执行时的入口 - 运行时从这里开始if __name__ == \\\'__main__\\\':   ?errors = doExercises(10)     # 来 10个 口算题练练吧 :) ???printErrors(errors) ?????????# 告诉我口算结果如何...

试试把它用起来,你会遇到什么问题么?欢迎留言,下次一起来解决你的问题,完善我们的口算出题器。

其它知识推荐

溜溜百科知识网——分享日常生活学习工作各类知识。 垃圾信息处理邮箱 tousu589@163.com
icp备案号 闽ICP备14012035号-2 互联网安全管理备案 不良信息举报平台 Copyright 2023 www.6za.net All Rights Reserved