软件工程(2019)结对编程第二次作业
1、题目要求
我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求: ①能够自动生成四则运算练习题 ②可以定制题目数量 ③用户可以选择运算符 ④用户设置最大数(如十以内、百以内等) ⑤用户选择是否有括号、是否有小数 ⑥用户选择输出方式(如输出到文件、打印机等) ⑦最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)2、任务分工
①驾驶员: 胡博智 ②领航员: [赵德明](https://www.cnblogs.com/zhaoxvwudu/p/10816735.html)3、部分代码
``` python def CreatFloat(MAX_int): fl = str(random()*randint(5,MAX_int)) r = fl.split('.') r1 = r[1][:2] res = r[0]+'.'+r1 return res
def Creat(numN_MAX,MAX_int,KuoHao,Float,sym):
numN_MIN = 2
nums = []
numN = randint(numN_MIN,numN_MAX)
# 生成随机数
for _ in range(numN-1):
nn = []
if Float:nn.append(CreatFloat(MAX_int))
nn.append(randint(1,MAX_int))
nums.append(str(choice(nn)))
if Float:
nums.insert(randint(0,len(nums)),CreatFloat(MAX_int))
else:
nums.insert(randint(0,len(nums)),str(randint(1,MAX_int)))
result = ""
res1 = "{}"*(numN-1)
rr = findall('{}', res1)
for i in range(len(rr)):
result += rr[i]+choice(sym)
result += '{}'
st = randint(0,int(len(str(result))/6))# 随机字符串匹配的开始位置
res2 = findall('{}[+|-]{}',result[st:])# 寻找符合规则的运算节点
res3 = findall('{}[×|÷|+|-]{}[×|÷|+|-]{}',result[st:])# 寻找符合规则的运算节点
if KuoHao:
f=0;st=0;en=10
if randint(0,10)>5 and numN>3:
try:
for dd in res3[:randint(1,len(res3))]:
result = sub(dd,"({})".format(dd),result)
f = 5
except:
pass
if f==5:
st = 0
en = 8
else:
st = 6
en = 10
if randint(st,en)>5 and numN>2:
try:
for dd in res2[:randint(1,len(res2))]:
result = sub(dd,"({})".format(dd),result)
except:
pass
if not findall("\(.*\)",result):
res2 = findall('{}[×|÷|+|-]{}', result[st:]) # 寻找符合规则的运算节点
for dd in res2[:randint(0, len(res2))]:
result = sub(dd, "({})".format(dd), result)
if not findall("\(\(.*\)\)",result):
# result += '='
for i in range(numN):
result = sub('{}', "{0[" + str(i) + "]}", result, 1)
return result.format(nums)
else:
return False
<h1 style="color:blue;font-size:20;">4. 程序运行截图 </h1>
<hr/>
![](https://img2018.cnblogs.com/blog/1589373/201905/1589373-20190506204515138-401879405.png)
<hr/>
![](https://img2018.cnblogs.com/blog/1589373/201905/1589373-20190506204605088-942162283.png)
<hr/>
![](https://img2018.cnblogs.com/blog/1589373/201905/1589373-20190506205813005-1024201234.png)
<hr/>
![](https://img2018.cnblogs.com/blog/1589373/201905/1589373-20190506205905544-130277326.png)
<h1 style="color:blue;font-size:20;">5、总结</h1>
  在这次结对作业中,我与赵德明分工明确,思路清晰,对于有分歧的地方积极讨论,最终得到满意的结果。
  这次结队编程作业中,我担任驾驶员的职责,我负责整体程序的设计和编写。在编写过程中,我遇到了很多问题,在经过网上查找资料和对源码的阅读终于实现了想要的效果,最后又遇到了进程上的问题,对这方面不是很精通,最后放弃了开子进程,换成了直接调用。在修改多次后,最终实现了作业要求的基本功能!