zoukankan      html  css  js  c++  java
  • 个人作业1——四则运算题目生成程序(基于控制台)

    代码地址


     需求分析


    这次程序是写的是一个包括整数和真分数的四则运算出题器。出题器顾名思义,基本功能就是出题,然后在用户作答后进行正误判断、纠错等,最后在进行打分。


    功能设计


     题目生成器的主要功能及工作流程:

        1.根据用户输入的参数出题

        2.计算该题的答案

        3.用户作答

        4.比对答案作出正误判断并反馈

        拓展功能:

        1.对于用户错误的回答,会进行纠错并加入错题集。 输入calc.py -e *(*代表数字)即可重新练习*道错题

        2.支持带括号的多元复合运算


     设计实现


    程序通过Python3实现

    核心功能显然就是出题,题目的数据包括有整数和真分数,数字随机运算符也要随机,所以就调用random库进行各种随机

     1     digit = []
     2     sign = []
     3     sign_list = ['+','-','×','÷']
     4     mul = random.randint(1,3)
     5     for i in range(mul+1):
     6         int_temp = random.randint(1,10)
     7         a = random.randint(1,9)
     8         b = random.randint(a+1,10)
     9         fra_temp = Fraction(a,b)
    10         temp = random.choice([int_temp,fra_temp])
    11         digit.append(temp)
    12     for i in range(mul):
    13         temp = random.choice(sign_list)
    14         sign.append(temp)

    然后将随机抽取出的数字和运算符构造成多元复合运算式

     1 def ques_builder(digit,sign,sign_order):
     2     digit,sign = digit[:],sign[:]
     3     mul = len(sign)
     4     for i in range(mul):
     5         index = sign_order.index(1)
     6         if jug(index,sign):
     7             digit[index] = '('+str(digit[index])+sign[index]+str(digit[index+1])+')'        
     8         else:
     9             digit[index] = str(digit[index])+sign[index]+str(digit[index+1])    
    10         del digit[index+1]
    11         del sign[index]
    12         sign_order = [i-1 for i in sign_order]
    13         sign_order.remove(0)        
    14     ques = digit[0]+'='    
    15     return ques

    在构造多元复合运算式时对是否加括号进行判断

     1 def jug(index,sign):
     2     i,p = sign[index],sign[index-1]
     3     if (i=='+' or i=='-') and (('×'in sign) or ('÷'in sign)):
     4         return True 
     5     if index!=0:
     6         if (i=='+' or i=='-') and (p=='-'):
     7             return True
     8         if (i=='×' or i=='÷') and (p=='÷'):
     9             return True
    10     return False

    在用户输入后,当然还要对用户的答案进行判断以及纠错并加入错题集(黄色部分)

        answer = input()
        key = str(ques_key(digit,sign,sign_order))    
        if '/' in key:
            temp = answer.split('/')
            if len(temp)==1:
                answer = temp[0]
            else:
                answer = str(Fraction(int(temp[0]),int(temp[1])))
        if answer==key:
            print ('正确!')
            return False
        else:
            print ('不正确!',ques,key)
            err = {ques:key}
            error_gather(err)
            return True

    错题写入文本操作以及重新练习错题

     1 def error_gather(err):
     2     errfile = open('error','r')
     3     error = eval(errfile.read())
     4     errfile.close()
     5     error.update(err)
     6     errfile = open('error','w')
     7     errfile.write(str(error))
     8     errfile.close()
     9 
    10 def error_extract(errnum):
    11     errfile = open('error','r')
    12     error = eval(errfile.read())
    13     errfile.close()
    14     ques = list(error.keys())
    15     if len(ques)==0:
    16         print('目前没有错题')
    17         exit()
    18     for i in range(errnum):
    19         print(str(i+1)+': '+ques[i],end='')
    20         answer = input()
    21         if '/' in error[ques[i]]:
    22             temp = answer.split('/')
    23             if len(temp)==1:
    24                 answer = temp[0]
    25             else:
    26                 answer = str(Fraction(int(temp[0]),int(temp[1])))
    27         if answer==error[ques[i]]:
    28             print('正确!')
    29         else:
    30             print('不正确!')
    31         if i==len(ques)-1:
    32             print('已经没有错题了')
    33             exit()

     测试运行


     运行截图:


     PSP 


    Personal Software Process Stages

    Estimated Time(min)

    Actual Time (min)

    计划

    10

    6

    ·任务估计

    10

    6

    开发

    91

    124

    ·需求分析 (包括学习新技术)

    10

    8

    ·生成设计文档

    5

    6

    ·设计复审

    5

    3

    ·代码规范

    1

    1

    ·具体设计

    5

    8

    ·具体编码

    60

    83

    ·代码复审

    5

    2

    ·测试(自我测试,修改代码,提交修改)

    10

    13

    报告

    30

    24

    ·测试报告

    15

    18

    ·计算工作量

    10

    6

    ·提出过程改进计划

    5

    0


     总结 


    写程序是一个很有趣的过程

     

  • 相关阅读:
    CF949C Data Center Maintenance 题解
    P1438 无聊的数列 题解
    CF620E New Year Tree 题解
    结构体优先队列的定义
    CF464E The Classic Problem 题解
    CF427C Checkposts
    CF161D Distance in Tree 题解
    P4375 [USACO18OPEN]Out of Sorts G 题解
    SCI, SCIE, 和ESCI的区别
    Matlab画图中图的方法
  • 原文地址:https://www.cnblogs.com/jahowz/p/6496285.html
Copyright © 2011-2022 走看看