Github项目地址: https://github.com/Lily4323/lily-
1、 题目要求:
a:能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)
b:除了整数外,还要支持真分数的四则运算、
2、PSP表格:
(在开始实现程序之前,通过PSP表格估计程序的各个模块的开发上耗费的时间)
PSP2.1 |
Personal Software Process Stages |
预估耗时(min) |
实际耗时(min) |
Planning |
计划 |
15 |
30 |
Estimate |
估计这个任务需要多少时间 |
5 |
15 |
Development |
开发 |
60 |
120 |
Analysis |
需求分析 |
10 |
20 |
Design Spec |
生成设计文档 |
20 |
30 |
Design |
具体设计 |
10 |
20 |
Code |
具体编码 |
60 |
80 |
Test |
测试(自我测试,修改代码,提交修改) |
40 |
60 |
Reporting |
报告 |
20 |
30 |
Summary |
合计 |
240 |
415 |
3、项目思路:
a.四则运算加减乘除,采用两个随机数,由于不能出现负数,所以在对两个随机数进行减法运算的时候,需要进行比较大小,而除法在运算中,除数不能取0。
1)设计实现
定义函数:用def szys()实现随机生成四则运算最后输出算式并返回正确答案
2)代码说明:
import random #四则运算 def ysfz(): sym = [‘+‘, ‘-‘, ‘ב, ‘÷‘] f= random.randint(0, 3) n1 = random.randint(1, 20) n2 = random.randint(1, 20) result = 0 if f== 0:#加法 result = n1 + n2 elif f == 1:#减法,要先比较大小,防止输出负数 n1, n2 = max(n1, n2), min(n1, n2) result = n1 - n2 elif f== 2:#乘法 result = n1 * n2 elif f == 3:#除法,要比较大小,并循环取整除 n1, n2 = max(n1, n2), min(n1, n2) while n1 % n2 != 0: n1 = random.randint(1, 10) n2 = random.randint(1, 10) n1, n2 = max(n1, n2), min(n1, n2) result = int(n1 / n2) print(n1, sym[f], n2, ‘= ‘, end=‘‘) return result print(‘请输入1进行四则运算‘) n=int(input()) #当输入1时,进行四则运算,调用函数syzs() if n==1: while True: result = ysfz() j= input() s= int(j) if s== result : print(‘正确,真棒‘) else: print(‘错误,继续加油‘, result )
4、 测试运行:
5、思路改进
我们知道,在进行四则运算时进行真分数运算应注意假分数的影响,因此我们在进行代码编写时应注意分数的运算,代码更新如下:
import random from fractions import Fraction ##两个整数的四则运算 def c1(q, ans): symbol = random.choice([‘+‘, ‘-‘, ‘*‘, ‘/‘]) # 生成随机符号 if symbol == ‘+‘: n1 = random.randint(0, 20) n2 = random.randint(0, 20) q.append(str(n1) + ‘+‘ + str(n2) + ‘=‘) ans.append(n1 + n2) elif symbol == ‘-‘: n1 = random.randint(0, 20) n2 = random.randint(0, 20) n1,n2 = max(n1,n1),min(n1,n2)#防止出现负数 q.append(str(n1) + ‘-‘ + str(n2) + ‘=‘) ans.append(n1 - n2) elif symbol == ‘*‘: n1 = random.randint(0, 20) n2 = random.randint(0, 20) q.append(str(n1) + ‘ב + str(n2) + ‘=‘) ans.append(n1 * n2) else: n1 = random.randint(0, 20) if n1 == 0: n2 = random.randint(1, 20) else: n2 = random.randint(1, n1 + 1) q.append(str(n1) + ‘÷‘ + str(n2) + ‘=‘) ans.append(Fraction(n1, n2)) ##随机生成两个分数 def createF(): fz1 = random.randint(0, 20) if fz1 == 0: fm1 = random.randint(1, 20) else: fm1 = random.randint(1, 20) f1 = Fraction(fz1, fm1) fz2 = random.randint(1, 20) fm2 = random.randint(20, 20) f2 = Fraction(fz2, fm2) return f1, f2 def f(f):#分数的转换 a=f.numerator #分子 b=f.denominator #分母 if a%b==0:#为整数 return ‘%d‘%(a/b) elif a<b:#为真分数 return ‘%d%s%d‘ % (a,‘/‘,b) else:#为带分数 c=int(a/b) a = a - c * b return ‘%d%s%d%s%d‘ % (c,‘’‘,a,‘/‘,b) ##两个分数的四则运算 def c2(q,ans): symbol = random.choice([‘+‘,‘-‘,‘*‘,‘/‘]) f1,f2 = createF() if symbol ==‘+‘: while f1+f2>1: f1,f2 = createF() q.append(str(f1)+‘+‘+str(f2)+‘=‘) ans.append(f1+f2) elif symbol ==‘-‘: f1,f2 = max(f1,f2),min(f1,f2)#防止出现负数 q.append(str(f1)+‘-‘+str(f2)+‘=‘) ans.append(f1-f2) elif symbol == ‘*‘: while f1*f2>1: f1,f2 = createF() q.append(str(f1)+‘ב+str(f2)+‘=‘) ans.append(f1*f2) else: while f1/f2>1: f1,f2=createF() q.append(str(f1)+‘÷‘+str(f2)+‘=‘) ans.append(Fraction(f1,f2)) def main(): while 1: print("输入题目的数量", end=‘ ‘) k = int(input()) p = 100 / k s = 0 q = [] ans = [] ans2 = [] for i in range(k): n = random.randint(1, 4) if n == 1: c1(q, ans) g = Fraction(ans[i]) ans2.append(f(g)) else: c2(q, ans) g = Fraction(ans[i]) ans2.append(f(g))#记录带分数答案 for i in range(k): print("第{}题:{}".format(i + 1, q[i]), end=" ") a = input() if a == str(ans[i]): s = s + p print("所得的分数为:{}".format(s)) print("正确答案:", end=" ") for i in range(k): if str(ans[i]) == str(ans2[i]): print(q[i] + str(ans[i])) else: print("{}{}或{}".format(q[i],str(ans2[i]),str(ans[i]))) if __name__ == ‘__main__‘: main()
修改后的结果显示:
接下来我们再回到我们的SPS表格记录下我们在各阶段所用的实际时间。
我们的小学四则运算项目基本完成啦。。。。
原文:https://www.cnblogs.com/psl1234/p/13698010.html