python四則運算

源代碼已上傳至Github,https://github.com/chaigee/arithmetic,中的python_ari.py文件python

題目:

  (1)能自動生成小學四則運算題目,而且不能出現負數;git

  (2)能支持真分數的四則運算;github

思路:

  (1)四則運算加減乘除,採用兩個隨機數,因爲不能出現負數,則對兩個隨機數進行比較大小再進行減法運算,除法一貫特殊,因此在隨機數的取值範圍中設置不包括0。數組

  (2)真分數運算在pycharm中導入fractions庫,其他相似。app

from fractions import Fraction

實現過程:

  設計三個函數:dom

    def newint() 生成整數四則運算函數

    def newfra() 生成真分數四則運算工具

    def newtest() 生成制定指定數量的四則運算題目學習

  函數關係:測試

    newint()與newfra()爲獨立的函數,負責生成隨機四則運算,newtest()則隨機調用上述兩個函數生成題目。詳細描述請看下方代碼說明

代碼說明:

  首先說明整數的四則運算,生成兩個隨機數並隨機運算,在減法中比較大小防止出現負數,在除法中比較大小並循環取整除的隨機數組合。最後輸出算式並返回正確答案。

def newint():
    opr = ['+', '-', '×', '÷']
    fh = random.randint(0, 3)
    n1 = random.randint(1, 20)
    n2 = random.randint(1, 20)
    rjg = 0
    if fh == 0:
        rjg = n1 + n2
    elif fh == 1:
        n1, n2 = max(n1, n2), min(n1, n2)
        rjg = n1 - n2
    elif fh == 2:
        rjg = n1 * n2
    elif fh == 3:
        n1, n2 = max(n1, n2), min(n1, n2)
        while n1 % n2 != 0:
            n1 = random.randint(1, 10)
            n2 = random.randint(1, 10)
            n1, n2 = max(n1, n2), min(n1, n2)
        rjg = int(n1 / n2)
    print(n1, opr[fh], n2, '= ', end='')
    return rjg

  真分數四則運算相似。

def newfra():
    opr = ['+', '-', '×', '÷']
    fh = random.randint(0, 3)
    t1 = random.randint(1, 10)
    t2 = random.randint(t1, 10)
    n1 = Fraction(t1, t2)
    t1 = random.randint(1, 10)
    t2 = random.randint(t1, 10)
    n2 = Fraction(t1, t2)
    rjg = 0
    if fh == 0:
        rjg = n1 + n2
    elif fh == 1:
        n1, n2 = max(n1, n2), min(n1, n2)
        rjg = n1 - n2
    elif fh == 2:
        rjg = n1 * n2
    elif fh == 3:
        n1, n2 = max(n1, n2), min(n1, n2)
        rjg = n1 / n2
    print(n1, opr[fh], n2, '= ', end='')
    return rjg

  newtest()函數是要求用戶輸入一個整數來輸出算式的數量,採用while循環隨機生成整數或者真分數運算,將答案保存在rjg列表的同時輸出算式直到算式數量達到要求。最後輸出rjg列表即輸出答案。

def newtest():
    opr = ['+', '-', '×', '÷']
    print('輸入題庫所須要的題目數量')
    n=int(input())
    rjg=[]
    m=0
    while m<=(n-1):
        fh = random.randint(0, 4)
        if fh==0:
            print(m+1,end='、')
            rjg.append(newfra())
            print(' ')
        else:
            print(m+1,end='、')
            rjg.append(newint())
            print(' ')
        m=m+1
    m=0
    print('答案:')
    while m<=(n-1):
        print(m+1,'、',rjg[m])
        m=m+1

  下列爲主函數,第一個模式負責調用上述newint()、new函數,並得到函數返回值即算式答案,與用戶輸入值進行比較。第二個模式則是生成算式題目。

print('一、四則運算')
print('二、製做題庫')
n=int(input())
if n==1:
    print('input "0000" to Quit')
    while True:
        fh = random.randint(0, 4)
        if fh == 0:
            rjg = newfra()
            jg = input()
            if jg == '0000':
                break;
            sr = Fraction(jg)
            if sr == rjg:
                print('right')
            else:
                print('error. the Tight answer is', rjg)
        else:
            rjg = newint()
            jg = input()
            if jg == '0000':
                break;
            sr = int(jg)
            if sr == rjg:
                print('right')
            else:
                print('error. the Tight answer is', rjg)
if n==2:
    newtest()

測試運行:

  先測試運行第一個模式,以下圖:

 

  第二個模式,先輸出20個算式數量:

  輸出1000個算式數量,運行完成且無報錯,部分截圖以下:

效能分析:

  因爲本人沒有作過效能分析,在編寫代碼的時候還沒有學習該功能,因此在修改程序的過程當中沒有相關記錄。在改進完程序以後再進行學習效能分析才發現步驟錯了,最終只能對改進後的程序直接進行分析,請諒解。本次分析採用軟件pycharm內置的工具Profile,因爲該工具是隻對程序運行一次再輸出此次運行的效能分析表格(具體功能還沒有弄懂),因此根據本人程序,對newtest()函數輸入10000的整數來輸出10000個算式數量,結果如圖(效能分析表格界面由Name、Call Count、Time(ms)、Own Time(ms) 4列組成。表頭Name顯示被調用的模塊或者函數;Call Count顯示被調用的次數;Time(ms)顯示運行時間和時間百分比,時間單位爲毫秒):

PSP表格:

    預計耗時(分鐘) 是實際耗時(分鐘)
Planning 計劃 10 10
Estimate 估計這個任務須要多少時間 / /
Development 開發 120 240
Analysis 需求分析 5 10
Design Spec 生成設計文檔 / /
Design Review 設計複審(和同事審覈設計文檔) / /
Coding Standerd 代碼規範(爲目前的開發制定合適的規範) / /
Design 具體設計 5 10
Coding 具體編碼 30 60
Code Review 代碼複審 5 10
Text 測試(自測,修改代碼,提交修改) 10 30
Reporting 報告 10 20
Text Report 測試報告 10 20
Size Measurement 計算工做量 5 5
Postmortem & Process Improvement Plan 過後總結,並提出過程改進計劃 5 5
Sum 合計 215 420
相關文章
相關標籤/搜索