版權聲明:本文為博主原創文章,歡迎轉載,並請注明出處。聯系方式:460356155@qq.com
武漢光谷一小二年級要求家長每天要給小孩出口算題目,讓孩子練習。
根據老師出題要求編寫了Python程序自動出題,結果保存為txt文件,打印出來作為練習用,這樣就不用每天繁瑣地人工出題了,其中的數字用randint隨機產生。
程序如下:
# -*- coding:utf-8 -*- __author__ = 'zhengbiqing 460356155@qq.com' __doc__ = """武漢市光谷一小二年級數學口算自動出題程序 2017-05-31""" from random import randint sym = [' + ', ' - '] # 當前文件夾下創建口算題目文件math.txt fobj = open('math.txt', 'w') def base_exei_oneline(pmin, pmax, mmin, mmax, multimin, multimax, divmin, divmax): ''' pmin,pmax:加數、被加數最小最大值 mmin,mmax:減法轉換成加法后,加數、被加數最小最大值 multimin,multimax:乘數、被乘數最小最大值 divmin,divmax:除法轉換成乘法后,乘數、被乘數最小最大值 ''' # plus:加法算式,rjust(2):按2位數右對齊 plus = str(randint(pmin, pmax)).rjust(2) + ' + ' + str(randint(pmin, pmax)).rjust(2) + ' =' # minus:減法算式 minus1 = randint(mmin, mmax) minus2 = randint(mmin, mmax) minussum = minus1 + minus2 minus = str(minussum).rjust(2) + ' - ' + str(minus1).rjust(2) + ' =' # multi:乘法算式 multi1 = randint(multimin, multimax) multi2 = randint(multimin, multimax) multi = str(multi1).rjust(2) + ' x ' + str(multi2).rjust(2) + ' =' # div:除法算式 div1 = randint(divmin, divmax) div2 = randint(divmin, divmax) divmulti = div1 * div2 div = str(divmulti).rjust(2) + ' /' + str(div1).rjust(2) + ' =' lineitem = [plus, minus, multi, div] line = (18 * ' ').join(lineitem) print line fobj.writelines(line + '\r\n') # 4列x10行道加、減、乘、除基本題,每行加、減、乘、除題各1道 def base_exeicise(): for col in range(10): base_exei_oneline(1, 20, 1, 50, 1, 9, 1, 9) # 類型1算式:... +/- ... +/- ... def type1_str(summin=1, summax=100): ''' summin,summax:允許總和的最小最大值 ''' sym1 = sym[randint(0, 1)] sym2 = sym[randint(0, 1)] if sym1 == ' + ' and sym2 == ' + ': sum_ = randint(summin + 2, summax) first = randint(summin, sum_ - 2) second = sum_ - first second = randint(summin, second - 1) third = sum_ - first - second elif sym1 == ' + ' and sym2 == ' - ': sum_ = randint(summin + 1, summax) first = randint(summin, sum_ - 1) second = sum_ - first third = randint(summin, sum_) elif sym1 == ' - ' and sym2 == ' + ': first = randint(summin + 1, summax) second = randint(summin, first) third = randint(first - second, summax) elif sym1 == ' - ' and sym2 == ' - ': first = randint(summin + 2, summax) second = randint(summin, first) third = first - second third = randint(summin, third) arithmetic = str(first).rjust(2) + sym1 + str(second).rjust(2) + sym2 + str(third).rjust(2) print arithmetic return arithmetic # 類型2算式:... +/- ... x ... def type2_str(multimin=1, multimax=9, summin=1, summax=100): ''' multimin,multimax:乘數、被乘數最小最大值 summin,summax:允許總和的最小最大值 ''' sym1 = sym[randint(0, 1)] second = randint(multimin, multimax) third = randint(multimin, multimax) multi = second * third if sym1 == ' + ': first = randint(summin, summax - multi) else: first = randint(multi, summax) arithmetic = str(first).rjust(2) + sym1 + str(second).rjust(2) + ' x ' + str(third).rjust(2) print arithmetic return arithmetic # 類型3算式:(... +/- ...) / ... def type3_str(multimin=1, multimax=9, summin=1, summax=100): ''' multimin,multimax:乘數、被乘數最小最大值 summin,summax:允許總和的最小最大值 ''' sym1 = sym[randint(0, 1)] second = randint(multimin, multimax) third = randint(multimin, multimax) multi = second * third if sym1 == ' + ': first = randint(summin, multi) second = multi - first else: second = randint(summin, summax - multi) first = multi + second arithmetic = '(' + str(first).rjust(2) + sym1 + str(second).rjust(2) + ')' + ' / ' + str(third).rjust(2) print arithmetic return arithmetic # 生成一套題 def oneday_homework(): # 基本題 base_exeicise() # 類型1題 plus1 = type1_str() plus2 = type1_str() # 類型2題 plus3 = type2_str() # 類型3題 plus4 = type3_str() plus5 = type3_str() # 類型1、2題打印一行 line = [plus1, plus2, plus3] lines = (29 * ' ').join(line) print lines fobj.writelines(lines + '\r\n' * 4) # 類型3題打印一行 line = [plus4, plus5] lines = (29 * ' ').join(line) print lines fobj.writelines(lines + '\r\n' * 4) fobj.writelines(r'用時______分鍾 對______題(共45題) 家長簽名:') # 一張A4紙上下各打印1份 oneday_homework() fobj.writelines('\r\n' * 6) oneday_homework() fobj.close()
結果如下:

