23. 随机口算题及自动阅卷
(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 中将结果写回文件。
英文版