目录
一、作业信息
二、作业要求
三、代码提交
1.代码结构
2.代码说明
3.运行截图
四、个人小结
一、作业信息
| 作业课程 | 软件工程[https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18] |
| 作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377|
| 作业目标 | 能对需求进行分析并实现;编码格式规范;学习博客撰写 |
| 学 号 | 3180701132|
| 姓 名 | 徐恒伟
二、作业要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
(1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
(2)程序要求能处理用户的输入,判断对错,累积分数
(3)程序支持可以由用户自行选择加、减、乘、除运算
(4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
三、代码提交与运行截图
import random
from fractions import Fraction
def newint(symbol=-1):#生成整数算式
operater = ['+', '-', '×', '÷']
if symbol==-1:
symbol = random.randint(0, 3)#生成符号
op1 = random.randint(1, 20)#生成两个操作数
op2 = random.randint(1, 20)#生成两个操作数
currect_result = 0
计算结果
if symbol == 0:
currect_result = op1 + op2
elif symbol == 1:
op1, op2 = max(op1, op2), min(op1, op2)
currect_result = op1 - op2
elif symbol == 2:
currect_result = op1 * op2
elif symbol == 3:
op1, op2 = max(op1, op2), min(op1, op2)
while op1 % op2 != 0:
op1 = random.randint(1, 10)
op2 = random.randint(1, 10)
op1, op2 = max(op1, op2), min(op1, op2)
currect_result = int(op1 / op2)
print(op1, operater[symbol], op2, '= ', end='')
return currect_result
def newfra(symbol=-1):#生成分数算式
operater = ['+', '-', '×', '÷']
if symbol==-1:
symbol = random.randint(0, 3)
denominator = random.randint(1, 10)
numerator = random.randint(denominator, 10)
op1 = Fraction(denominator, numerator)
denominator = random.randint(1, 10)
numerator = random.randint(denominator, 10)
op2 = Fraction(denominator, numerator)
currect_result = 0
if symbol == 0:
currect_result = op1 + op2
elif symbol == 1:
op1, op2 = max(op1, op2), min(op1, op2)
currect_result = op1 - op2
elif symbol == 2:
currect_result = op1 * op2
elif symbol == 3:
op1, op2 = max(op1, op2), min(op1, op2)
currect_result = op1 / op2
print(op1, operater[symbol], op2, '= ', end='')
return currect_result
def newtest(n):#批量生成算式
operater = ['+', '-', '×', '÷']
currect_result=[]
m=0
while m<=(n-1):
calc_mode = random.randint(0, 1)
if calc_mode==0:
print(m+1,end='.')
currect_result.append(newfra())
print(' ')
else:
print(m+1,end='.')
currect_result.append(newint())
print(' ')
m=m+1
m=0
print('答案:')
while m<=(n-1):
print(m+1,'.',currect_result[m])
m=m+1
if name == 'main':
mode=int(input('请输入执行模式\n 1.生成一个 2.生成n个'))
if mode == 1:
while True:
score=0
calc_method=input('请输入计算方式\n1.+ 2.- 3.X 4.÷ 不填为随机生成\n')
if calc_method=='':
calc_method=-1
else:
calc_method=int(calc_method)
calc_mode=int(input('请输入计算模式\n1.真分数 2.整数 3.退出\n'))
if calc_mode==1:
correct_answer = newfra(calc_method)
elif calc_mode==2:
correct_answer = newint(calc_method)
elif calc_mode==3:
break
input_answer = input()
if calc_mode==1:
input_answer = Fraction(input_answer)
else:
input_answer = int(input_answer)
print(input_answer)
if input_answer == correct_answer:
score=score+1
print('结果正确,当前分数{}'.format(score))
else:
score=score-1
print('结果错误,正确结果为{},当前分数{}' .format(correct_answer,score))
else:
print('输入题库所需要的题目数量\n')
n=int(input())
newtest(n)
运行截图:
四、个人小结
psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 2000 250
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 20 40
Development 开发 10 30
Analysis 需求分析(包括学习新技术) 10 10
Design Spec 生成设计文档 10 20
Design Review 设计复审 10 20
Coding Standard 代码规范 10 10
Design 具体设计 20 30
Coding 具体编码 30 20
Code Review 代码复审 20 30
Test 测试(自我测试,修改代码,提交修改) 20 30
Reporting 报告 10 20
Test Report 测试报告 10 15
Size Measurement 计算工作量 20 20
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 10 20
在使用markdown编译器编译的过程中,由于操作的不够熟练,遇到的很多问题,但在不断地摸索中也都有所解决,虽然发费了不少时间,
但能学会一件新的方法还是值得的。通过作业也发现了一些不足的地方,在今后的学习中,要特别注意。