随机生成两个数的四则运算

Posted 123diandian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机生成两个数的四则运算相关的知识,希望对你有一定的参考价值。

Github项目地址:

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

 

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())

 

运行效果:


 

测试真分数的四则运算

技术图片

 

练习混合型的四则运算:

技术图片

 

效能分析:

技术图片

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

 

以上是关于随机生成两个数的四则运算的主要内容,如果未能解决你的问题,请参考以下文章

四则运算

Java中唯一数的生成

随机生成30道四则运算题目

第一次作业-四则运算题目生成程序

编程1

20194626 自动生成四则运算题第一版报告