python 四则运算作业2
1.GitHub地址:https://github.com/634017?tab=projects&q=is:open
2.PSP
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
Planning |
计划 |
70 |
80 |
|
· Estimate |
· 估计这个任务需要多少时间 |
50 |
100 |
|
Development |
开发 |
1600 |
1700 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
30 |
40 |
|
· Design Spec |
· 生成设计文档 |
50 |
60 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
20 |
20 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
10 |
10 |
|
· Design |
· 具体设计 |
60 |
40 |
|
· Coding |
· 具体编码 |
1000 |
1700 |
|
· Code Review |
· 代码复审 |
60 |
50 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 |
40 |
|
Reporting |
报告 |
120 |
130 |
|
· Test Report |
· 测试报告 |
60 |
70 |
|
· Size Measurement |
· 计算工作量 |
5 |
5 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
40 |
50 |
|
合计 |
|
2705 |
3010 |
3.解题思路
(1)从题目出发,先考虑随机产生整数和运算符号。数字和字符交替出现。
(2)真分数,可先随机产生两个数,比较大小,结合”/ ”得到真分数。
(3)以数组存放式子,判断式子是否已存在,判断是否重复。
(4)加以提高功能,向式子加入括号,考虑到插入字符。
(5)提供答案,将字符转化为数字符号运算出式子的答案。
(6)测试程序,修改代码。
(7)结果写入文件。
4.设计实现,几个类,几个函数
- 建立shizi()函数,生成随机数字以及真分数和运算符,构成式子。以cha(z)函数判断shizi()函数生成式子是否重复,实现查重功能。通过save(filename, s)函数将式子题目以及答案写入TXT文件。根据不同需求,以typ()函数满足用户的运算类型的选择。建立khao()函数向shizi()生成的式子加入括号;通过ans()函数将式子的答案运算出来。
5.代码说明
(1)随机生成算术
def shizi(): #产生式子
import random
jl=''
f=random.choice(['4','6','8']) #数字和符号的个数
for i in range(int(f)):
if i==0 or i==3 or i==5 or i==7:
a=random.randint(1,100)
b=random.randint(1,100)
if a>b:
c=str(b)+'/'+str(a) #真分数
else:
c=str(a)+'/'+str(b)
k=str(random.randint(1,150))
d=random.choice([k,k,k,c])
jl=jl+d
if i==2 or i==4 or i==6:
s=random.choice(['+','-','x','÷'])
jl=jl+s
return (jl+'=')
(2)算术是否重复
def cha(z):#查看有无重复
cd=[]
if z not in cd:
cd.append(z)
return 1
(3)保存结果文件
def save(name, s):#name为写入文件的路径,data为要写入数据列表.
file = open(filename,'a')
file.seek(0)
file.truncate() # 清空文件
for x in s:
x='%s\n'%(x)
file.write(x)
file.close()
(4)算术类型
def typ(): #四则运算类型
print("加法居多,输入1。乘法居多,输入2,无限制,输入3")
d=input()
(5)查看答案
def ans(a):
a=a.replace('x','*')
a=a.replace('÷','/')
a=a.replace('=','')
return eval(a)
(6)加入括号
def khao(a): #加括号
t=0
s=0
for i in range(len(a)):
if a[i] in ['+','-','x','÷']:
t=t+1
for i in range(len(a)):
if a[i] in ['+','-','x','÷']:
s=s+1
if s==2:
k=i
break
if t>=3: #加括号
a='('+a
a=a[:k+1]+')'+a[k+1:]
return(a)
(7)主函数
#from fractions import Fraction 保留为分数
#m=Fraction(m)
n=eval(input("题目个数:"))
t=1
i=0
while i<99999:
if cha(shizi()): #是否重复
k=shizi()
m=ans(k)
f=khao(k)
if m>=0: #判断不出现负数
j=t
print("{0}. {1} 答案 {2}".format(t,f,m)) #输出式子和答案
h=str(j)+'. '
save('C:/Users/abc/Desktop/timu.txt', h+k) #保存文档
m=str(m)
save('C:/Users/abc/Desktop/answer.txt', h+m)
t=t+1
if t==n+1: #保证题目数量
break
6.测试运行





7,性能
运行时间21秒,消耗最大的是shizi()函数。

浙公网安备 33010602011771号