github项目地址: https://github.com/jerryswagyyy/Airdior/blob/master/zuoye1.py
自动小学简单四则运算题,
编程语言python,
解题思路:
小学的四则运算为加减乘除,整数和真分数为主,
先生成随机数 和 符号
再把算式通过函数表达出来
代码如下:
import random
from fractions import Fraction
def newint(fh,n1,n2): #四则运算
# opr = ['+','-','*','/']
#fh = random.randint(0,3) #选择符号
val = 0 #结果
if fh == 0:
val = n1+n2
elif fh == 1:
#n1,n2 = max(n1,n2),min(n1,n2)
val = n1-n2
elif fh == 2:
val = n1*n2
elif fh == 3:
val = int(n1/n2)
#print(n1,opr[fh],n2)
return val
def newfra(): #真分数四则运算
opr = ['+', '-', '*', '/']
fh = random.randint(0, 3) #随机选择符号
t1 = random.randint(1, 10) #
t2 = random.randint(t1, 10) #
n1 = Fraction(t1, t2) #生成一个真分数
t1 = random.randint(1, 10)
t2 = random.randint(t1, 10)
n2 = Fraction(t1, t2)
val = 0
if fh == 0:
val = n1 + n2
elif fh == 1:
n1, n2 = max(n1, n2), min(n1, n2)
val = n1 - n2
elif fh == 2:
val = n1 * n2
elif fh == 3:
n1, n2 = max(n1, n2), min(n1, n2)
val = n1 / n2
print(n1, opr[fh], n2, '= ', end='')
print('')
return val
def main(): #主函数
print('小学四则运算')
n = 1
if n==1:
print('input "0000" to Quit')
while True:
fh = random.randint(0, 4)
if fh == 0:
print('真分数运算:')
rjg = newfra()
jg = input()
if jg == '0000':
break;
sr = Fraction(jg)
if sr == rjg:
print('right')
else:
print('error. the Tight answer is', rjg)
print('')
else:
print('整数运算')
rjg = suanfa()
jg = input()
if jg == '0000':
break;
sr = int(jg)
if sr == rjg:
print('right')
else:
print('error. the Tight answer is', rjg)
print('')
#调试
def suanfa():
n = random.randint(2,5)
# print('随机生成个数:',n)
num = [0,0,0,0,0]
fh = [0,0,0,0,0]
opr = ['+','-','*','/']
count = 0
val = 0
for i in range(n): #产生随机数
num[i] = random.randint(1,10)
for i in range(n-1): #产生随机符号
fh[i] = random.randint(0,3)
for i in range(n): #除法不出现小数
#print(opr[fh[i]])
if i < n-1:
#if fh[i] == 1:
#num[i],num[i+1] = max(num[i],num[i+1]),min(num[i],num[i+1])
if fh[i] == 3:
num[i],num[i+1] = max(num[i],num[i+1]),min(num[i],num[i+1])
while (num[i]%num[i+1] != 0):
#num[i] = random.randint(1,10)
num[i+1] = random.randint(1,10)
#print("numlen", len(num) , " " , i+1)
num[i],num[i+1] = max(num[i],num[i+1]),min(num[i],num[i+1])
str_formula = ""
for i in range(n): #输出表达式
if i < n-1:
str_formula += str(num[i]) + opr[fh[i]]
else:
str_formula += str(num[i]) + '='
print(str_formula)
i = 0
p = 0
while(p<n-1): #乘除法
#print('i=',i)
p = p+1
if fh[i] == 2 or fh[i] == 3:
num[i] = newint(fh[i],num[i],num[i+1])
#print('i=',i,'num[i]=',num[i])
del num[i+1]
del fh[i]
#print(i,num[i+1])
count+=1
i = i-1
#print('i=',i+1, 'p', p,'num[i]=',num[i+1], str(num))
i=i+1
#print('p=',p)
n = n-count
# print('')
val = newint(fh[0],num[0],num[1])
for i in range(n-2): #加减法
# print(val,opr[fh[i+1]],num[i+2])
val = newint(fh[i+1],val,num[i+2])
# print(val)
#print('值:', int(eval(str_formula)))
#print('值:', val)
return val
if __name__ == '__main__':
main()
主要函数:
def newint(fh,n1,n2): #四则运算
def newfra(): #真分数四则运算
def suanfa(): 调试程序
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
60分钟 |
5小时 |
· Estimate |
· 估计这个任务需要多少时间 |
72小时 |
72小时 |
Development |
开发 |
32小时 |
42小时 |
· Analysis |
· 需求分析 (包括学习新技术) |
10小时 |
15小时 |
· Design Spec |
· 生成设计文档 |
2小时 |
3小时 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
2小时 |
1.5小时 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
3小时 |
2.5小时 |
· Design |
· 具体设计 |
5小时 |
4小时 |
· Coding |
· 具体编码 |
5小时 |
7小时 |
· Code Review |
· 代码复审 |
5小时 |
4小时 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
5小时 |
6小时 |
Reporting |
报告 |
3小时 |
3小时 |
· Test Report |
· 测试报告 |
60分钟 |
69分钟 |
· Size Measurement |
· 计算工作量 |
30分钟 |
30分钟 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30分钟 |
30分钟 |
合计 |
|
36小时 |
50小时 |