题目:小学四则运算
目录
一、作业信息
二、作业要求
三、设计实现
四、代码提交
1.四则运算
2.两个整数的四则运算
3.随机生成两个分数
4.两个分数的四则运算
五、运行结果及说明
1.运行截图
2.PSP表格
六、心得体会
一、作业信息
| 博客班级 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18 |
| ---- | ---- | ---- |
| 作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377 |
| 作业目标 | 学习如何编写随笔,学习PSP表格 |
| 学号 | 3180701108 |
二、作业要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
三、设计实现
用def szys()实现随机生成整数的四则运算最后输出算式并返回正确答案。
用def c1()和def c2()实现随机生成整数或分数的四则运算最后输出算式并返回正确答案。
通过random模块生成一定区间里的随机数,分数也可以通过随机生成分子和分母的形式随机生成。同时分数可以使用Fraction模块,可以实现分数与整数的运算以及分子和分母的约分。
四、代码提交
四则运算
import random
**#四则运算**
def szys():
sym = ['+', '-', '×', '÷']
f= random.randint(0, 3)
n1 = random.randint(1, 99)
n2 = random.randint(1, 99)
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('请输入555进行四则运算')
n=int(input())
**#当输入555时,进行四则运算,调用函数szys()**
if n==555:
while True:
result = szys()
j= input()
s= int(j)
if s== result :
print('Bingo~答对了!')
else:
print('你答错了,继续加油哟~ 正确答案是:', result )
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])))
`
五、运行结果及说明
1.运行截图
2.PSP表格
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 10 | 15 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 120 | 180 |
Development | 开发 | 40 | 60 |
Analysis | 需求分析(包括学习新技术) | 15 | 20 |
Design Spec | 生成设计文档 | 10 | 15 |
Design Review | 设计复审 | 10 | 15 |
Coding Standard | 代码规范 | 5 | 10 |
Design | 具体设计 | 15 | 20 |
Coding | 具体编码 | 30 | 40 |
Code Review | 代码复审 | 5 | 10 |
Test | 测试(自我测试,修改代码,提交修改) | 10 | 25 |
Reporting | 报告 | 20 | 30 |
Test Report | 测试报告 | 10 | 15 |
Size Measurement | 计算工作量 | 5 | 10 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 10 | 15 |
六、心得体会
通过本次代码和博客园随笔的编写,我认为难在markdown的编写,通过请教同学我也解决了一部分问题。逐步掌握了markdown的编写方法,
熟悉了在博客园发表文章的流程。