python實現四則運算


GitHub鏈接:

https://github.com/history5201/python

在程序的各個模塊的開發上耗費的時間PSP表格:

PSP2.1 Personal Software Process Stages 預估耗時(分鍾) 實際耗時(分鍾)
Planning 計划  30 42 
· Estimate · 估計這個任務需要多少時間  30 42 
Development 開發  305  395
· Analysis · 需求分析 (包括學習新技術)  20 30 
· Design Spec · 生成設計文檔  25 30 
· Design Review · 設計復審 (和同事審核設計文檔)  10 15 
· Coding Standard · 代碼規范 (為目前的開發制定合適的規范)  15 25 
· Design · 具體設計  30 45 
· Coding · 具體編碼  150 180 
· Code Review · 代碼復審  30 35 
· Test · 測試(自我測試,修改代碼,提交修改)  25 35 
Reporting 報告  100  110
· Test Report · 測試報告  70 65 
· Size Measurement · 計算工作量  15 25 
· Postmortem & Process Improvement Plan · 事后總結, 並提出過程改進計划  15 20 
合計    435  547

 

3)解題思路描述

  在百度以及GitHub上尋找適合的報告書作為參考以及參考網絡代碼進行修改

 

4)設計實現過程:

  1、定義三個函數:出題函數、判斷函數、主函數

  2、出題函數:在字符數組[+ - * /]中隨機抽取兩個或一個符號以及0-30之間抽取隨機數進行四則運算

  3、判斷函數:判斷同學從鍵盤內輸入的答案是否正確;

  4、主函數:輸入一個數值N,以便學生選擇做幾題,然后循環出題以及判斷函數。

 

流程圖如下所示

 

 

5)代碼說明:

import random
from fractions import Fraction


##兩個整數的四則運算
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 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)


##兩個分數的四則運算
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))



def main():
    while 1:
        print("輸入題目的數量", end='  ')
        k = int(input())
        p = 100 / k
        s = 0
        q = []
        ans = []
        ans2 = []
        for i in range(k):
            n = random.randint(1, 4)
            if n == 1:
                c1(q, ans)
                g = Fraction(ans[i])
                ans2.append(f(g))
            else:
                c2(q, ans)
                g = Fraction(ans[i])
                ans2.append(f(g))#記錄帶分數答案
        for i in range(k):
            print("第{}題:{}".format(i + 1, q[i]), end="  ")
            a = input()
            if a == str(ans[i]):
                s = s + p
        print("所得的分數為:{}".format(s))
        print("正確答案:", end="  ")
        for i in range(k):
            if str(ans[i]) == str(ans2[i]):
                print(q[i] + str(ans[i]))
            else:
                print("{}{}或{}".format(q[i],str(ans2[i]),str(ans[i])))

if __name__ == '__main__':
    main()

 

6)測試運行:

 

 

7)你程序中消耗最大的函數

該函數所需要的空間復雜度最大

 

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

 


免責聲明!

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



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