第四周作业任务
一、理论学习
1、完成了《软件工程》第4、5章的学习
2、完成了《构建之法》讲义中“软件过程”和“团队中角色与合作”的学习
过程方法是系统的识别和管理组织内所使用的过程,以保证更有效的获得期望的结果。是一个组织和管理工作活动的有效手段,其目的是更好的为用户创造价值。管理过程,实现过程,支持过程是实现软件开发必不可少的步骤。软件过程是为了开发高质量软件而产生的活动,其中包括问题定义、需求开发、软件设计、软件构造和软件测试等一系列实现活动。软件开发过程中的模型包括瀑布模型、原化模型、迭代式模型和可转换模型。随着互联技术和应用的快速发展,软件开发过程面临着越来越多的挑战,这时候开发了现在比较流行的敏捷开发过程,采用增量和迭代的开发过程,强调团队额的紧密协作,是一种有效的开发过程方法。
在面对越来越复杂化的需求以及市场竞争日趋激烈的情况下,团队开发产生的合力更能发挥团队中每个人的优势,更有效率,更高品质的实现软件开发的过程。其中团队开发分为萌芽阶段、磨合阶段、散伙阶段、规范阶段以及创造阶段。经过正确的引导,一个团队在优秀领导人的带领下能绽放出比个人多得多的光芒来。
1 # -*- coding: utf-8 -*- 2 # Author: Lu Yao and Li Xiaohua 3 from sys import argv 4 from decimal import Decimal, getcontext, InvalidOperation 5 6 7 def del_blank(temp_exp): # 删除算式中的空格 8 no_blank = "" 9 for i in temp_exp: 10 if i != " ": 11 no_blank = no_blank + i 12 return no_blank 13 14 15 def priority(operator_1, operator_2): # 判断运算符的优先级 16 priority_array = ( 17 # '+' '-' '*' '/' '(' ')' '^' '#' 18 ('>', '>', '<', '<', '<', '>', '<', '>'), # '+' 19 ('>', '>', '<', '<', '<', '>', '<', '>'), # '-' 20 ('>', '>', '>', '>', '<', '>', '<', '>'), # '*' 21 ('>', '>', '>', '>', '<', '>', '<', '>'), # '/' 22 ('<', '<', '<', '<', '<', '=', '<', ' '), # '(' 23 ('>', '>', '>', '>', ' ', '>', '>', '>'), # ')' 24 ('>', '>', '>', '>', '<', '>', '>', '>'), # '^' 25 ('<', '<', '<', '<', '<', ' ', '<', '=') # '#' 26 ) 27 operator_num = { 28 '+': 0, 29 '-': 1, 30 '*': 2, 31 '/': 3, 32 '(': 4, 33 ')': 5, 34 '^': 6, 35 '#': 7 36 } 37 38 return priority_array[operator_num[operator_1]][operator_num[operator_2]] 39 40 41 def operation(num_1, num_2, operator): # 定义两个数的基本运算 42 if operator == '+': 43 result = num_1 + num_2 44 elif operator == '-': 45 result = num_1 - num_2 46 elif operator == '*': 47 result = num_1 * num_2 48 elif operator == '/': 49 if num_2 == 0: 50 result = "VALUE ERROR" 51 else: 52 result = num_1 / num_2 53 elif operator == '^': 54 if num_1 == 0 and num_2 == 0: 55 result = "VALUE ERROR" 56 else: 57 result = num_1 ** num_2 58 return result 59 60 61 def calculation(real_exp): # 对整个算式的运算 62 real_exp = real_exp + '#' # 以运算优先级最低的'#'作为结尾,用来触发没有括号后的运算 63 operator_set = "+-*/^()#" 64 stack_of_operator, stack_of_num = ['#'], [] 65 position, temp_answer, index, length = 0, 0, 0, len(real_exp) 66 while index < length: # 将一个数值存在一个列表中等待运算 67 symbol = real_exp[index] 68 if symbol not in operator_set: 69 position = index 70 while not real_exp[index] in operator_set: 71 index = index + 1 72 temp = real_exp[position:index] 73 last = index - 1 74 if '.' in temp: 75 while real_exp[last] == '0': 76 last = last - 1 77 temp = real_exp[position:last + 1] 78 try: 79 temp = Decimal(temp) 80 except InvalidOperation: 81 return "INPUT ERROR" 82 stack_of_num.append(temp) 83 else: # 判断最新运算符与前一运算符的优先级,若优先级高继续进行循环,若优先级底,进行上一级运算 84 top_operator = stack_of_operator.pop() # 运算规则是先作最里面括号的运算,然后作外面括号的运算,整个运算结束 85 compare = priority(top_operator, symbol) 86 if compare == '>': 87 try: 88 num_2 = stack_of_num.pop() 89 num_1 = stack_of_num.pop() 90 except IndexError: 91 return "FORMAT ERROR" 92 temp_answer = operation(num_1, num_2, top_operator) 93 if temp_answer == "VALUE ERROR": 94 return temp_answer 95 stack_of_num.append(temp_answer) 96 elif compare == '<': 97 stack_of_operator.append(top_operator) 98 stack_of_operator.append(symbol) 99 index = index + 1 100 elif compare == '=': 101 index = index + 1 102 elif compare == ' ': 103 return "FORMAT ERROR" 104 105 if len(stack_of_num) == 1 and stack_of_operator == []: 106 return stack_of_num.pop() 107 108 109 def main(): 110 target_exp = "" 111 for i in range(len(argv) - 1): 112 target_exp += argv[i + 1] 113 getcontext().prec = 10 114 target_exp = del_blank(target_exp) 115 answer = calculation(target_exp) 116 print(answer) 117 118 119 if __name__ == "__main__": 120 main()
学习阶段 | 学习内容 | 学习收获 |
2019.3.10 14:00-17:00 | 软件工程 | 对软件过程和软件模型有了基本了解 |
2019.3.11 14:00-17:00 | 《构建之法》讲义 | 了解团队开发的过程以及成长阶段 |
2019.3.12 14:00-17:00 | python基础学习 | 学习python的基本语法 |
2019.3.14 09:00-17:00 | 实践学习 | 学会协作开发软件 |
2019.3.15 09:00-2100
|
实践学习 | 学会网上协作开发软件以及共同编辑文档 |
四、总结
在本周学习过程中我了解了什么是软件的过程方法以及相关的过程模型。学会了如何进行现阶段较为流行的敏捷开发过程。并且通过合作,和陆遥同学共同建立了仓库,共同完成了对计算器程序的修改,对我个人的能力提升很大,同时也明白了双人协作开发的优势,可谓受益匪浅。