GitHub 项目地址
https://github.com/745421831/-/tree/master
PSP
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
10 |
20 |
· Estimate |
· 估计这个任务需要多少时间 |
10 |
10 |
Development |
开发 |
360 |
600 |
· Analysis |
· 需求分析 (包括学习新技术) |
30 |
40 |
· Design Spec |
· 生成设计文档 |
30 |
40 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
10 |
15 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
5 |
5 |
· Design |
· 具体设计 |
40 |
80 |
· Coding |
· 具体编码 |
300 |
500 |
· Code Review |
· 代码复审 |
60 |
120 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
180 |
120 |
Reporting |
报告 |
120 |
60 |
· Test Report |
· 测试报告+博客 |
120 |
120 |
· Size Measurement |
· 计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
40 |
30 |
合计 |
1325 |
1770 |
项目要求
- 能自动生成小学四则运算题目
- 除了整数以外,还要支持真分数的四则运算
解题思路
- 了解四则运算的基本法则
- 利用随机函数随机生成数字以及运算符
- 用户输入答案程序需要判断答案是否正确
- 支持真分数运算
设计实现及代码说明
import random from fractions import Fraction operation = ['+', '-', '*', '/'] #四则运算的符号 global f def integer_score(): #rand = operation[random.randint(0,3)] number = random.randint(1,4) #随机产生的表达式长度 f = '' for i in range(number): a = random.randint(1,20) #随机产生的表达式中的数 rand = operation[random.randint(0, 3)] #随机选择一个四则运算中的符号 if rand == '/': b = random.randint(a, 20) #随机产生的真分数的分母 f += str(a) + rand + str(b) #数与符号相连 rand = operation[random.randint(0, 2)] #随机选择一个四则运算中的符号 f += rand else: f += str(a) + rand #print(a,rand,end='') b = random.randint(1, 20) f += str(b) #得到完整的表达式 n = eval(f) #得到表达式的结果 n = Fraction('{}'.format(n)).limit_denominator() #小数转化为分数 if n > 0: print('题目:') print(f,'=') print('请输出答案:') x = Fraction('{}'.format(eval(input()))).limit_denominator() if n == x: #输入的数与表达式比较 print(True) else: print(False) print('正确的答案为:',n) else: integer_score() def integer(): # rand = operation[random.randint(0,3)] number = random.randint(1, 3) f = '' for i in range(number): a = random.randint(1, 10) rand = operation[random.randint(0, 3)] f += str(a) + rand b = random.randint(1, 10) f += str(b) n = eval(f) if isinstance(n, int) and n > 0: print('题目:') print(f, '=') print('请输出答案:') x = eval(input()) if n == x: print(True) else: print(False) print('正确的答案为:', n) else: integer() def score(): op = ['+', '-'] number = random.randint(1, 3) f = '' for i in range(number): a = random.randint(1, 10) b = random.randint(a, 10) rand = op[random.randint(0, 1)] f += str(a) + '/'+ str(b)+rand a = random.randint(1, 10) b = random.randint(a, 10) f += str(a) + '/'+ str(b) n = eval(f) n = Fraction('{}'.format(n)).limit_denominator() if n > 0: print('题目:') print(f,'=') print('请输出答案:') x = Fraction('{}'.format(eval(input()))).limit_denominator() if n == x: print(True) else: print(False) print('正确的答案为:',n) else: score() if __name__ == '__main__': while True: print('选择你想做的题目:') print('0(退出)1(分数题目),2(整数题目),3(综合题目)') m = int(input()) if m == 1: score() elif m == 2: integer() elif m == 3: integer_score() elif m == 0: exit() else: print('请重新输入你的选择') #isinstance(1, int)
总结
这次利用Python实现简单的四则运算还不够完美,比如没有随机生成带括号的由于时间原因以及个人能力有限,这些只能以后慢慢完善。