(1)需求分析:

  a.  通过设计出自动生成小学四则运算题目的命令行程序,方便教师提取和打印,同时,随机生成的题目不能超出小学生的认识范围。

  b.  四则运算加减乘除,采用两个随机数,由于不能出现负数,所以在对两个随机数进行减法运算的时,需要进行比较大小,而除法在运算中,除数不能取0。

(2)定义函数:

  a.  用def text()实现随机生成四则运算,最后输出算式并返回正确答案。

  b.  用主函数确定所需计算题目的数量,并且调用text函数。

(3)具体编码:

import random
#text函数
def test():
    sym = ['', '', '×', '÷']
    result =[]
    m=0
    while m<=(n-1):
        sym = ['', '', '×', '÷']
        f= random.randint(0, 3)
        n1 = random.randint(1, 20)
        n2 = random.randint(1, 20)
        result = 0
        if f== 0:#加法
            result  = n1 + n2
        elif f == 1:#减法,要先比较大小,防止输出负数
            n1, n2 = max(n1, n2), min(n1, n2)
            result  = n1 - n2
        elif f== 2:#乘法
            result  = n1 * n2
        elif f == 3:#除法,要比较大小,并循环取整除
            n1, n2 = max(n1, n2), min(n1, n2)
            while n1 % n2 != 0:
                n1 = random.randint(1, 10)
                n2 = random.randint(1, 10)
                n1, n2 = max(n1, n2), min(n1, n2)
            result  = int(n1 / n2)
        print(n1, sym[f], n2, '= ', end='')
        j= input()
        s= int(j)
        if s== result :
            print('right')
        else:
            print('error ,the answer is', result )
        m=m+1


#主函数
print('下面进行四则运算')
print('输入所需要的题目数量')
n=int(input())
test()

 

(4)升级

  a.时间:计算做完四则运算所需的时间。

import time
#开始计时
tic = time.time()
#(此处为需要计时的模块)
toc = time.time()#计时结束
shijian = toc-tic
print(shijian)

完整代码为:

import random
import time 

def test():
    sym = ['', '', '×', '÷']
    tic = time.time()
    result =[]
    m=0
    while m<=(n-1):
        sym = ['', '', '×', '÷']
        f= random.randint(0, 3)
        n1 = random.randint(1, 20)
        n2 = random.randint(1, 20)
        result = 0
        if f== 0:#加法
            result  = n1 + n2
        elif f == 1:#减法,要先比较大小,防止输出负数
            n1, n2 = max(n1, n2), min(n1, n2)
            result  = n1 - n2
        elif f== 2:#乘法
            result  = n1 * n2
        elif f == 3:#除法,要比较大小,并循环取整除
            n1, n2 = max(n1, n2), min(n1, n2)
            while n1 % n2 != 0:
                n1 = random.randint(1, 10)
                n2 = random.randint(1, 10)
                n1, n2 = max(n1, n2), min(n1, n2)
            result  = int(n1 / n2)
        print(n1, sym[f], n2, '= ', end='')
        j= input()
        s= int(j)
        if s== result :
            print('right')
        else:
            print('error ,the answer is', result )
        m=m+1
    toc = time.time()
    shijian = toc-tic
    print('你所花的时间为:')
    print(shijian)

#主函数
print('下面进行四则运算')
print('输入所需要的题目数量')
n=int(input())
test()

结果如图所示:

个人PSP作业升级版_四则运算

 

 

  b.   四则运算复杂化:加入了括号和分数等数学符号,使得程序的功能更加齐全。

import random
import profile
from fractions import Fraction
import time

operation = ['+', '-', '*', '/']   #四则运算的符号
global f
question = []
result = []
answer = []

def integer(n):
    ch = []                               #存储表达式
    number = random.randint(1, 4)         #随机产生表达式的数量
    for i in range(number):
        rand = random.randint(0, 1)       #随机产生0和1 判断是否使用括号
        a = func_integer(number)          #调用表达式产生函数,产生表达式
        if rand == 0:
            op = operation[random.randint(2,3)]    #产生*,/来连接有括号的表达式,避免产生+,—
            rand = random.randint(0, 1)            #随机产生0和1 判断是否使用内嵌括号或外嵌括号
            if i != number - 1:                    #避免开始和结尾用无意义的括号
                if rand == 0:
                    ch.append('(')
                    ch.append(a)
                    ch.append(op)
                    ch.append(random.randint(1,10))
                    ch.append(')')
                    ch.append(operation[random.randint(0, 1)])
                else:
                    ch.append(a)
                    ch.append(operation[random.randint(0, 3)])
            else:
                ch.append(a)
                ch.append(operation[random.randint(0, 3)])
        else:
            ch.append(a)
            ch.append(operation[random.randint(0, 3)])

    f = ''
    for k,i in enumerate(ch):             #把列表中的所有值用f一个个连起来
        if k != len(ch)-1:
            f += str(i)
    result_integer(f, n)      #调用输出函数

def func_integer(number):
    f = ''
    ch = []
    rand = random.randint(0, 1)  #选择内嵌或外嵌括号
    if number != 1:         #避免一个表达式也产生括号
        if rand == 0:
            ch.append('(')
            op = operation[random.randint(0, 1)]
            ch.append(random.randint(1, 10))
            ch.append(op)
            ch.append(random.randint(1, 10))
            ch.append(')')
        else:
            op = operation[random.randint(0, 3)]
            if op == '/':
                a = random.randint(1, 10)
                ch.append(a)
                ch.append(op)
                ch.append(random.randint(a, 10))
            else:
                ch.append(random.randint(1, 10))
                ch.append(op)
                ch.append(random.randint(1, 10))
    else:
        op = operation[random.randint(0, 3)]
        if op == '/':
            a = random.randint(1, 10)
            ch.append(a)
            ch.append(op)
            ch.append(random.randint(a, 10))
        else:
            ch.append(random.randint(1, 10))
            ch.append(op)
            ch.append(random.randint(1, 10))
    for i in ch:       #把产生表达式当成一个整体
        f += str(i)
    return f

def result_integer(f, m):
    try:
        n = eval(f)
        n = Fraction('{}'.format(n)).limit_denominator()  # 把表达式的结果转成分数
        if n > 0:  # 判断结果是否大于0,否则重新产生表达式
            #print('题目:')
            question.append(f)
            result.append(n)
            #print('请输出答案:')
            #x = Fraction('{}'.format(eval(input()))).limit_denominator()
        else:
            integer()
    except:
        integer(m)

if __name__ == '__main__':
    print('本次测试的题目数量:')
    n = eval(input())
    cor = 0
    for i in range(n):
        integer(n)
    print('题目:')
    for k, i in enumerate(question):
        print(k + 1,':',i,'=')
    print('请输入你的答案:')
    #开始计时
    tic = time.time()
    for i in range(n):
        print('第{}题:'.format(i + 1))
        x = Fraction('{}'.format(eval(input()))).limit_denominator()
        if x == result[i]:
            print('{}:Ture'.format(i + 1))
            cor += 1
        else:
            print('{}:False'.format(i + 1))
            print('正确的答案为:',result[i])
toc = time.time()#计时结束
shijian = toc-tic
print("本次测试答对了 "+str(cor)+" 题目")
print("正确率:"+str(cor/n))
print('你所花的时间为:')
print(shijian)

结果如下图所示:

个人PSP作业升级版_整除_02