Python 「24點遊戲的簡單實現「

2021-08-28 18:28:33 字數 3224 閱讀 9004

問題描述:從撲克中每次取出4張牌。使用加減乘除,第乙個能得出24者為贏。(其中,j代表11,q代表12,k代表13,a代表1),按照要求程式設計解決24點遊戲。

思路:1、隨機產生四個數(1-13)將其排列組合結果去重新增到乙個列表中

2、列舉計算並去重

3、顯示

# _author:「yyx」

# date: 2018/10/5

import itertools

import random

listcardnum = # 隨機產生四個數列表

listcardset = # 四個數所有排列組合列表

tuplecard = () # 以元組的形式存放所有的排列組合

listoperator = ["+", "-", "*", "/"] # 運算子列表

listcardvalue = # 滿足24點的結果列表

cardone = 0

cardtwo = 0

cardthree = 0

cardfour = 0 # 四張牌的點數

# 隨機發牌

def card_rand():

for i in range(4):

listcardset = list(set(itertools.permutations(listcardnum, 4)))

return listcardset

listcard = card_rand() # 排列組合結果

# print(listcard)

# 計算

def card_calculate():

for i in range(len(listcard)):

tuplecard = listcard[i]

# print(type(tuplecard))

cardone = tuplecard[0]

cardtwo = tuplecard[1]

cardthree = tuplecard[2]

cardfour = tuplecard[3] # 得到四張牌的點數

flag = false # 標誌位

try:

for o1 in listoperator:

resultone = 0 # 前兩個數的運算結果

if o1 == "+":

resultone = cardone+cardtwo

elif o1 == "-":

resultone = cardone-cardtwo

elif o1 == "*":

resultone = cardone*cardtwo

elif o1 == "/":

resultone = cardone/cardtwo

for o2 in listoperator:

resulttwo = 0 # 前三個數的運算結果

if o2 == "+":

resulttwo = resultone + cardthree

elif o2 == "-":

resulttwo = resultone - cardthree

elif o2 == "*":

resulttwo = resultone * cardthree

elif o2 == "/":

resulttwo = resultone / cardthree

for o3 in listoperator:

resultthree = 0 # 四個數的運算結果

resultfinal = 0 # 最後兩個數的運算結果

if o3 == "+":

resultthree = resulttwo + cardfour

resultfinal = cardthree + cardfour

elif o3 == "-":

resultthree = resulttwo - cardfour

resultfinal = cardthree - cardfour

elif o3 == "*":

resultthree = resulttwo * cardfour

resultfinal = cardthree * cardfour

elif o3 == "/":

resultthree = resulttwo / cardfour

resultfinal = cardthree / cardfour

# 判斷結果是否為24

if resultthree == 24:

flag =true

# 括號運算

elif resultfinal != 24 and 24%resultone == 0:

for o4 in listoperator:

resultthree = 0

if o4 == "+":

resultthree = resultone + resultfinal

elif o4 == "-":

resultthree = resultone - resultfinal

elif o4 == "*":

resultthree = resultone * resultfinal

elif o4 == "/":

resultthree = resultone / resultfinal

if resultthree == 24:

flag = true

if flag:

break

if flag:

break

if flag:

break

if flag:

break

except zerodivisionerror:

pass

return set(listcardvalue) # 去重

if __name__ == "__main__":

print("四張撲克牌為:%s %s %s %s" % (listcard[0][0], listcard[0][1], listcard[0][2], listcard[0][3]))

cal = card_calculate()

print("這組牌共有 %s 種演算法" % len(cal))

for i in cal:

print(i)

總結:演算法是在網上找的,只能看懂這種演算法。。。

24點遊戲簡單版

題目名稱 24點遊戲 經典的紙牌益智遊戲 題目分析 隨機生成4個代表撲克牌牌面的數字字母,程式自動列出所有可能算出24的表示式,可以利用窮舉法列出4個數字加減乘除的各種可能性,包括括號的演算法,並且要利用迴圈控制計算範圍,防止出現重複的表示式。演算法構造 1 利用隨機函式生成4個隨機數 2 將4個數...

Python實現24點遊戲

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

C 實現簡單24點遊戲

隨機生成4個代表撲克牌牌面的數字字母,程式自動列出所有可能算出24的表示式,用擅長的語言 c c j a或其他均可 實現程式解決問題。程式風格良好 使用自定義注釋模板 列出表示式無重複。以下為源 include include include include using namespace std ...