用python寫24點遊戲

2021-10-21 16:48:53 字數 2984 閱讀 9478

思路

通過暴力方法破解(即全排列)

利用字尾表示式來去除括號的麻煩

對零這個特殊數字的處理

再字尾轉中綴表示式

# 輸入4個[1~13]之間的數字

definput()

:while

true

:try

: a, b, c, d =

map(

int,

input

("請輸入[1~13]之間的四個數字(空格分開):"

).split())

for i in

[a, b, c, d]

:if i<

1or i>13:

raise valueerror(

"所輸入的數字必須在[1~13]之間"

)break

except exception as result:

print

("引發異常:"

, result)

return

[a, b, c, d]

# 尋找所有符號的排列組合,所得結果是乙個常量列表

defqueue_list

(li_str)

: queue =

['+'

,'-'

,'*'

,'/'

] ans =

while queue:

string = queue.pop(0)

iflen

(string)==3

:continue

for i in li_str:

return ans

# 利用回溯尋找出所有數字的排列組合

fuhao = queue_list(

['+'

,'-'

,'*'

,'/'])

defhuisu

(num, li, result):if

len(li)==4

:global fuhao

for each in fuhao:

for ans in func(li, each)

: ans = check(ans)

# print("答案是:", ans)

for i in

range

(len

(num)):

n = num.pop(i)

huisu(num, li+

[n], result)

num.insert(i, n)

return result

# 對數字和符號進行排列組合,只用5種排列組合,直接列舉

defcollect

(n, f)

: ans =

[n[0

], n[1]

, f[0]

, n[2]

, f[1]

, n[3]

, f[2]

])[n[0

], n[1]

, f[0]

, n[2]

, n[3]

, f[1]

, f[2]

])0:

3]+list

(f[0:2

])+[n[3]

]+[f[2]]

)0:3

]+[f[0]]

+[n[3]

]+list

(f[1:]

))list

(f))

return ans

deffunc

(nums, fuhao)

: res =

li_all = collect(nums, fuhao)

for each in li_all:

ans = kernel(each)if-

1-ans)

*1000

<1:

return res

# 核心**

defkernel

(li)

: stack =

for i in li:

iftype

(i)==

type

('string'):

b = stack.pop(

) a = stack.pop(

)if i==

'+':

elif i==

'-':

elif i==

'*':

else

:if b==0:

return

0else

:return stack[0]

# 字尾轉中綴

defcheck

(li)

: stack =

for i in li:

iftype

(i)==

type

('string'

)and

len(i)==1

: b =

str(stack.pop())

a =str(stack.pop())

temp = f'()'

else

:return stack[0]

[1:-

1]defmain()

: num = input(

) result = huisu(num,

,)for ans in

list

(set

(result)):

print

("答案是:"

Python實現24點遊戲

24點遊戲是經典的紙牌益智遊戲。我的思路是把這4個數分成2部分,前兩個數一起,後兩個數一起,先計算除前兩個數所有可能的結果和後兩個數所有可能的結果。最後將它們的結果互相計算,結果與24比較,如果等於24則成功。建立使用者類,整個遊戲的體系就是建立乙個使用者類來儲存使用者的資訊,如姓名,生命值,分數等...

24點遊戲演算法

24點遊戲演算法 現在我們在做乙個 24點的小遊戲,我主要負責演算法部分,前面有章部落格已經講解了加括號的四則表示式的計算演算法,現在要解決就是24點的演算法。54張牌去掉大小王 2張牌,剩餘 52張。任意發1 k之間的4個 張牌 也就是有 1 13 的四個數字 用 鏈結成算式,使得式子的計算結果為...

24點遊戲設計

24點遊戲設計 問題描述 在數字1 13中隨機生成4個數字,運用加減乘除四則使4個數字的執行結果為24,每個數字僅能使用一次。演算法設計 實現24點運算有如下兩種演算法。演算法一窮舉法。所謂窮舉法就是列出4個數字加減乘除的各種可能性。我們可以將表示式分成以下幾種 首先我們將4個數設為a,b,c,d,...