通過遞迴呼叫來完成表示式中括號的層層數
隨機的選取第乙個產生的算式進行替換,用另乙個二元運算替換
如此隨機抽取替換,同時判斷是否加加括號。
最後用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是題目的取值...