python创建一个类、实现加减乘除_自动生成小学四则运算题目(Python实现)

Github项目地址:

https://github.com/pirigg/-

题目描述:

通过python语言编写一个能够自动生成小学四则运算的程序(注意是给小学生用的,要是结果出现负数的话他们会很迷茫的!),同时,除了整数外,还要支持真分数的四则运算。

Psp表格:

PSP2.1

任务内容

计划完成需要的时间(min)

实际完成需要的时间(min)

Planning

计划

50

60

Estimate

估计这个任务需要多少时间,并规划大致工作步骤

20

30

Analysis

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

60

90

Design

具体设计

50

60

Coding

具体编码

400

500

test

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

200

250

Postmortem & Process

Improvement Plan

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

30

50

Summary

合计

810

1040

1.程序设计

首先以“1+1=”为例,我们要生成简单的四则运算题目需要两个整数或是分数,为了将答案与算式分类,我们分别用两个列表来储存。

q[]用来存储问题,ans[]用来存储答案。我们可以通过random模块生成一定区间里的随机数,分数也可以通过随机生成分子和分母的形式随机生成。同时分数可以使用Fraction模块,可以同时实现分数与整数的运算以及分子和分母的约分。

下面是各个函数的代码:

2.实现代码

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

更新升级:

在原有程序的基础上,我添加了一个转换假分数答案为带分数答案(存储在ans2[]列表中)的函数f(f),以便当学生给出带分数答案时程序不会认为是错误的。

def f(f): #分数的转换

a=f.numerator #分子

b=f.denominator #分母

if a%b==0: #为整数

return '%d'%(a/b)elif a

return '%d%s%d' % (a,'/',b)else: #为带分数

c=int(a/b)

a= a - c *breturn '%d%s%d%s%d' % (c,'’',a,'/',b)

更新并修改了主函数后代码运行结果如下:

3.学习总结

尽管我从完成本次作业的过程中学到了许多,像是粗略掌握了Fraction模块以及一些程序题目的解题思想,但在写程序的过程中我发现了自己许多许多的不足,这次的作业代码也是匆匆忙忙赶出来的,还有很多要补充的方面,像是括号以及长运算题等等,在以后精进自己的水平后便会适时补上。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值