个人作业1——四则运算题目生成程序(基于控制台)
Posted Jahow
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了个人作业1——四则运算题目生成程序(基于控制台)相关的知识,希望对你有一定的参考价值。
需求分析
这次程序是写的是一个包括整数和真分数的四则运算出题器。出题器顾名思义,基本功能就是出题,然后在用户作答后进行正误判断、纠错等,最后在进行打分。
功能设计
题目生成器的主要功能及工作流程:
1.根据用户输入的参数出题
2.计算该题的答案
3.用户作答
4.比对答案作出正误判断并反馈
拓展功能:
1.对于用户错误的回答,会进行纠错并加入错题集。 输入calc.py -e *(*代表数字)即可重新练习*道错题
2.支持带括号的多元复合运算
设计实现
程序通过Python3实现
核心功能显然就是出题,题目的数据包括有整数和真分数,数字随机运算符也要随机,所以就调用random库进行各种随机
1 digit = [] 2 sign = [] 3 sign_list = [\'+\',\'-\',\'×\',\'÷\'] 4 mul = random.randint(1,3) 5 for i in range(mul+1): 6 int_temp = random.randint(1,10) 7 a = random.randint(1,9) 8 b = random.randint(a+1,10) 9 fra_temp = Fraction(a,b) 10 temp = random.choice([int_temp,fra_temp]) 11 digit.append(temp) 12 for i in range(mul): 13 temp = random.choice(sign_list) 14 sign.append(temp)
然后将随机抽取出的数字和运算符构造成多元复合运算式
1 def ques_builder(digit,sign,sign_order): 2 digit,sign = digit[:],sign[:] 3 mul = len(sign) 4 for i in range(mul): 5 index = sign_order.index(1) 6 if jug(index,sign): 7 digit[index] = \'(\'+str(digit[index])+sign[index]+str(digit[index+1])+\')\' 8 else: 9 digit[index] = str(digit[index])+sign[index]+str(digit[index+1]) 10 del digit[index+1] 11 del sign[index] 12 sign_order = [i-1 for i in sign_order] 13 sign_order.remove(0) 14 ques = digit[0]+\'=\' 15 return ques
在构造多元复合运算式时对是否加括号进行判断
1 def jug(index,sign): 2 i,p = sign[index],sign[index-1] 3 if (i==\'+\' or i==\'-\') and ((\'×\'in sign) or (\'÷\'in sign)): 4 return True 5 if index!=0: 6 if (i==\'+\' or i==\'-\') and (p==\'-\'): 7 return True 8 if (i==\'×\' or i==\'÷\') and (p==\'÷\'): 9 return True 10 return False
在用户输入后,当然还要对用户的答案进行判断以及纠错并加入错题集(黄色部分)
answer = input() key = str(ques_key(digit,sign,sign_order)) if \'/\' in key: temp = answer.split(\'/\') if len(temp)==1: answer = temp[0] else: answer = str(Fraction(int(temp[0]),int(temp[1]))) if answer==key: print (\'正确!\') return False else: print (\'不正确!\',ques,key) err = {ques:key} error_gather(err) return True
错题写入文本操作以及重新练习错题
1 def error_gather(err): 2 errfile = open(\'error\',\'r\') 3 error = eval(errfile.read()) 4 errfile.close() 5 error.update(err) 6 errfile = open(\'error\',\'w\') 7 errfile.write(str(error)) 8 errfile.close() 9 10 def error_extract(errnum): 11 errfile = open(\'error\',\'r\') 12 error = eval(errfile.read()) 13 errfile.close() 14 ques = list(error.keys()) 15 if len(ques)==0: 16 print(\'目前没有错题\') 17 exit() 18 for i in range(errnum): 19 print(str(i+1)+\': \'+ques[i],end=\'\') 20 answer = input() 21 if \'/\' in error[ques[i]]: 22 temp = answer.split(\'/\') 23 if len(temp)==1: 24 answer = temp[0] 25 else: 26 answer = str(Fraction(int(temp[0]),int(temp[1]))) 27 if answer==error[ques[i]]: 28 print(\'正确!\') 29 else: 30 print(\'不正确!\') 31 if i==len(ques)-1: 32 print(\'已经没有错题了\') 33 exit()
测试运行
运行截图:
PSP
Personal Software Process Stages |
Estimated Time(min) |
Actual Time (min) |
计划 |
10 |
6 |
·任务估计 |
10 |
6 |
开发 |
91 |
124 |
·需求分析 (包括学习新技术) |
10 |
8 |
·生成设计文档 |
5 |
6 |
·设计复审 |
5 |
3 |
·代码规范 |
1 |
1 |
·具体设计 |
5 |
8 |
·具体编码 |
60 |
83 |
·代码复审 |
5 |
2 |
·测试(自我测试,修改代码,提交修改) |
10 |
13 |
报告 |
30 |
24 |
·测试报告 |
15 |
18 |
·计算工作量 |
10 |
6 |
·提出过程改进计划 |
5 |
0 |
总结
写程序是一个很有趣的过程
以上是关于个人作业1——四则运算题目生成程序(基于控制台)的主要内容,如果未能解决你的问题,请参考以下文章