Github项目地址:

https://github.com/123diandian/sizeyunsuan

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

10

20

 Estimate

 估计这个任务需要多少时间

1440

2200

Development

开发

700

200

 Analysis

需求分析 (包括学习新技术)

180

100

 Design Spec

 生成设计文档

5

5

 Design Review

 设计复审 (和同事审核设计文档)

10

15

 Coding Standard

 代码规范 (为目前的开发制定合适的规范)

5

10

 Design

 具体设计

40

30

 Coding

 具体编码

300

400

 Code Review

代码复审

30

40

 Test

 测试(自我测试,修改代码,提交修改)

30

20

Reporting

报告

120

100

 Test Report

 测试报告+博客

120

120

Size Measurement

 计算工作量

10

15

 Postmortem & Process Improvement Plan

 事后总结, 并提出过程改进计划

40

60

合计

 

3040

3335

 

题目要求:

能自动生成小学生四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)

除了整数外,还支持真分数的四则运算

 

解题思路:

  • 定义一个函数随机生成两个整数,并进行四则运算
  • 定义一个函数随机生成两个真分数,再定义一个函数对两个真分数进行四则运算(调用Fraction函数进行分数运算)
  • 用户输入自己的要求
  • 计算结果与用户的输入进行对比

 

设计函数:

  • 定义一个函数随机生成两个正整数并进行四则运算(减数要比被减数小;除数不能等于0且当被减数大于一时,除数要能整除被除数)
  • 定义一个函数随机生成两个真分数,再定义一个函数对两个真分数进行四则运算(调用Fraction函数进行分数运算;分母不能为0,且除数即生成的第二个分数不能等于0)

 

具体程序设计:

成员变量

成员名

类型

功能

t

int

输入测试类别,1.测试  2.练习  3.退出

n

int

输入运算类别,1.整数  2.真分数  3.混合  4.退出

k

int

输入题目的数量

p

float

每道题的分数

s

float

总的得分

q

列表

存储表达式

ans

列表

存储计算结果

da

int

是否查看答案,1.是  2.否

a

字符串

用户计算的答案

 

成员函数

函数名

功能

c1(q, ans)

两个整数的四则运算

creatF()

随机生成两个真分数

c2(q, ans)

两个真分数的四则运算

main()

主函数

 

核心代码:

 1 ##两个整数的四则运算
 2 def c1(q, ans):
 3     symbol = random.choice(['+', '-', '*', '/'])  # 生成随机符号
 4     if symbol == '+':
 5         n1 = random.randint(0, 100)
 6         n2 = random.randint(0, 100)
 7         q.append(str(n1) + '+' + str(n2) + '=')
 8         ans.append(n1 + n2)
 9     elif symbol == '-':
10         n1 = random.randint(0, 100)
11         n2 = random.randint(0, n1 + 1)
12         q.append(str(n1) + '-' + str(n2) + '=')
13         ans.append(n1 - n2)
14     elif symbol == '*':
15         n1 = random.randint(0, 100)
16         n2 = random.randint(0, 100)
17         q.append(str(n1) + '×' + str(n2) + '=')
18         ans.append(n1 * n2)
19     else:
20         n1 = random.randint(0, 100)
21         if n1 == 0:
22             n2 = random.randint(1, 100)
23         else:
24             n2 = random.randint(1, n1 + 1)
25             while n1 % n2:
26                 n1 = random.randint(1, 100)
27                 n2 = random.randint(1, n1 + 1)
28         q.append(str(n1) + '÷' + str(n2) + '=')
29         ans.append(Fraction(n1, n2)) 
 1 ##随机生成两个真分数
 2 def createF():
 3     fz1 = random.randint(0, 100)
 4     if fz1 == 0:
 5         fm1 = random.randint(1, 100)
 6     else:
 7 
 8         fm1 = random.randint(fz1, 100)
 9     f1 = Fraction(fz1, fm1)
10     fz2 = random.randint(1, 100)
11     fm2 = random.randint(fz2, 100)
12     f2 = Fraction(fz2, fm2)
13     return f1, f2
 1 ##两个真分数的四则运算
 2 def c2(q,ans):
 3     symbol = random.choice(['+','-','*','/'])
 4     f1,f2 = createF()
 5     if symbol =='+':
 6         while f1+f2>1:
 7             f1,f2 = createF()
 8         q.append(str(f1)+'+'+str(f2)+'=')
 9         ans.append(f1+f2)
10     elif symbol =='-':
11         f1,f2 = max(f1,f2),min(f1,f2)
12         q.append(str(f1)+'-'+str(f2)+'=')
13         ans.append(f1-f2)
14     elif symbol == '*':
15         while f1*f2>1:
16             f1,f2 = createF()
17         q.append(str(f1)+'×'+str(f2)+'=')
18         ans.append(f1*f2)
19     else:
20         while f1/f2>1:
21             f1,f2=createF()
22         q.append(str(f1)+'÷'+str(f2)+'=')
23         ans.append(Fraction(f1,f2))
 1 def main():
 2     while 1:
 3         print("输入类型序号: 1.测试  2.练习  3.退出")
 4         t = int(input())
 5         if t == 3:
 6             break
 7         elif t == 1:  ##测试
 8             print("输入想要的四则运算序号: 1.整数  2.真分数  3.混合  4.退出")
 9             n = int(input())
10             while n > 4:
11                 print("输入有误,重新输入")
12                 n = int(input())
13             if n == 4:
14                 break
15             print("输入题目的数量", end='  ')
16             k = int(input())
17             p = 100 / k
18             s = 0
19             q = []
20             ans = []
21             if n == 1:  ##整数测试
22                 for i in range(k):
23                     c1(q, ans)
24             elif n == 2:  ##分数测试
25                 for i in range(k):
26                     c2(q, ans)
27             elif n == 3:  ##混合测试
28                 for i in range(k):
29                     n = random.randint(1, 3)
30                     if n == 1:
31                         c1(q, ans)
32                     else:
33                         c2(q, ans)
34             for i in range(k):
35                 print("第{}题:{}".format(i + 1, q[i]), end='  ')
36                 a = input()
37                 if a == str(ans[i]):
38                     s = s + p
39             print("所得的分数为:{}".format(s))
40             print("是否查看正确答案:1.是  2.否", end='   ')
41             da = int(input())
42             if da == 1:
43                 for i in range(k):
44                     print(q[i] + str(ans[i]))
45 
46 
47 
48         elif t == 2:  ##练习
49             print("输入想要的四则运算序号: 1.整数  2.真分数  3.混合  4.退出")
50             n = int(input())
51             while n > 4:
52                 print("输入有误,重新输入")
53                 n = int(input())
54             if n == 4:
55                 break
56             print("输入题目的数量", end='  ')
57             k = int(input())
58             q = []
59             ans = []
60             if n == 1:
61                 for i in range(k):
62                     c1(q, ans)
63             elif n == 2:
64                 for i in range(k):
65                     c2(q, ans)
66             elif n == 3:
67                 for i in range(k):
68                     n = random.randint(1, 3)
69                     if n == 1:
70                         c1(q, ans)
71                     else:
72                         c2(q, ans)
73             else:
74                 print("输入有误!请重新输入")
75 
76             for i in range(k):
77                 print("第{}题:{}".format(i + 1, q[i]), end='  ')
78                 a = input()
79                 if a == str(ans[i]):
80                     print("回答正确")
81                 else:
82                     print("回答错误,正确答案是:{}".format(ans[i]))
83         else:
84             print("输入有误!请重新输入")
85 
86 profile.run('main()')

 

运行效果:

 

测试真分数的四则运算

随机生成两个数的四则运算 Python 第1张

 

练习混合型的四则运算:

随机生成两个数的四则运算 Python 第2张

 

效能分析:

随机生成两个数的四则运算 Python 第3张

可以看到所用时间为0.047s。

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄