结对编程--实现一个自动生成小学四则运算题目的命令行程序

Posted by Fangjuntao on 2022-01-03

需求要点

  1. 使用 -n 参数控制生成题目的个数
  1. 使用 -r 参数控制题目中数值(++自然数、真分数和真分数分母++)的范围,例如:
    Myapp.exe -r 10
    将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数该参数必须给定,否则程序报错并给出帮助信息。
  1. 生成的题目中计算过程不能产生负数,==也就是说算术表达式中如果存在形如e1− e2的子表达式,那么e1≥ e2==。
  1. 生成的题目中如果存在形如==e1÷e2的子表达式==,那么==其结果应是真分数==。
  1. ==每道题目==中出现的==运算符个数不超过3个==。
    (考虑:0,1,2,3 : 怎么分配!)
  1. 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。

生成的题目存入执行程序的当前目录下的Exercises.txt文件(文件的写入)

其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。==(字符读取,计算装换)==

  1. 生成的题目的同时将答案保存在文件中(文件的读写)

==特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。== (?????)

  1. 程序应能支持一万道题目的生成。(存储??)
  1. ==程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计==,输入参数如下:
1
Myapp.exe -e <exercisefile>.txt -a <answerfile>.txt

实质: 读取文件进行运算,然后依次“==”进行count,并记录

image

需求可以总结为三小块:

  1. 生成表达式
  2. 生成题目文件和答案文件
  3. 判定答案中的对错,并进行统计

思路参考:
image

image

计算表达式参考博客:http://www.mamicode.com/info-detail-2462079.html

image

涉及技术

Python fractions 模块

可以同时提供分子(numerator)和分母(denominator)给构造函数用于实例化Fraction类,但两者必须同时是int类型或者numbers.Rational类型,否则会抛出类型错误。当分母为0,初始化的时候会导致抛出异常ZeroDivisionError。

随机

random()

以下是 random() 方法的语法:

1
2
3
4

import random

random.random()

random.randint(2, 9) : 随机整数,2–9(包括2和9)

random.choice(String): 随机字符

字符相关

  1. 字符连接:
    Python join()方法:
1
2
3
4
5
6
Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。


join()方法语法:

str.join(sequence)

egg:

1
2
3
4
5
6
7

#!/usr/bin/python
# -*- coding: UTF-8 -*-

str = "-";
seq = ("a", "b", "c"); # 字符串序列
print str.join( seq );

以上实例输出结果如下:

1
a-b-c

数据结构

List : []

  1. pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

egg:

1
2
3
4
5
6
7
8
9


#!/usr/bin/python3
#coding=utf-8

list1 = ['Google', 'Runoob', 'Taobao']
list_pop=list1.pop(1)
print "删除的项为 :", list_pop
print "列表现在为 : ", list1

四则运算的计算:

参考: 表达式(四则运算)计算的算法:https://blog.csdn.net/gdutxiaoxu/article/details/50394930

Python将中缀表达式转换为后缀表达式

https://www.cnblogs.com/tworld/p/9709610.html

https://blog.csdn.net/sgbfblog/article/details/8001651

image

image

PSP2.1表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 20
· Estimate · 估计这个任务需要多少时间 30 20
Development 开发 470
· Analysis · 需求分析 (包括学习新技术) 150
· Design Spec · 生成设计文档 30
· Design Review · 设计复审 (和同事审核设计文档) 20
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 20
· Design · 具体设计 30
· Coding · 具体编码 150
· Code Review · 代码复审 30
·Test · 测试(自我测试,修改代码,提交修改) 40
Reporting 报告 75
· Test Report · 测试报告 25
· Size Measurement · 计算工作量 20
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30
合计