該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
24點紙牌游戲的開發
24點是一種老少咸宜的游戲,它的具體玩法如下:
給玩家4張牌,每張牌的面值在1~13之間,允許其中有數值相同的牌。采用加、減、乘、除四則運算,允許中間運算存在小數,并且可以使用括號,但每張牌只能使用一次,嘗試構造一個表達式,使其運算結果為24。
1)請你根據上述游戲規則構造一個玩24點游戲的算法,編程實現。要求如下:
輸入:n1, n2, n3, n4
輸出:若能得到運算結果為24,則輸出一個對應的運算表達式。
如:輸入:11,8,3,5
輸出:(11-8)*(3+5)=24
提示:
算法的設計不唯一,窮舉法是最為基本的解法,分治法則會獲得比較高一些的效率,請你仔細思考,設計出算法實現該問題并畫出算法的流程圖。
2)請為你的24點紙牌游戲開發出一個界面
例如:
提示:
1. 你可以百度搜索一下互聯網上類似小軟件的開發,試用一下,確定一個界面風格。
2. 軟件主要完成的功能需要以下幾個:
1)提供一個功能能進行隨機發牌4張(用紙牌的形狀或按鈕的形狀均可)
2)提供功能供用戶輸入關于這4張牌的表達式,并進行計算,判斷結果的正確與否
3)能提供給用戶正確答案
實驗指導:
提示1:以下給出了窮舉法解24點的代碼框架,但很顯然這種解法并不是最好的求解方法,你還可以設計其它的算法來解決該問題。
def cal(a,b,op): if op==0:return(a+b) if op==1:return(a-b) if op==2:return(a*b) if op==3: if(b==0.0): return(999.0) else:return(int(a/b)) def D24(v0,v1,v2,v3): op=['+','-','*','/'] v=[v0,v1,v2,v3] count=0 #四重循環開始窮舉四個數字的位置: 4!=24 種 #三重循環開始窮舉三個運算符: 4X4X4=64 種 #未用循環,直接窮舉三個運算符的優先級: 3!-1=5種- t1=t2=t3=0 #第1種情況 ((a。b)。c)。d 開始計算: t1=cal(v[i1],v[i2],f1) t2=cal(t1,v[i3],f2) t3=cal(t2,v[i4],f3) if t3==24: print(v[i1],op[f1],v[i2],op[f2],v[i3],op[f3],v[i4]) count+=1 #第2種情況 (a。b)。(c。d) 開始計算: #第3種情況 (a。(b。c))。d 開始計算: #第4種情況 a。((b。c)。d ) 開始計算: #第5種情況 a。(b。(c。d)) 開始計算: #窮舉結束:共 24*64*5=7680 種表達式 --------------------------- if (count==0): print("can not calculate 24.",v0,v1,v2,v3); else: print("has several ways to calculate",count) v0=int(input("Pls input the 1st number:"))v1=int(input("Pls input the 2nd number:"))v2=int(input("Pls input the 3rd number:"))v3=int(input("Pls input the 4th number:"))D24(v0,v1,v2,v3)
提示2:界面設計可參考GUI相關知識進行,用到的控件包括:Button,Entry,Label等。注意:內置函數eval( )可以完成把一個字符串作為參數并返回它用為一個Python表達式的結果,例如:
>>>eval("2+3*4-5")
輸出結果為:
9
以上函數可能幫助到你獲取用戶在Entry中輸入表達式的值
另外,隨機數的生成請參考Python的random模塊
大計基實驗太無情了