孩子学习口算压力山大,现在的要求太高了需要5分钟内答满150道题,完成这个目标需要多多的练习。
加法要求和不能大于21,考虑到20以上的进位问题,孩子目前还是不熟练没有添加进去。减法差不能是负数,被减数是个位数的。除法先取乘法的商作为被除数,这样就可以被整除了。还加入了左右括号的填空,灵活转换被加数和被减数的算法。由于输出的加减乘除符号字符会因为字体不同而有差异,在pycharm的控制台输出是整齐排列的,而复制到word就会各种不对齐,对比使用Courier New字体排列的最完美了。所以复制到word要修改一下字体,达到强迫症的对齐要求。
# coding=utf-8
import random
result = []
operList = ["+", "-"] # 如果需要乘法和除法则替换为["+", "-", "*", "/"]
unique = [] # 用于统计去重
print("\t\t 姓名____________ 用时___________ 正确率_____________ \n ")
def generate_num():
a = random.randint(1, 20)
b = random.randint(0, 20) # 100以内加法 可以 b = random.randint(0, 100-a)
oper = random.choice(operList)
if oper == "-":
b = random.randint(0, 10)
if a < b:
a, b = b, a
ans = eval('%d%s%d' % (a, oper, b))
oper = "-"
elif oper == "+":
if a > 10 and b > 10:
a -= 10
b -= 10
elif a + b > 20:
if a > b:
a -= 10
else:
b -= 10
ans = eval(str(a) + oper + str(b))
elif oper == "*":
a = random.randint(1, 9)
b = random.randint(0, 9)
ans = a * b
oper = "×"
elif oper == "/":
a = random.randint(0, 9)
b = random.randint(1, 9) # 被除数不能为0
ans = a * b
oper = "÷"
if str(a) + oper + str(b) in unique: #用于去重,不能保证完全没有重复
a, b, oper, ans = generate_num()
unique.append(str(a) + str(oper) + str(b))
return a, b, oper, ans
for i in range(25): # 常规题目要几行
for g in range(5): # 每行要几个算式
a, b, oper, ans = generate_num()
if oper == "÷":
print(str(ans).ljust(2, ' ') + str(oper) + str(b).rjust(2, ' ') + " = ", end=" ") # 对齐打印,不换行
result.append(str(a))
else:
print(str(a).ljust(2, ' ') + str(oper) + str(b).rjust(2, ' ') + " = ", end=" ")
result.append(str(ans))
# 也可以将完整题目和答案加入 result.append(str(a) + str(oper) + str(b) + "=" + str(eval('%d%s%d' % (a, oper, b))))
print() # 输出五个算式换行
for i in range(6