自动生成小学四则运算题目

Github项目地址:

https://github.com/luorun194154/-/find/master

题目要求
- 能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)
- 除了整数外,还要支持真分数的四则运算

psp表格
PSP2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 60 80
 Estimate 估计这个任务需要多少时间,并规划大致工作步骤 15 30
Analysis 需求分析 (包括学习新技术) 60 80
Design 具体设计 60 80
Coding 具体编码 600 900
test 测试(自我测试,修改代码,提交修改) 200 150

Postmortem & Process

Improvement Plan

事后总结 ,并提出过程改进计划 60 40
Summary 合计 1050 1360


实现代码

import random
import datetime
import argparse
import re
from fractions import Fraction

def OPT(up_limit=10, oper_num=2, oper_variety=4, has_fraction=True):
    '''
     * 设置参数

     * @param up_limit {int} 操作数数值上限

     * @param oper_num {int} 操作数个数

     * @param oper_variety {int} 运算符种类

     * @param has_fraction {bool} 是否带有分数
    '''
    parse = argparse.ArgumentParser()
    # 操作数数值上限
    parse.add_argument('--up_limit', type=int, default=up_limit)
    # 操作数个数
    parse.add_argument('--oper_num', type=int, default=oper_num)
    # 运算符种类
    parse.add_argument('--oper_variety', type=int, default=oper_variety)
    # 是否带有分数
    parse.add_argument('--has_fraction', type=bool, default=has_fraction)

    return parse.parse_args(args=[])

class GeneralFormular:
    '''
     * 生成算式
     
     * @param opt {OPT} 参数
    '''
    def __init__(self, opt):
        self.opt = opt

    # @profile
    def catFormula(self, operand1, operator, operand2):
        '''
        * 连接算式

        * @param operand1 {str} 操作数1
        
        * @param opertor {str} 运算符

        * @param operand2 {str} 操作数2

        * @return {str}
        '''

        return "{}{}{}".format(operand1, operator, operand2)

    # @profile
    def getRandomIntOperand(self):
        '''
        * 返回随机整数操作数
        
        * @return {int} 
        '''
        return random.randint(0, self.opt.up_limit)
    
    # @profile
    def getRandomFractionOperand(self):
        '''
        * 返回随机分数操作数
        
        * @return {str} 
        '''
        # 生成两个整数,一个作为分子,一个作为分母
        num01 = self.getRandomIntOperand()
        num02 = self.getRandomIntOperand()
        while num01 == num02 or num02==0:
            num02 = self.getRandomIntOperand()
        while num01 == 0:
            num01 = self.getRandomIntOperand()

        # 保证分数为真分数
        if num01 < num02:
            return str(num01) + "/" + str(num02)
        else:
            return str(num02) + "/" + str(num01)

    # @profile
    def getRandomOperator(self):
        '''
        * 返回随机运算符

        * @r



posted @ 2020-09-20 22:05  罗非鱼plus  阅读(120)  评论(0编辑  收藏  举报