四則運算2

2022-08-27 15:51:19 字數 4908 閱讀 9515

1設計思想:

通過遞迴呼叫來完成表示式中括號的層層數

隨機的選取第乙個產生的算式進行替換,用另乙個二元運算替換

如此隨機抽取替換,同時判斷是否加加括號。

最後用expressoion字串來記錄表示式

2源程式**

#writher gu peng

#edit date 20160312

from fractions import fraction#分數

from random import randint#隨機數

def layer(layer_accual2,operat_number2,brackets2,layer_amount2):#遞迴程式

if(layer_accual2>0):#對第一層開始計算,將形成3個以上的數字,層數暫時為設定的3。

#選擇數字標號

#print"layer_accual2",layer_accual2

opreation_radom=randint(0,layer_accual2-1)#第一層加1,抽取號碼,進行替換

find_operat_number=operat_number[opreation_radom]

#即兩個數中選擇乙個數進行替換成為乙個簡單的四則二元運算

#print "operater_num",operater_num

#將選中的數字從第二層開始,用乙個簡單的二元表示式替換選中的數字,並插入陣列

#插入時依據數字編號判斷是否加入括號,依據此數字所在的周圍是否有*\符號

#判斷是否有新增括號

if((operator[opreation_radom]=="/")or(operator[opreation_radom]=="*")or(operator[opreation_radom+1]=="/")or(operator[opreation_radom+1]=="*")):#判斷選中數字周圍的符號

brackets[layer_accual2]=1

if(multiplication_and_division==2):

brackets[layer_accual2]=0

operater_num=randint(1,multiplication_and_division) #將運算子入陣列

operator_one="?"

if(operater_num==1):

operator_one="+"

if(operater_num==2):

operator_one="-"

if(operater_num==3):

operator_one="*"

if(operater_num==4):

operator_one="/"

if(layer_accual2==0):

operator[1]=operator_one

else:

mov_amount=layer_accual2+2-opreation_radom

for i in range(0,mov_amount):

operator[layer_accual2+2-i]=operator[layer_accual2+2-i-1]

#print"i",i

operator[opreation_radom+1]=operator_one

zhen_zheng=randint(1,2) #是真分數或者整數,隨機

if(fraction_exist==0):

zhen_zheng=1

if(zhen_zheng==1): #產生第乙個數字

first_num=randint(0,number_range)

first_num=str(first_num)

else:

first_num1=2

first_num2=1

while (first_num1>=first_num2):

first_num1=randint(1,number_range)

first_num2=randint(1,number_range)

first_num=fraction(first_num1,first_num2)

if(first_num!=0):

first_num="("+str(first_num)+")"

first_num=str(first_num)

zhen_zheng=randint(1,2) #是真分數或者整數,隨機

if(fraction_exist==0):

zhen_zheng=1

if(zhen_zheng==1): #產生第二個數字

second_num=randint(0,10)

second_num=str(second_num)

else:

second_num1=2

second_num2=1

while (second_num1>=second_num2):

second_num1=randint(1,number_range)

second_num2=randint(1,number_range)

second_num=fraction(second_num1,second_num2)

if(second_num!=0):

second_num="("+str(second_num)+")"

if(layer_accual2==0):#第0層,將最開始的兩個數字存入陣列

operat_number[0]=first_num

operat_number[1]=second_num

if(negative_exit==0):#(如果不存在負數)

if(second_num>first_num and operator_one==2):

while(second_num>=first_num):

second_num=randint(1,number_range)

if(remainder==0):#(如果不存在餘數)

if(operator_one==4):

while(second_num%first_num!=0):

print"remainder"

second_num=randint(1,number_range)

#從第一層開始存入兩個數字

if(layer_accual2>0):

mov_amount=layer_accual2+2-opreation_radom

for i in range(0,mov_amount):

operat_number[layer_accual2+1-i]=operat_number[layer_accual2+1-i-1]

operat_number[opreation_radom]=first_num

operat_number[opreation_radom+1]=second_num

#整理算式

if(layer_accual2==1):

tempperate1=str(operat_number[0])

tempperate2=str(operat_number[1])

expressions=operat_number[0]+operator[1]+operat_number[1]

if(layer_accual2>1):

#先找到替換數字,然後產生表示式2,用2替換表示式1

global expressions

kk=str(operat_number[opreation_radom])

expressions2=first_num+operator_one+second_num

#建立乙個查詢機制,尋找不同的數字將其替換?

#while(same_amount>0):

expressions=expressions.replace(find_operat_number,expressions2)

layer_accual2=layer_accual2+1

if(layer_accual2

3執行結果截圖

4開發過程

獨立開發,最開始設計遞迴,要用到的引數,是如何設計陣列,

需要幾組存資料的陣列,如何對資料進行儲存,產生下乙個產

生式,如何回到上一層。思考好了之後開始進行試驗,編寫。

遇見了很多錯誤,逐一修改,儘量減少出錯的可能性。

5計畫日誌:

第一天設計

第二天開始實現部分功能,首先完成遞迴功能的實現

第三天開始編寫各種記錄資訊的功能,

第四天功能異常,檢查排除問題

第五天實現了實驗的最基本要求,隨機產生括號成功,

同時存在小bug,無法在短時間內解決,開始進行程式

的輸入輸出,以及其他小功能的完善

6時間記錄日誌:

星期

開始時間

結束時間行為一

***二

***三

14:00

20:00

設計,並開始編寫基本遞迴結構

四16:00

20:00

編寫記錄小部件,陣列的設定 

五16:00

21:00

陣列紊亂,修復功能

六10:00

15:00

周五未完成,繼續修復錯誤。完善其他功能

7缺陷記錄日誌

缺陷

日期原因

修改時長

如何修正

記錄符號陣列出錯

記錄數字符號出錯

遞迴層次錯誤

四則運算2

題目 輸出算術題。1 題目避免重複 2 可定製 數量 列印方式 3 可以控制下列引數 是否有乘除法 數值範圍 加減有無負數 除法有無餘數 是否支援分數 真分數,假分數,程式設計思想 1 首先允許使用者輸入每頁顯示的題目數量以及要輸出幾頁,提供選擇列印方式的選項 2 然後提供下列選項 提供分數運算 分...

四則運算2

一 要求 1 題目避免重複 2 可定製 數量 列印方式 3 可以控制下列引數 1 是否有乘除法 2 是否有括號 最多可以支援十個數參與計算 3 數值範圍 4 加減有無負數 5 除法有無餘 二 設計思路 1 為了避免題目重複,定義了三個陣列用來分別存放第一,二個數和符號,用if條件語句判斷是否重複 2...

四則運算 2

實驗報告 思路 是否有乘除法 數值範圍 加減有無負數 除法有無餘數。利用for迴圈設定題目的數量,用三個陣列分別表示兩個隨機數和他們之間的四則運算,利用跟之前的題目進行比較,避免出現重複的題目。利用if語句對引數進行分類,如果有乘除法,四則運算的陣列就有四個元素,反之只有兩個元素。命令a是題目的取值...