团队作业--结对编程

涂家瑜 涂家瑜     2022-09-24     596

关键词:

组员

    涂家瑜  201422122031

    陈宏辉  201421122020

 代码地址:https://coding.net/u/rovinglight/p/sums-generator/git

 

本次作业的完成内容

    本次作业基于个人作业一的四则运算程序做增量开发,新增了如下功能

    1、添加了用户界面,并带有切换语言和计时的功能

    2、新增加了四则运算计算器

    3、记录做题的正确率

 

需求分析

    这是一个简单的四则运算计算器,不但可以生成四则运算的式子,也可以计算除了随机生成四则运算的式子。有时候我们做练习题不仅需要得到题目的正确率,还需要在限定时间内完成练习,这时候需要这个程序有一个计时功能,在开始练习的时候开始计时,到练习完成计算所花时间。

 

思维导图

代码展示:

(基于python计算四则运算

#!/usr/bin/python
# coding=utf-8


# 本程序由用户输入一个表达式字符串,然后计算这个表达式的值
# 表达式是一个四则运算表达式,可以包含^操作符
# 注意:乘方用^运算符,支持".3"这种表示小数的形式。负数需要用括号扩起来

# 思路:利用栈的方法,先将表达式从中缀表达式转换成后缀表达式,再进行计算



def isNum(value):
    try:
        value + 1
    except TypeError:
        return False
    else:
        return True


def cal(strexpp):
    '''
    本函数由一个四则运算表达式字符串计算表达式的值
    strexpr为一个四则运算表达式,如果这个表达式正确,则函数返回这个表达式的值,否则返回NULL
    '''

    seqLegalChar = (
    '+', '-', '*', '/', '(', ')', '^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.')  # 表达式中合法的字符集

    seqOpr = seqLegalChar[0:7]  # 运算符序列
    seqOpa = seqLegalChar[7:18]  # 操作数序列

    # 表达式为空,则返回Null
    if len(strexpp) == 0: return Null

    # 去掉字符串中的空格,使用replace(old,new[,max])
    strexpr = strexpp.replace(' ', '')

    # 表达式包含不合法的支付,则返回Null
    for ch in strexpr:
        if ch not in seqLegalChar:
            return Null

    # 将表达式变成一个数字和符号的序列
    numstart = -1  # 标识数字的起始位置为numstart+1
    seqExpr = []  # 表达式序列
    for i in range(0, len(strexpr)):  # 将表达式的数字和符号依次输出到序列
        # 本位置指向的是一个操作数,
        if (strexpr[i] in seqOpa):
            if numstart < 0:  # 如果numstart小于0,使numstart指向本位置数字开始的地方
                numstart = i
            if i == len(strexpr) - 1:  # 已读取到表达式最后一个字符,将数字转换后入列
                seqExpr.append(float(strexpr[numstart:len(strexpp)]))
            continue

            # 本次读取的字符是一个符号
        if numstart >= 0:  # 如果numstart大于0,则说明numstart与本位置之间是数字,需要提取数字。如果numstart==-1,则表明中间都是符号
            seqExpr.append(float(strexpr[numstart:i]))  # 中间是数字,将数字转换后输出到序列
        seqExpr.append(strexpr[i])  # 将本次符号输出到序列
        numstart = -1  # 将numstart指针修改为本次位置

    # 将中缀表达式转换成为后缀表达式
    seqPosfix = []  # 后缀表达式序列,完成后seqPosfix中即为后缀表达式
    stkOpra = []  # 转换中所需要的符号栈
    for op in seqExpr:
        if isNum(op):  # 如果是数字,则直接输出到后缀表达式序列
            seqPosfix.append(op)
            continue
        if not stkOpra:  # 如果符号栈为空,则直接压入第一个符号
            stkOpra.append(op)
            continue
        if op == ')':  # 如果是')',需要匹配以前的'(',栈顶元素依次出栈输出,知道'('为止
            while stkOpra[len(stkOpra) - 1] != '(':
                seqPosfix.append(stkOpra.pop())  # 将'('弹出
            stkOpra.pop()
        elif op in ['+', '-']:  # 如果是'+'或者'-',优先级最低
            while (stkOpra and (stkOpra[len(stkOpra) - 1] != '(')):
                seqPosfix.append(stkOpra.pop())
            stkOpra.append(op)
        elif op in ['*', '/']:  # 如果是'*','/',栈顶是'*','/','^'则弹出,否则入栈
            while (stkOpra and (stkOpra[len(stkOpra) - 1] == '^')):
                seqPosfix.append(stkOpra.pop())
            stkOpra.append(op)
        elif op in ['^', '(']:  # 如果是'^'和'(',优先级最高,则直接入栈
            stkOpra.append(op)
    while stkOpra:  # 到最后如果符号栈不为空,则将符号栈的符号全部出栈
        seqPosfix.append(stkOpra.pop())

    # 根据后缀表达式seqPosfix计算值
    stkNumb = []  # 装载操作数和值的栈
    for op in seqPosfix:
        if isNum(op):
            stkNumb.append(op)  # 如果是数字,直接进栈
            continue
        p1 = stkNumb.pop()  # 弹出两个操作数
        p2 = stkNumb.pop()
        if op == '^':  # 根据运算符计算操作数的值
            p = p2 ** p1
        elif op == '*':
            p = p2 * p1
        elif op == '/':
            p = p2 / p1
        elif op == '+':
            p = p2 + p1
        elif op == '-':
            p = p2 - p1
        stkNumb.append(p)  # 将计算结果入栈

    return stkNumb.pop()  # 最后的结果


expr = input("请输入一个四则运算表达式(负数需要用括号扩起来,乘方用'^'运算符):")
res = cal(expr)
if not res:
    print("你输入的四则运算表达式包含有不正确的字符,请检查后重新输入。")
else:
    print("结果为:%f" % res)

 

代码演示

 

 

小结感受

    这次作业对于我来说并不算成功,没能及时在交作业前把python学到django的部分,所以网页上还没办法掉我我做的部分只能先把编译器上运行成功的先拿来演示,这也是我后面需要在加快脚步避免影响到下一次作业出现同样的问题。个人认为结对变成对提高手写能力是有很大的帮助的,从开学python懵懵懂懂到现在能写出一个四则运算是一个很明显的进步,但是进度还是太慢了。第一次次作业就做的很吃力。这次又需要在上次的基础上优化,时间也是不太够,还需要其它事情要做,所有没使用django。程序的基本功能在这个程序有体现,由于是控制台,有一些操作无法实现。

 

 

评价合作伙伴

    陈宏辉和我在大学期间有过多次课程设计的组队经验,他很好的帮助完成了很多功能的实现,他知道我在尝试新的语言完成作业会比较吃力,所以他也用他的强项来弥补我在python编程上经验不足的问题

 

展示PSP

 

PSP2.1 

Personal Software Process Stages

Time Senior Student

Time 

Planning

计划

18

29

· Estimate

估计这个任务需要多少时间

20

28

 Development

开发

552

573

 ·Analysis

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

40

35

· Design Spec

生成设计文档

35

30

· Design Review

设计复审

18

26

 · Coding Standard

代码规范

19

15

· Design

具体设计

46

35

· Coding

具体编码

264

263

· Code Review

代码复审

40

26

 · Test

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

40

50

 Reporting

报告

63

84

 

测试报告

10

8

 

计算工作量

28

20

 

并提出过程改进计划

15

17

 

第一次结对作业(代码片段)

...:参考文章:C++代码审查二、对伙伴的评价我的队友是我团队的伙伴,虽然我知道老师说尽量不去选择一个团队的同学,但是当我准备去找结队伙伴的时候,班上的同学都已经基本找完队友了,他们又不想分开已经结好队友,正... 查看详情

个人附加作业

...些问题,你认为的合理评分准则是怎样的(个人/结对/团队算三个)答:个人:我认为个人评分的环节还是比较合理的,因为我自己的基础不好,完成作业的时候也没有讨论的对象,所以评分不能跟结对和团队的相比。 结... 查看详情

结对编程作业

结对编程作业(黄金点游戏)我的角色:驾驶员。结对编程伙伴:王香友(领航者)。1.源代码已上传到coding.net中,网址如下: https://coding.net/u/Qbj/p/STAR-COD/git/blob/master/huangjiandianyouxi2.结对编程作业总结、过程图片、运行结果... 查看详情

课后作业-阅读任务-阅读提问-3

...中讲的敏捷流程变化大,效率高,但我感觉这只适用于小团队,人少才好管理,如果很多人的团队,能否在用敏捷流程?4、如何避免产品开发后期有重大修改?5、如何进行风险管理?能否用更多的例子来讲解它。 查看详情

结对编程项目作业

 结对编程项目作业内容:成员0:    学号:2015035107153    姓名:吕爽成员1:    学号:2015035107155    姓名:陶丽爽结对编程项目作业名称:四则运算出题器。选择该结对编程项目... 查看详情

作业结对编程

作业结对编程一结对成员陈颖锋201421122113许鸿洋201421122114项目开发的coding.net地址:https://coding.net/u/ricardoCYF/p/zuoye3/git二项目描述一个小组中的两个同学选取比较优秀的作业1 (两个人的都独立完成了), 把它作为本次作业的... 查看详情

结对编程作业

  最近在写结对编程,通过写结对编程作业了解了在将来的工作会是什么样。在结对编程中使我了解到结对编程的优点。由于我的编程能力能比我队友好一点,所以本次由我来进行编程,我队友进行复查。  本次的作业是黄... 查看详情

结对编程作业

软件工程网络15结对编程作业1.链接学号:201521123069博客链接:http://www.cnblogs.com/kzq-java-markdown/学号:201521123074博客链接:http://www.cnblogs.com/guzhiling/结对编程码云项目链接:https://gitee.com/guzhiling/software_engineering/tree/mas 查看详情

结对编程项目作业0

标题:结对编程项目作业内容:成员0:学号:2015035107003 姓名:鞠牧孜 成员1:学号:2015035107010 姓名:郑月 结对编程项目作业名称:五子棋游戏 选择该结对编程项目原因:因为五子棋游戏是一种受大众喜欢的一款游戏,其... 查看详情

结对编程作业

结对编程成员:王向阳,彭雪峰(http://www.cnblogs.com/PPXXFF/)驾驶员:王向阳领航员:彭雪峰代码链接https://coding.net/u/K_sun/p/code/git/blob/master/goldGame总结:通过此次的结对编程,更加了解到结对编程的好处,通过结对编程可以使自己... 查看详情

2021秋软工实践第一次结对编程作业

这个课程属于哪里构建之法-2021秋-福州大学软件工程这个作业要求在哪里2021秋软工实践第一次结对编程作业这个作业的目标学习体验结对编程,学习设计原型模型学号031902110结对小伙伴学号031902114作业博客地址作业博客2021... 查看详情

结对编程项目作业4

https://gitee.com/Chenggf/JianYiJiSuanQi 新功能:增加了删除功能  查看详情

结对编项目作业

成员0:学号:2015035107095姓名:黄楷铂成员1:学号:20150351020姓名:邓清峰结对编程项目作业名称:自然语言进行数据库查询系统选择该结对编程项目原因:有一些相关的编程经验。 查看详情

结对编程作业

一、角色分配  驾驶员:李良伟领航员:姜懿芙二、编程过程与运行结果1.登入页面 2.游戏页面 3.三、程序代码代码已提交至https://coding.net/u/auroraif/p/201610180/git三、心得体会   较我相比,李良伟的编程水平与... 查看详情

结对编程项目作业2-结对编项目设计文档

航空购票系统成员:刘铭,李德帅开发环境:Androidstdio功能:        查看详情

结对编程作业

 这是第一次尝试结对编程,在本次结对编程作业中为了更好地体会它的好处和特点,我和我的搭档分别扮演了驾驶员和领航者的角色。 作为驾驶员:在我编程的过程中,出现了一些小问题,比如忘加分号,这些小问题可... 查看详情

结对编程团队展示1

 团队展示1.队名:xjbz2.队员学号:  郭晓迪201421122075(组长)、 钟平辉201421122071、曾瑞201421122089、徐航201421122086、柳政宇2014211220853.团队项目描述:  在前期个人、结对练习的基础上,实现基于Web或手机平台的四则... 查看详情

结对编程项目作业5

结对成员:  学号:201503510077 董馨遥  学号:2015035107084 杨璐结对成员合照:假设这里有一张照片程序运行方法:首先有python2.7.5,打开文件直接运行就可以程序运行示例及运行结果:其他附加内容:项目地址链接https://gitee.com... 查看详情