心算练习
- 写此程序的意义
- 所用到的库
-
- random库里面的部分常用函数
- 两位数的加减乘除运算
-
- 代码展示
- 运行结果
- 程序说明
- 程序中部分函数及代码说明
写此程序的意义
突然有一天,我发现自己的计算能力直线下降,突然意识到:由于大学课程少,作业又少,所以用到脑子的时候也很少,所以这2年半来耍的我脑子都快生锈了,思考问题的能力也直线下降,计算能力也直线下降。然后我就打算写个小东西来练练自己的计算能力,同时让自己多动动脑,省得它真的生锈了。再者也可以为我后面的毕业项目作出一定的准备。
所用到的库
datetime库、random库以及time库中的clock()函数
time库中的clock()函数:用于记录程序运行的时间,因为程序运行时间与使用者的计算时间比起来实在是微乎其微,所以系统运行时间可以被忽略,从而用得到的时间来作为使用者做计算所花费的时间
datetime库:用于获取系统的当前时间,然后用系统的当前时间来初始化随机数种子,从而得到想要的随机数
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL1ETMzUjMzYTMyITMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
random库:用于获取随机数
random库里面的部分常用函数
seed(a=None):初始化随机数种子,默认值为当前系统时间
random():生成一个[0.0, 1.0)之间的随机小数
randint(a, b):生成一个[a, b]之间的整数
getrandbits():生成一个k比特长度的随机整数
randrange(start, stop[, step]):生成一个[start, stop)之间以step为步长的随机整数
uniform(a, b):生成一个[a, b]之间的随机小数
choice(seq):从序列类型,例如从列表中随机返回一个元素
shuffle(seq):将序列类型中的元素随机排列,返回打乱后的序列
sample(pop, k):从pop类型中随机选取k个元素,以列表类型返回
两位数的加减乘除运算
代码展示
import datetime
from random import *
from time import clock
def ranNumber():
num1 = randint(10, 99)
num2 = randint(10, 99)
num0 = randint(1, 3)
return [num1, num2, num0]
def Calculation(number):
if number[2] == 1:
num = number[0] + number[1]
print("{} + {} = ?".format(number[0], number[1]))
elif number[2] == 2:
number.sort(reverse = True)
num = number[0] - number[1]
print("{} - {} = ?".format(number[0], number[1]))
elif number[2] == 3:
num = number[0] * number[1]
print("{} * {} = ?".format(number[0], number[1]))
elif number[2] == 4:
num = number[0] / number[1]
print("{} / {} = ? (保留三位小数)".format(number[0], number[1]))
num = round(num, 3)
return num
def judge(num):
result = int(input("请输入你的计算结果:"))
a = 5
while a != -1:
if result == num:
print("恭喜你,回答正确!")
a = -1
else:
result = int(input("很遗憾,回答错误!请重新作答:"))
def main():
clock()
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# print(now)
seed(now)
for i in range(10):
number = ranNumber()
num = Calculation(number)
judge(num)
print("你答对这10道题所用的时间是:{:.3f}s".format(clock()))
main()
运行结果
程序说明
此程序会随机产生10道题。但并不是所有题目一起产生,而是用户答对了前一道题之后,系统才会出现下一道题。要是用户回答错误,则系统会提示用户回答错误,要求用户重新作答,直至用户回答正确为止;若是回答正确,则系统会提示用户回答正确,并出现下一道题。当用户将10道题全部答对之后,系统会打印出用户答对这10道题所用的时间。
但是由于题目是随机出现的加减乘除运算,所以每道题难易不同,因此不能通过用户所用时间来判断用户的计算能力,而应该根据10道题的具体情况来判断用户的计算能力。
程序中部分函数及代码说明
1、main()函数:程序主函数,同时也是程序的入口函数。
2、seed()函数:初始化随机数种子。
3、2次调用clock()函数:
第一次:启动一个新的计时器;
第二次:返回启动计时器后的时间,即程序运行时间。
4、ranNumber()函数:用于获取3个随机数,然后返回一个列表。前两个是两个两位数,用于之后运算中,第三个是[1, 4]的随机整数,根据得到的整数来决定进行何种运算。
5、Calculation()函数:此函数用于计算。接受一个参数——ranNumber()函数所获得的随机数列表。然后在函数中对这两个数进行运算,最后将计算结果返回。
6、judge()函数:此函数用于判断。此函数接收一个参数——Calculation()函数所得到的计算结果。在此函数中,用户需要输入自己的计算结果,然后与传入的参数进行对比,若是相等,则告诉用户回答正确,此函数执行结束,然后回到循环中继续执行;若是不相等,则告诉用户计算错误,要求用户重新作答,直到用户回答正确为止。
7、number.sort(reverse = True):调用列表中的sort()函数,将列表number中的元素从大到小排列
8、now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"):获取系统当前时间