23. 随机口算题及自动阅卷

 

22. 绘图的简单使用

(1) 随机生成 20 道口算题,题目为 100 以内的加减法,同时结果不为负数,且这些题目要各不相同。要求题目前面自动生成 1~20 的序号,题目后以等号结尾,存储到文档 Question.txt 中。

(2) Question.txt 填写答案后,读取本文件,在每道题后面添加 T 或 F 判断是否算对,未答标记 N。

参考答案:

解答:

(1)

A B C
1 =file(“Question.txt”) []
2 for B1.len()<20 =rand(90)+10 =rand(90)+10
3 if rand()<0.5 >C1=B2/“+”/C2
4 else if B2>=C2 >C1=B2/“-”/C2
5 else >C1=C2/“-”/B2
6 if B1.pos(C1)<0 >B1=B1|C1
7 else goto B2
8 =B1.(pad@r(“(”/#/“)”,"“,5)/~/”=") >A1.export(A8)

A2 中执行循环直至题目准备了 20 题,B2 和 C2 中准备两个随机整数,随机准备加法或者减法题目。B6 中判断是否题目是否和已有的重复,如果不重复则添加到 B1 中,若不重复则在 C7 中跳转至 B2 再随机生成一道题目,这里,其实已经执行到了 A2 循环区块的末尾,else 语句只是使得代码更明确,实际上第 7 行代码删掉也是可以正常执行的。

A8 中为每道题目添加了题号,为了整齐,用 pad@r() 函数在右侧添加空格,使得题号占的字符数均为 5 个。B8 中将序列输入到文件。

(2)

A B C
1 =file(“Question.txt”) =A1.read@n() []
2 for B1 =mid(A2, pos(A2,“)”)+1).split(“=”)
3 if eval(B2(1))==number(B2(2)) >C1=C1|(A2/"T")
4 else if len(trim(B2(2)))==0 >C1=C1|(A2/"N")
5 else >C1=C1|(A2/"F")
6 >A1.export(C1)

在 Question.txt 中被手动填写答案后,B1 分行读取每道题目。A2 循环每一行数据,B2 根据题号右侧的括号,以及等号,拆分出题目和答案部分。B3 用 eval 函数,根据题目计算出正确结果,并与填写的答案比较,正确添加 T,答案空白添加 N,错误添加 F。全部阅卷后,在 A6 中将结果写回文件。


目录和习题数据