您的位置:首页 > 其它

个人作业1——四则运算题目生成程序(基于控制台)

2017-03-03 19:35 537 查看
代码地址

需求分析

这次程序是写的是一个包括整数和真分数的四则运算出题器。出题器顾名思义,基本功能就是出题,然后在用户作答后进行正误判断、纠错等,最后在进行打分。

功能设计

题目生成器的主要功能及工作流程:

    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

总结

写程序是一个很有趣的过程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: