Skip to content

可以生成符合小学二年级和小学三年级的四则运算算式

Notifications You must be signed in to change notification settings

CatNum/FourArithmetic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FourArithmetic

可以生成符合小学二年级和小学三年级的四则运算算式

逻辑:

  1. 算式类型

    1. 刚开始 四则表达式用 string 类型存储
    2. 然后更改为 []interface{},因为能够更方便的分割
    3. 考虑是否使用 type 创建式子,但是字段只需要一个 len 和一个 fourArithmetic 字段太少 放弃
    4. 因为判断唯一性的需求,需要使用 map 来存储式子,但是 []interface 不可比较 不能作为 key 所以现将式子变为 string 类型再 存储在 map 中
    5. 因为在输出到 txt 的时候,发现每次文件的算式顺序都不一致,考虑到 map 的随机性,又创建了一个 []string 存放算式,用来在输出的时候遍历
  2. 原式如何转变为加小括号的式子

    1. 根据逻辑来判断小括号是否有效
    2. 根据原式和加了小括号式子的结果是否一致判断小括号是否有效
    3. 因为算式很短,所以采用列举的方法来表示所有的情况,然后根据逻辑判断小括号是否有效果,没有效果就不存储
  3. 算式规则

    1. 式子中间结果不能出现 负数、小数
    2. 除法右边位不能为 0
    3. 小括号不能无效
    4. 对于 二年级 得数 <= 100 ;对于三年级 得数 <= 10000

遇到的难点:

  1. 在对四则算式切片进行加小括号时,会改变原来式子(即原切片)

解决方法:在加小括号之前先拿到原切片的底层数组并备份

  1. 在函数 arithmeticCheck 中, resultNum 处于 if 中,原代码为:resultNum, err := convert(s) 导致编译器认为 resultNum 为 if 中的局部变量,而在 if 中没有使用 resultNum 而报错

解决方法:因为 err 是新变量,则先定义 err 再对 err 进行赋值,而不是使用简洁定义方式。 代码如下:

var err error
resultNum, err = convert(s)

About

可以生成符合小学二年级和小学三年级的四则运算算式

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages