# 结对作业

### PSP表格

PSP2.1 Personal Software Process Stages 预估耗时 实际耗时（分钟）
·Planning · 计划 36 40
· Estimate · 估计这个任务需要多少时间 25 40
·Development 开发 260 350
· Analysis · 需求分析 (包括学习新技术) 35 60
· Design Spec · 生成设计文档 35 55
· Design Review · 设计复审 60 120
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 15 30
· Design · 具体设计 45 60
· Coding · 具体编码 120 250
· Code Review · 代码复审 40 50
· Test · 测试（自我测试，修改代码，提交修改） 30 125
· Reporting · 报告 60 80
· Test Repor · 测试报告 25 20
· Size Measurement · 计算工作量 15 15
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 80
· 合计 861 1375

### 项目总览

#### main.py(主类)

def filePutContent(expr_set, ans_set, exp_file, ans_file):

main():

#### cal.py(计算类)

def formatString(formula):

class Cal:

​ def Calculate(op, left, right):

​ def judgeAnswer(ans, lists):

​ def transToProperFraction(self):

class Node:

​ def getFoumula(self):

class Tree:

​ def generateFoumula(self, num_range, number):

#### check.py(查重)

def getNumAndOp(formula):

def check(formula, form):

### 代码说明

#### 算式生成

        while i < number:
nodeList = [self.root]
for _ in range(degree):
node = random.choice(nodeList)
nodeList.remove(node)
node.op = random.choice(self.op_list)[0]
node.type = 2

node.left = Node()
nodeList.append(node.left)
node.right = Node()
nodeList.append(node.right)


            try:
for node in nodeList:
node.type = 1
num_type = random.choices(self.type_list)[0]
if num_type == 1:
node.number = random.randint(1, num_range)
else:
node.number = Fraction(random.randint(1, num_range), random.randint(1, num_range))


#### 计算流程

class Cal:
def Calculate(op, left, right):
if op == "+":
answer = left + right
elif op == "-":
answer = left - right
elif op == "*":
answer = left * right
elif op == "/":
answer = left / right
# 浮点数转换为分数形式
answer = Fraction(left) / Fraction(right)


def getAnswer(self):
if self.type == 2:
self.number = Cal.Calculate(self.op, self.left.number, self.right.number)
else:
return


#### 查重设计

num = 0
for num in range(0, i):
if Cal.transToProperFraction(self.root.number) == self.answerList[num]:
if check.check(formatString(self.root.getFoumula()), self.formList[num]): #存在返回T
num = -1
break


def check(formula, form):
formulaNewList, formulaOldList = getNumAndOp(formula)
if ' ＋ ' in formulaOldList or ' × ' in formulaOldList:
newList, oldList = getNumAndOp(form)
if formulaNewList.sort() == newList.sort():
return True
else:
return False


Exercises.txt

### 项目小结

1. 结对经验

​ 在结对编程的过程中，充分感受到了沟通的重要性，有的时候没有沟通好就会导致做一些无用功，我们在写子函数的过程中因为没有沟通好所以有些功能写重复了，浪费了很多时间。此外，在这次结对编程的过程中还体会到了代码规范的重要性，两个人的编程风格不一，在整合的时候就会遇到很多困难。

2. 结对感受

​ 虽然结对编程有时候没有一个人编程那么方便，但是在结对编程的过程中就不再是孤军奋战了，能够有一个人一起讨论题目，对于自己解决不了的问题可以通过伙伴的帮助一起解决。只要充分进行沟通，结对编程也没有原先想象中的那么麻烦，在与工作伙伴的磨合之下，工作效率会越来越高。

posted @ 2021-10-26 01:03  Altriaaaa  阅读(43)  评论(0编辑  收藏  举报