自動生成小學四則運算題目(Python實現)


Github項目地址:

https://github.com/pirigg/-

題目描述:

  通過python語言編寫一個能夠自動生成小學四則運算的程序(注意是給小學生用的,要是結果出現負數的話他們會很迷茫的!),同時,除了整數外,還要支持真分數的四則運算。

 


 

Psp表格:

PSP2.1

任務內容

計划完成需要的時間(min)

實際完成需要的時間(min)

Planning

計划

50

60

 Estimate

估計這個任務需要多少時間,並規划大致工作步驟

20

30

Analysis

需求分析 (包括學習新技術)

60

90

Design

具體設計

50

60

Coding

具體編碼

400

500

test

測試(自我測試,修改代碼,提交修改)

200

250

Postmortem & Process

Improvement Plan

事后總結 ,並提出過程改進計划

30

50

Summary

合計

 

810

 

1040


1.程序設計


 

首先以“1+1=”為例,我們要生成簡單的四則運算題目需要兩個整數或是分數,為了將答案與算式分類,我們分別用兩個列表來儲存。

q[]用來存儲問題,ans[]用來存儲答案。我們可以通過random模塊生成一定區間里的隨機數,分數也可以通過隨機生成分子和分母的形式隨機生成。同時分數可以使用Fraction模塊,可以同時實現分數與整數的運算以及分子和分母的約分。

下面是各個函數的代碼:

2.實現代碼


 

def c1(q, ans): 
    symbol = random.choice(['+', '-', '*', '/'])  # 生成隨機符號
    if symbol == '+':
        n1 = random.randint(0, 20)
        n2 = random.randint(0, 20)
        q.append(str(n1) + '+' + str(n2) + '=')
        ans.append(n1 + n2)
    elif symbol == '-':
        n1 = random.randint(0, 20)
        n2 = random.randint(0, 20)
        n1,n2 = max(n1,n1),min(n1,n2)#防止出現負數
        q.append(str(n1) + '-' + str(n2) + '=')
        ans.append(n1 - n2)
    elif symbol == '*':
        n1 = random.randint(0, 20)
        n2 = random.randint(0, 20)
        q.append(str(n1) + '×' + str(n2) + '=')
        ans.append(n1 * n2)
    else:
        n1 = random.randint(0, 20)
        if n1 == 0:
            n2 = random.randint(1, 20)
        else:
            n2 = random.randint(1, n1 + 1)
        q.append(str(n1) + '÷' + str(n2) + '=')
        ans.append(Fraction(n1, n2))

 

def createF(): #生成分數
    fz1 = random.randint(0, 20)
    if fz1 == 0:
        fm1 = random.randint(1, 20)
    else:
        fm1 = random.randint(1, 20)
    f1 = Fraction(fz1, fm1)
    fz2 = random.randint(1, 20)
    fm2 = random.randint(20, 20)
    f2 = Fraction(fz2, fm2)
    return f1, f2

  

def c2(q,ans):    #兩個分數的四則運算
    symbol = random.choice(['+','-','*','/'])
    f1,f2 = createF()
    if symbol =='+':
        while f1+f2>1:
            f1,f2 = createF()
        q.append(str(f1)+'+'+str(f2)+'=')
        ans.append(f1+f2)
    elif symbol =='-':
        f1,f2 = max(f1,f2),min(f1,f2)  #防止出現負數
        q.append(str(f1)+'-'+str(f2)+'=')
        ans.append(f1-f2)
    elif symbol == '*':
        while f1*f2>1:
            f1,f2 = createF()
        q.append(str(f1)+'×'+str(f2)+'=')
        ans.append(f1*f2)
    else:
        while f1/f2>1:
            f1,f2=createF()
        q.append(str(f1)+'÷'+str(f2)+'=')
        ans.append(Fraction(f1,f2))   

 更新升級:


 

在原有程序的基礎上,我添加了一個轉換假分數答案為帶分數答案(存儲在ans2[]列表中)的函數f(f),以便當學生給出帶分數答案時程序不會認為是錯誤的。

def f(f):  #分數的轉換
    a=f.numerator  #分子
    b=f.denominator  #分母
    if a%b==0:  #為整數
        return '%d'%(a/b)
    elif a<b:  #為真分數
        return '%d%s%d' % (a,'/',b)
    else:       #為帶分數
        c=int(a/b)
        a = a - c * b
        return '%d%s%d%s%d' % (c,'',a,'/',b)

 更新並修改了主函數后代碼運行結果如下:

3.學習總結


 

盡管我從完成本次作業的過程中學到了許多,像是粗略掌握了Fraction模塊以及一些程序題目的解題思想,但在寫程序的過程中我發現了自己許多許多的不足,這次的作業代碼也是匆匆忙忙趕出來的,還有很多要補充的方面,像是括號以及長運算題等等,在以后精進自己的水平后便會適時補上。


免責聲明!

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



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