大家好,欢迎来到IT知识分享网。
Python四则运算
GitHub项目地址:https://github.com/rekosama/-/commit/230e563197c9d6cee3d04e8fc2efa8156c3533d9
题目:
(1)能自动生成小学四则运算题目,并且不能出现负数;
(2)能支持真分数的四则运算;
思路:
(1)四则运算加减乘除,采用两个随机数,由于不能出现负数,则对两个随机数进行比较大小再进行减法运算,除法一向特殊,所以在随机数的取值范围中设置不包括0。另外,整数类型除法中两数相除不能出现无限循环小数,故需要对除法做限制。
(2)真分数运算在pycharm中导入fractions库,其余类似。
(3)题库的生成,由于其随机性需要导入random函数。
实现过程:
设计三个函数:
(1)newint() 生成整数四则运算
(2)newfra() 生成真分数四则运算
(3)newtest() 生成制定指定数量的四则运算题目
函数关系:
newint()与newfra()为独立的函数,负责生成随机四则运算,newtest()则随机调用上述两个函数生成题目。
代码说明:
1 from fractions import Fraction #fraction:分数,即在此导入分数模块
2 import random #用于随机生成题目
3
4 #整数四则运算
5 def newint(): 6 fh = ['+', '-', '×', '÷'] 7 k = random.randint(0, 3) #随机生成0到3内的整数,用于fh的下标
8 n1 = random.randint(0, 100) 9 n2 = random.randint(0, 100) 10 result = 0 #存运算结果
11 if k == 0: 12 result = n1 + n2 13 elif k == 1: 14 n1, n2 = max(n1, n2), min(n1, n2) 15 result = n1 - n2 16 elif k == 2: 17 result = n1 * n2 18 elif k == 3: 19 while n2 == 0 or float(n1/n2)*1000%10!=0: #分母不能为0,运算结果控制在2位小数内。
20 n1 = random.randint(0, 100) 21 n2 = random.randint(0, 100) 22 result = float(n1 / n2) 23 print(n1, fh[k], n2, '= ', end='') 24 return result 25
26 #分数四则运算
27 def newfra(): 28 fh = ['+', '-', '×', '÷'] 29 k = random.randint(0, 3) 30 t1 = random.randint(1,20) 31 t2 = random.randint(t1, 20) #做分母,控制为真分数
32 n1 = Fraction(t1, t2) #即表示n1为分数
33 t1 = random.randint(1, 20) 34 t2 = random.randint(t1, 20) 35 n2 = Fraction(t1, t2) 36 result = 0 37 if k == 0: 38 result = n1 + n2 39 elif k == 1: 40 n1, n2 = max(n1, n2), min(n1, n2) 41 result = n1 - n2 42 elif k == 2: 43 result = n1 * n2 44 elif k == 3: 45 result = n1 / n2 46 print(n1, fh[k], n2, '= ', end='') 47 return result 48
49 #newtest()函数是要求用户输入一个整数来输出算式的数量,采用while循环随机生成整数或者真分数运算,
50 # 将答案保存在result列表的同时输出算式直到算式数量达到要求。最后输出result列表即输出答案。
51 def newtest(): 52 fh = ['+', '-', '×', '÷'] 53 print('输入题库所需要的题目数量') 54 n=int(input()) 55 result=[] 56 m=0 57 while m<=(n-1): 58 k = random.randint(0, 4) 59 if k==0: 60 print(m+1,end='、') 61 result.append(newfra()) 62 print(' ') 63 else: 64 print(m+1,end='、') 65 result.append(newint()) 66 print(' ') 67 m=m+1
68 m=0 69 print('答案:') 70 while m<=(n-1): 71 print(m+1,'、',result[m]) 72 m=m+1
73
74 #下列为主函数,第一个模式负责调用上述newint()、new函数,
75 # 并获得函数返回值即算式答案,与用户输入值进行比较。第二个模式则是生成算式题目。
76 print('请选择需要进行的操作(输入数字代号)') 77 print('1、四则运算') 78 print('2、制作题库') 79 n=int(input()) 80 if n==1: 81 print('input "exit" to Quit') 82 while True: 83 k = random.randint(0, 1) #0表示真分数的运算,1表示整数的运算
84 if k == 0: 85 result = newfra() 86 jg = input() 87 if jg == 'exit': 88 break; 89 sr = Fraction(jg) #化为分数形式
90 if sr == result: #检测输入(sr)的答案与正确答案是否一致
91 print('right') 92 else: 93 print('error. the Tight answer is', result) 94 else: 95 result = newint() 96 jg = input() 97 if jg == 'exit': 98 break; 99 sr = float(jg) 100 if sr == result: 101 print('right') 102 else: 103 print('error. the Tight answer is', result) 104 if n==2: 105 newtest()
运行效果:
(1)四则运算效果
(2)制作题库效果
效能分析:
PSP表格:
|
|
预计耗时(分钟) |
是实际耗时(分钟) |
Planning |
计划 |
25 |
20 |
Estimate |
估计这个任务需要多少时间 |
/ |
/ |
Development |
开发 |
120 |
240 |
Analysis |
需求分析 |
10 |
10 |
Design Spec |
生成设计文档 |
/ |
/ |
Design Review |
设计复审(和同事审核设计文档) |
/ |
/ |
Coding Standerd |
代码规范(为目前的开发制定合适的规范) |
/ |
/ |
Design |
具体设计 |
5 |
10 |
Coding |
具体编码 |
70 |
90 |
Code Review |
代码复审 |
5 |
10 |
Text |
测试(自测,修改代码,提交修改) |
20 |
30 |
Reporting |
报告 |
10 |
20 |
Text Report |
测试报告 |
10 |
20 |
Size Measurement |
计算工作量 |
5 |
5 |
Postmortem & Process Improvement Plan |
事后总结,并提出过程改进计划 |
10 |
5 |
Sum |
合计 |
300 |
460 |
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/29446.html