四则运算

Posted kriswang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四则运算相关的知识,希望对你有一定的参考价值。

代码地址:https://github.com/kriswang10/kriswang10.github.io/blob/master/calculate.py

    首先拿到题目的思路比较乱,整理了一下分成两大块,一块用于随机生成一道随机计算题,另一块则由用户自己要求题目数量,由系统随机生成。

由于是给小学生的题目,将生成函数分为两类,一类为生成整数型的四则运算为newint()函数,另一类则是分数型的为newfra()函数。其中整数型的数字范围在0-20,分数型则在

0-10取分数,而且所有运算都先通过比较大小来避免产生负数。

   主函数则先由用户选择进行哪块来达成需求,为降低难度,产生的随机题目会尽量出现更多的整数型计算,也由随机数来决定,用户可以在输入0000后退出程序。

以下为源代码

import time
def newint():
    sym=[‘+‘,‘-‘,‘ב,‘÷‘]
    fh=random.randint(0,3)
    n1=random.randint(1,20)
    n2=random.randint(1,20)
    result=0
    if fh == 0:
        result=n1+n2
    elif fh == 1:
        n1,n2=max(n1,n2),min(n1,n2)
        result=n1-n2
    elif fh == 2:
        result=n1*n2
    elif fh == 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[fh],n2,‘=‘,end=‘ ‘)
    return result

def newfra():
    sym=[‘+‘,‘-‘,‘ב,‘÷‘]
    fh=random.randint(0,3)
    t1=random.randint(1,10)
    t2=random.randint(t1,10)
    n1=Fraction(t1,t2)
    t1=random.randint(1,10)
    t2=random.randint(t1,10)
    n2=Fraction(t1,t2)
    result=0
    if fh == 0:
        result=n1+n2
    elif fh == 1:
        n1,n2=max(n1,n2),min(n1,n2)
        result=n1-n2
    elif fh == 2:
        result=n1*n2
    elif fh == 3:
        n1,n2=max(n1,n2),min(n1,n2)
        result=n1/n2
    print(n1,sym[fh],n2,‘=‘,end=‘ ‘)
    return result

def newtest():
    sym=[‘+‘,‘-‘,‘ב,‘÷‘]
    n=int(input())
    result=[]
    m=0
    while m<=(n-1):
        fh = random.randint(0,4)
        if fh ==0:
            print(m+1,end=‘、‘)
            result.append(newfra())
            print(‘ ‘)
        else:
            print(m+1,end=‘、‘)
            result.append(newint())
            print(‘ ‘)
        m = m + 1
    m=0
    print(‘答案:‘)
    while m <=(n-1):
          print(m+1,‘、‘,result[m])
          m = m + 1


def main():
    print(‘1、四则运算‘)
    print(‘2、制作题库‘)
    n=int(input())
    if n == 1:      
        print(‘input"0000"to Quit‘)
        while True:
            fh = random.randint(0,4)
            if fh == 0:
                result=newfra()
                jg=input()
                if jg == ‘0000‘:
                    break;
                ans = Fraction(jg)
                if ans == result:
                    print(‘right‘)
                else:
                    print(‘error,the right answer is‘,result)
            else:
                result= newint()
                jg = input()
                if jg == ‘0000‘:
                    break;
                ans = Fraction(jg)
                if ans == result:
                    print(‘right‘)
                else:
                    print(‘error,the right answer is‘,result)
    if n==2:
        print(‘需要制作多少道题目:‘)
        newtest()

if __name__==‘__main__‘:
    main()

  

程序测试:

技术图片

技术图片

 

以上为程序的简单测试,未出现明显BUG或错误,以下为我用python自带的cProfile函数做的效能分析

 技术图片

 

 

 技术图片

技术图片

技术图片

当程序作出10000道题目时也迅速给出了结果,程序中的算法可能还有待提升,但基本满足要求且迅速。

PSP:

    预计耗时(分钟) 是实际耗时(分钟)
Planning 计划 20 20
Estimate 估计这个任务需要多少时间 / /
Development 开发 180 240
Analysis 需求分析 5 10
Design Spec 生成设计文档 / /
Design Review 设计复审(和同事审核设计文档) / /
Coding Standerd 代码规范(为目前的开发制定合适的规范) / /
Design 具体设计 5 10
Coding 具体编码 30 60
Code Review 代码复审 5 10
Text 测试(自测,修改代码,提交修改) 10 20
Reporting 报告 10 20
Text Report 测试报告 30 20
Size Measurement 计算工作量 5 5
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 5 5
Sum 合计 305 420
     


 

 

以上是关于四则运算的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中并行化以下代码片段?

20个简洁的 JS 代码片段

获取 badarith,[erlang,'+',[error,0],[],同时使用 Erlang 片段在 TSUNG 中执行算术运算

20个简洁的 JS 代码片段

四则运算

四则运算单元测试