赞
踩
原新浪博客(http://blog.sina.com.cn/billsona)搬迁至此。
暑假开始了,作为一个学渣的老爹,内心自然是崩溃的。
一年级数学老师布置的一项暑假作业是,小朋友每天完成20道口算和5道两位数的竖式计算。
作为一个资深IT民工,立马想到了用代码自动生成题目,这么有规律的要求,人怎么可能比得过机器的速度和精准度?说干就干,一个小时后,出现了如下的代码,运行环境是python3。
import random string = "" for day in range(1, 61): string = string + "\nThis is day " + str(day) + "\n" # 用来记录每天的题目个数 k = 0 # 用来记录每行算术题的个数 num = 0 # 取999999是为了保证能够每天生成20道符合要求的题目 for i in range(0, 999999): if k < 20: flag = random.choice([" + ", " - "]) exp = "" # 如果是加号,保证两个数都不超过50,目前学的都是100以内的数 if flag == " + ": a = str(random.randint(1, 50)).ljust(2, " ") b = str(random.randint(1, 50)).ljust(2, " ") exp = a + flag + b + " =" # 如果是减号,保证被减数和减数都小于100即可 else: a = random.randint(1, 100) b = random.randint(1, 100) # 保证较大的数作为被减数 if a < b: tmp = a a = b b = tmp a = str(a).ljust(2, " ") b = str(b).ljust(2, " ") exp = a + flag + b + " =" if num < 3: string = string + exp + " " num = num + 1 # 达到4个题目,换行 else: string = string + exp + "\n" num = 0 k = k + 1 # 用来记录每天的题目个数 k = 0 # 定义一个列表,用来存放竖式计算的题目,列表当中的元素是一个长度为2的列表,第一个元素是数啊,第二个元素是符号(+/-)和b # 例如list=[[11, + 22], [33, + 44]] list = [] # 取999999是为了保证能够每天生成20道符合要求的题目 for i in range(0, 999999): # 每行放置5道竖式计算题,保证竖式计算中的两个数都是两位数,并且加法的时候,两个数都不超过50 if k < 5: flag = random.choice(["+ ", "- "]) if flag == " + ": a = " " + str(random.randint(10, 50)) + " " + " " b = " " + flag + str(random.randint(10, 50)) + " " + " " else: a = random.randint(10, 99) b = random.randint(10, 99) if a < b: tmp = a a = b b = tmp # 设置特定数量的空格或者tab,是为了保证竖式是对齐的,美观的,可读的 a = " " + str(a) + " " + " " b = " " + flag + str(b) + " " + " " list.append([a, b]) k = k + 1 # 因为是逐行打印,所以将5道竖式题目中的a,组成单独的一行打印 line1 = list[0][0] + list[1][0] + list[2][0] + list[3][0] + list[4][0] + "\n" # 因为是逐行打印,所以将5道竖式题目中的+/-号和b,组成单独的一行打印 line2 = list[0][1] + list[1][1] + list[2][1] + list[3][1] + list[4][1] + "\n" # 因为是逐行打印,所以将5道竖式题目中的横线,组成单独的一行打印 ttt = "-------- " line3 = ttt + ttt + ttt + ttt + ttt + "\n\n" # 打印完横线后,空一行便于孩子写结果 string = string + line1 + line2 + line3 print(string)
运行结果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。