结对项目:四则运算

| 这个作业属于哪个课程 |https://edu.cnblogs.com/campus/gdgy/Networkengineering1834 |
| --------------- | --------------- | --------------- |
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11148 |
| 这个作业的目标 |实现一个自动生成小学四则运算题目的命令行程序 |

1.项目成员

姓名:廖冠乔 学号:3118005280
姓名:钟炜博 学号:3118005302
GitHub地址:https://github.com/zwb5/sizeyunsuan

2.PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 20
· Estimate · 估计这个任务需要多少时间 20 20
Development 开发 565 625
· Analysis · 需求分析 (包括学习新技术) 130 130
· Design Spec · 生成设计文档 60 60
· Design Review · 设计复审 60 60
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 15 15
· Design · 具体设计 30 30
· Coding · 具体编码 180 240
· Code Review · 代码复审 60 60
· Test · 测试(自我测试,修改代码,提交修改) 30 30
Reporting 报告 60 60
· Test Report · 测试报告 30 30
· Size Measurement · 计算工作量 10 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 20 20
Total · 合计 645 705

3.效能分析




4.设计实现过程

函数get_Parameter:获取命令行参数
random make类:随机生成数字和符号
calculate类:假分数转化为真分数,生成题目和答案,计算
主函数流程图:

查重流程图:


计算式生成流程图:

5.关键代码说明

def get_Parameter():                       # 命令行控制模块
    parser = argparse.ArgumentParser()
    parser.add_argument('-n', help='设置题目数量', type=int)  # 设置数目数量
    parser.add_argument('-r', help='设置数值范围', type=int)  # 设定题目数值范围
    return parser.parse_args()
    def get_Arithmeticl(self):  # 获得随机数字与符号
        symbol = []  # 符号
        numerical = []  # 数字
        syb = 0
        n = 1
        m = 0
        i = random.randint(1, 3)
        for x in range(i):
            # 四则运算符号随机生成
            sy = random.choice(['+', '-', '×', '÷'])
            if sy == '+' or sy == '-':
                syb += 10 ** (i - x - 1)
            else:
                syb += 2 * (10 ** (i - x - 1))
            symbol.append(sy)
        if self.r < 10:
            n = int(10 / self.r)
        if n == 1:
            while m <= i:
                numerical.append(Fraction(random.randint(1, self.r), random.randint(1, self.r)))
                m += 1
        else:
            while m <= i:
                nu = Fraction(random.randint(1, self.r * n), random.randint(1, self.r * n))
                if nu <= self.r:
                    numerical.append(nu)
                    m += 1
        return symbol, syb, numerical, i
    def save_result(self, filename, data):
        # filename为写入文件的路径,data为要写入数据列表.
        file = open(filename, 'a', encoding='utf-8')
        file.seek(0)
        file.truncate()  # 清空文件

        for x in data:
            x = '%s\n' % (x)
            file.write(x)
        file.close()

        # 保存为结果文件
        print('%s文件已保存' % filename)
def start():
    # 主函数
    args = get_Parameter()

    calculate = Calculate()  # 计算类

    if args.n:
        n = args.n
    if args.r:
        r = args.r

        Exercises, Answers = calculate.check_and_make_question(n, r)

        for x in range(n):
            Answers[x] = '%d. %s' % (x + 1, calculate.cover_digital(Answers[x]))

        print('已生成%d道题目\n题目数值范围:0-%d' % (n, r))

        calculate.save_result('Exercises.txt', Exercises)
        calculate.save_result('Answers.txt', Answers)

6.测试运行




7.项目小结

这一次结对项目是之前从来没有过的体验,第一次体验了合作编程,题目本身对我们来说有些困难,部分功能也没有
完全实现,但在结对过程中我们还是有所收获。我们能够及时交流互相的一些想法和意见,效率也有所提高,出现bug
也能及时交流并处理,最主要的是两个人能够取长补短,在研究代码的过程中也在相互学习,第一次结对编程难免会
有不足之处,希望能在以后的学习中加以改进。

posted @ 2020-10-12 22:59  zwb5  阅读(127)  评论(0编辑  收藏  举报