目录
一、作业信息
二、作业要求
三、代码提交
1.代码结构
2.代码说明
3.运行截图
四、个人小结
一、作业信息
| 作业课程 | 软件工程[https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18] |
| 作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377|
| 作业目标 | 能对需求进行分析并实现;编码格式规范;学习博客撰写 |
| 学 号 | 3180701241|
二、作业要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
(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('请输入执行模式
1.生成一个 2.生成n个'))
if mode == 1:
while True:
score=0
calc_method=input('请输入计算方式
1.+ 2.- 3.X 4.÷ 不填为随机生成
')
if calc_method=='':
calc_method=-1
else:
calc_method=int(calc_method)
calc_mode=int(input('请输入计算模式
1.真分数 2.整数 3.退出
'))
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=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编译器编译的过程中,由于操作的不够熟练,遇到的很多问题,但在不断地摸索中也都有所解决,虽然发费了不少时间, | |||
但能学会一件新的方法还是值得的。通过作业也发现了一些不足的地方,在今后的学习中,要特别注意。 |