定 义 一 个 函 数 mathpaper(a,b,n)用于小学数学教师对“加、减、乘、除”运算的随机 出题: (1)形式参数 a、b 为计算的最小和最大整数(教师可根据学生水平决定),n 为试 题数量; (2)生成两份文件:“学号 mathpaper.txt”存放试题试卷,“学号 keypaper.txt” 存放标准答案卷; (3)统计输出各类计算题的数量。 (4)调用函数:mathpaper(1,100,50),则产生如下图所示的三项结果。 提示:random 库函数 randint()和 choice(),分别产生随机整数和随机运算符。flag = ["+", "-", "x", "÷"] # 列表用于产生随机运算符
时间: 2023-06-12 09:07:41 浏览: 89
终版小学数学出题器,加减乘除混合运算,支持自定义数字,支持答案显示
以下是实现该函数的代码:
```python
import random
def mathpaper(a, b, n):
flag = ["+", "-", "x", "÷"]
ops = {"+": lambda x, y: x + y, "-": lambda x, y: x - y, "x": lambda x, y: x * y, "÷": lambda x, y: x // y}
count = {"+": 0, "-": 0, "x": 0, "÷": 0}
for i in range(1, n+1):
num1 = random.randint(a, b)
num2 = random.randint(a, b)
op = random.choice(flag)
if op == "÷":
while num2 == 0 or num1 % num2 != 0:
num2 = random.randint(a, b)
ans = ops[op](num1, num2)
count[op] += 1
print(f"{i}. {num1} {op} {num2} = _______")
with open(f"学号_mathpaper.txt", "a") as f1:
f1.write(f"{i}. {num1} {op} {num2} = _______\n")
with open(f"学号_keypaper.txt", "a") as f2:
f2.write(f"{i}. {num1} {op} {num2} = {ans}\n")
print(f"加法题数量:{count['+']}")
print(f"减法题数量:{count['-']}")
print(f"乘法题数量:{count['x']}")
print(f"除法题数量:{count['÷']}")
```
解释一下代码:
1. 首先定义了运算符列表 flag 和运算符字典 ops,字典的值是 lambda 函数,用于计算两个数的运算结果。
2. 定义了一个计数器 count,用于统计各类计算题的数量。
3. 使用 for 循环生成 n 道数学题,每次随机生成两个整数 num1 和 num2,以及一个运算符 op。
4. 如果运算符是除法,需要特判 num2 等于 0 或者 num1 不能整除 num2 的情况,重新随机生成 num2 直到满足条件。
5. 根据运算符计算答案 ans,同时将对应的计数器加 1。
6. 输出题目和空白答案,同时将题目和标准答案分别写入两个文件中。
7. 循环结束后输出各类计算题的数量。
使用 mathpaper(1,100,50) 可以生成 50 道数学题,题目和标准答案分别保存在 "学号_mathpaper.txt" 和 "学号_keypaper.txt" 中,同时输出各类计算题的数量。
阅读全文