个人作业1——四则运算题目生成程序(基于控制台)python

代码仓库地址:四则运算

a.需求分析

  1. 教师通过软件随机生成自然数,真分数,假分数,且带有括号的,少于3个运算符的四则运算式,以文件形式发布给学生
  2. 学生们做完后将文件提交给教师,教师通过软件执行批改
  3. 批改结果以文件形式返回
  4. 要有万题级的出题解题能力

b.功能设计

基本功能:

运行程序后,通过选择题数和难度进行出题,题目文件和答案文件会生成在文件夹中,另会同时生成存放提交该次题目答案的文件夹,及存放批改结果的文件夹

c.设计实现

  1. 题目生成源码文件:createProblem.py
  2. 运算结果源码文件:caculation.py
  3. 批改源代码文件:Main.py
  4. 树源代码文件:binaryTree.py

d.代码说明

四则算式判重

将随机生成的中缀表达式转换成后缀表达式,然后再将后缀表达式按照一定规则建树:
若生成节点的对象是*或者+

  1. 左右子树的值不同,则数值大的作为左子树.
  2. 左右子树的值相同时,判断子树的运算符优先级大小,优先级大的作为左子树.
  3. 运算符优先级相同,判断子树下的左子树值得大小,数值大的作为左子树.
  4. 若为子树为一个为数字,一个为运算符,则运算符作为左子树.
  5. 若左右子树都为数字,则数值大的作为左子树.

根据这个规则,基本上包含了交换律可能出现的情况,将可以有交换律变换得到的表达式都转为一个统一的表达式。接着将该后缀表示式的HASH存入列表中,根据二分查找大幅度缩短判重时间。


    def createProblem(self, problemNumber):
        createPro = createProblem.create()
        file = open("Exercises.txt", "w")
        file2 = open("Answer.txt","w")
        hashList = []
        count = 0
        while count < problemNumber:
            problemList = []
            formula = createPro.createArithmetic()
            k = judgeEqual.judge()
            tree = k.createTree(k.translateSuffix(formula))
            btree = binaryTree.binaryTree()
            problemList = btree.outPutTree(tree, problemList)
            newproblem = ''
            for st in problemList:
                if st in ['`', '/', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '+', '-', '×', '÷']:
                    newproblem += st
            m = hash(newproblem)
            if m not in hashList:
                hashList.append(m)
                count += 1
                file.write(createPro.toString(formula) + '\n')
                file2.write(str(tree.value.toString())+'\n')
            else:
                continue
        file.close()
        file2.close()

e.测试运行

1142616-20180331203028846-1473741832.png

1142616-20180331203054288-619785442.png

1142616-20180331203231735-1961514695.png

1142616-20180331203255232-744544347.png

PSP2.1Personal Software Process StagesTime Senior StudentTime
Planning计划3015
Estimate估计这个任务需要多少时间4046
Development开发3580
Analysis需求分析 (包括学习新技术)47
Design Spec生成设计文档46
Design Review设计复审46
Coding Standard代码规范33
Design具体设计1012
Coding具体编码8080
Code Review代码复审310
Test测试(自我测试,修改代码,提交修改)315
Reporting报告910
测试报告21
计算工作量46
并提出过程改进计划33

转载于:https://www.cnblogs.com/aiwyx/p/8683927.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值