用Python開發小學二年級口算自動出題程序


版權聲明:本文為博主原創文章,歡迎轉載,並請注明出處。聯系方式: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()

 

結果如下:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM